简介
说明
本文用示例介绍Redisson的用法。
官网
官网:https://redisson.org/
git:https://github.com/redisson/redisson
git文档:https://github.com/redisson/redisson/wiki
常用操作
获得Redisson客户端
@Autowired private RedissonClient redissonClient;
根据key获得value
所有get开头的方法:如果key不存在会在保存时以此key为key保存。
getList。它返回RList,RList实现了java.util.List。所以我们可以像操作List一样操作RList。(其他类型,例如:RMap等也是一样,和JDK的接口一样的操作)。
将key-value写到Redis
所有添加都会自动将值写到Redis。例如:
RSet<String> set = redisson.getSet("anySet");
set.add("Tony");
示例:任意对象(包括String)
package com.knife.test;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/test")
public String test(){
RBucket<Object> bucket = redissonClient.getBucket("key1");
// 此处可以是任意对象,不仅仅是字符串
bucket.set("value1");
String str1 = (String) rBucket.get();
System.out.println(str1);// 此处会打印出:value1
// 删除"key1"这一项数据
bucket.delete();
return "success";
}
}
示例:集合类型
本处只展示getList。它返回RList,RList实现了java.util.List。所以我们可以像操作List一样操作RList。(其他类型,例如:RMap等也是一样,和JDK的接口一样的操作)
package com.knife.test;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/test")
public String test(){
RList<Object> list1 = redissonClient.getList("list1");
list1.add(123);
list1.add("abc");
list1.remove("abc");
return "success";
}
}
示例:分布式锁
package com.knife.order;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@Autowired
private RedissonClient redissonClient;
/**
* 提交订单
*/
@PostMapping("/submitOrder")
public String submitOrder(){
RLock lock = redissonClient.getLock(key);
// 这里lock不可能为null。
// 官方文档就是这么写的,你要实在想判断null也可以。
boolean locked = false;
locked = lock.tryLock();
if (!locked) {
throw new RuntimeException("正在处理中,请稍后重试");
}
try {
// 处理逻辑
} finally {
lock.unlock();
}
// 写法2:阻塞写法
// try {
// // 阻塞,直到获取到锁
// lock.lock();
//
// //数据库操作:插入订单数据,扣减库存等
// } finally {
// lock.unlock();//释放锁
// }
// 写法3:带超时时间
// try {
// // 获取到锁则locked为true,超过三秒没获取到锁则locked为false
// locked = lock.tryLock(3, TimeUnit.SECONDS);
// } catch (InterruptedException e) {
// throw new RuntimeException(e);
// }
// if (!locked) {
// throw new RuntimeException("正在处理中,请稍后重试");
// }
// try {
// // 处理逻辑
// } finally {
// lock.unlock();
// }
return "success";
}
}
示例:模糊查询
官网网址
RKeys – redisson 3.10.0 javadoc
相关网址
Redis–模糊查询–方法/实例_IT利刃出鞘的博客-CSDN博客
实例
package com.knife.test;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/test")
public String test(){
RKeys keys = redissonClient.getKeys();
Iterable<String> keysByPattern = keys.getKeysByPattern("abc*");
long delete = keys.deleteByPattern("def?");
return "success";
}
}
示例:过期时间
所有的类型都有过期时间,例如:
RSet<String> set = redisson.getSet("anySet");
set.add("Tony");
set.expire(3, TimeUnit.MINUTES);
过期时间在类型为空时是无效的,例如:
RSet<String> set = redisson.getSet("anySet");
set.expire(3, TimeUnit.MINUTES);
set.add("Tony");
给Set的某一个值设置过期时间
RSetCache<String> set = redisson.getSetCache("anySet");
// ttl = 10 seconds
set.add("abc", 10, TimeUnit.SECONDS);
给Map的某一个小Key设置过期时间
RMapCache<Object, Object> outerMap = redissonClient.getMapCache("outer");
outerMap.put("innerKey1", "innerValue1", 10, TimeUnit.SECONDS);
数据类型
| 方法 | 返回类型 |
| getSet(“xxx”) | RSet<SomeObject> |
| getList(“xxx”) | RList<SomeObject> |
| getMap(“anyMap”); | RMap<String, SomeObject> |
| getSetMultimap(“myMultimap”); | RSetMultimap<SimpleKey, SimpleValue> |
| getSortedSet(“anySet”); | RSortedSet<Integer> |
| getScoredSortedSet(“simple”); | RScoredSortedSet<SomeObject> |
| getLexSortedSet(“simple”); | RLexSortedSet set |
| getQueue(“anyQueue”); | RQueue<SomeObject> |
| getDeque(“anyDeque”); | RDeque<SomeObject> |
| getBlockingQueue(“anyQueue”); | BlockingQueue<SomeObject> |
| getBoundedBlockingQueue(“anyQueue”); | RBoundedBlockingQueue<SomeObject> |
| getBlockingDeque(“anyDeque”); | RBlockingDeque<Integer> |
| getBlockingFairQueue(“myQueue”); | RBlockingFairQueue |
| getBlockingFairDeque(“myDeque”); | RBlockingFairDeque |
| getDelayedQueue(distinationQueue); | RDelayedQueue<String |
| getPriorityQueue(“anyQueue”); | RPriorityQueue<Integer> |
| getPriorityDeque(“anyQueue”); | RPriorityDeque<Integer> |
| getPriorityBlockingQueue(“anyQueue”); | RPriorityBlockingQueue<Integer> |
| RPriorityBlockingDeque<Integer> | getPriorityBlockingDeque(“anyQueue”); |

请先 !