目前有很多项目还在使用jedis的 setNx
充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一
实现,
集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持
集群模式
,云托管模式
,单Redis节点模式
,哨兵模式
,主从模式
配置. 支持 可重入锁
,公平锁
,联锁
,红锁
,读写锁
锁定模式
增加基于jvm的本地缓存,大大降低了网络开销
@Autowired
private RedissonObjectLocalCache redissonObjectLocalCache;
@Autowired
private RedissonCollectionLocalCache redissonCollectionLocalCache;
其他更新 请点击这里
redisson
?
redisson
目前是官方唯一推荐的java版的分布式锁,他支持redlock
.具体请查看 官方文档
目前jedis是只支持单机的.
jedis setNx 和设置过期时间是不同步的,在某些极端的情况下会发生死锁.导致程序崩溃.如果没有设置value, 线程1可能会释放线程2的锁
.1. 引入 pom.xml
<dependency>
<groupId>com.zengtengpeng</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>1.0.18</version>
</dependency>
如果是spring3X
<dependency>
<groupId>com.zengtengpeng</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.1.5</version>
</dependency>
application.properties
增加#单Redis节点模式
redisson.singleServerConfig.address=127.0.0.1:6379
1.如何使用
分布式锁
?
在方法增加 @Lock
注解 lock参数介绍
//1.支持spel表达式,keyConstant是常量(可选)
@Lock(keys = "#user.name",keyConstant = "常量"))
public String test(User user) {
System.out.println("进来了test");
return "test";
}
2.如何存储数据?
1.RedissonObject 这个是比较通用的模板,任何对象都可以存在这里面,在spring 容器中注入对象即可 demo实例
@Autowired
private RedissonObject redissonObject;
2.RedissonCollectionLocalCache 相比 RedissonCollection 增加了基于jvm的内存缓存.大大降低了网络开销
@Autowired
private RedissonCollectionLocalCache redissonCollectionLocalCache;
3.RedissonObjectLocalCache 相比 RedissonObject 增加了基于jvm的内存缓存.大大降低了网络开销
@Autowired
private RedissonObjectLocalCache redissonObjectLocalCache;
4.RedissonBinary 这个是存储二进制的模板.可以存放图片之内的二进制文件,在spring 容器中注入对象即可 demo实例
@Autowired
private RedissonBinary redissonBinary;
5.RedissonCollection 这个是集合模板,可以存放Map
,List
,Set
集合元素,在spring 容器中注入对象即可 demo实例
@Autowired
private RedissonCollection redissonCollection;
5.RedissonCollectionCache 此集合与上面的 RedissonCollection 基本相同,但是增加单个元素的淘汰机制 详见 WIKI
@Autowired
private RedissonCollectionCache redissonCollectionCache;
- 如何session集群?
在启动类标注
@EnableRedissonHttpSession
即可
redisson
客户端实现自定义操作,只需要在spring 容器中注入redisson客户端就行,如下: @Autowired
private RedissonClient redissonClient;
启动类加上
@EnableCache(value = {"cache1","cache2"})
,@Cacheable,@CachePut,@CacheEvict的value必须包含在这里面
使用起来非常简单.两个注解即可完成操作
消息队列分为 生产者
以及消费者
,生产者
生产消息供消费者
消费 详细实例
生产者
配置,发送消息有两种模式,二选一即可
1.代码模式
RTopic testMq = redissonClient.getTopic("testMq");
User message = new User();
message.setAge("12");
message.setName("的身份为");
testMq.publish(message);
2.注解模式
@RequestMapping("testMq1")
@ResponseBody
@MQPublish(name = "test")
public User testMq1(){
User user=new User();
user.setName("garegarg");
user.setAge("123");
return user;
}
消费者
配置
1.启动类加上 @EnableMQ
开启消费者
2.使用注解@MQListener(name = "testMq")
配置消费者
@MQListener(name = "testMq")
public void test1(CharSequence charSequence,User o,Object object){
System.out.println("charSequence="+charSequence);
System.out.println("收到消息2"+o);
}
公共参数
,单例模式参数
,集群模式参数
) 链接地址此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型