视频网站开发 博客园,wordpress项目管理插件,商业计划书ppt模板免费下载,网站建设科技公司本人在实际项目用于确保Key一致性经常使用的一种加锁方式#xff0c;帮助分布式环境中互斥访问。很多人问不用锁不是一样完成目标吗#xff1f;但需要清楚的是这是在高并发的场景下#xff0c;多节点同时访问缓存的场景#xff0c;是一般单体项目所无法比拟的#xff0c;使… 本人在实际项目用于确保Key一致性经常使用的一种加锁方式帮助分布式环境中互斥访问。很多人问不用锁不是一样完成目标吗但需要清楚的是这是在高并发的场景下多节点同时访问缓存的场景是一般单体项目所无法比拟的使用锁方式可以控制并发访问避免缓存击穿和雪崩等问题。关于缓存击穿和雪崩等后续会出单独一篇文章讲述敬请期待...以下我记录了一般引入方式和使用方式。
Redission介绍 是一个在Redis的基础上实现的Java驻内存数据网格支持多样Redis配置支持、丰富连接方式、分布式对象、分布式集合、分布式锁、分布式服务、多种序列化方式、三方框架整合底层采用的是Netty 框架使用了大量的Lua脚本。 官方文档https://github.com/redisson/redisson Maven配置
聚合工程锁定版本common项目添加依赖多个服务都会用到分布式锁!--分布式锁--
dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.10.1/version
/dependency
环境配置 Configuration
public class RedssionConfiguration {Value(${spring.redis.host})private String redisHost;Value(${spring.redis.port})private String redisPort;Value(${spring.redis.password})private String redisPwd;/*** 配置分布式锁的redisson* return*/Beanpublic RedissonClient redissonClient(){Config config new Config();//单机方式config.useSingleServer().setPassword(redisPwd).setAddress(redis://redisHost:redisPort);//集群//config.useClusterServers().addNodeAddress(redis://192.168.1.108:6379,redis://192.168.1.109:6379)RedissonClient redissonClient Redisson.create(config);return redissonClient;}/*** 集群模式* 备注可以用rediss://来启用SSL连接*//*Beanpublic RedissonClient redissonClusterClient() {Config config new Config();config.useClusterServers().setScanInterval(2000) // 集群状态扫描间隔时间单位是毫秒.addNodeAddress(redis://127.0.0.1:7000).addNodeAddress(redis://127.0.0.1:7002);RedissonClient redisson Redisson.create(config);return redisson;}*/}
使用案例
// 分布式锁
RLock lock redissonClient.getLock(key);
// 尝试加锁最多等待2秒上锁以后5秒自动解锁 [lockTime默认为5s, 可以自定义]
res lock.tryLock(2, lockTime, TimeUnit.SECONDS);该方法等价于
res redisTemplate.opsForValue().setIfAbsent(key, 1, lockTime, TimeUnit.SECONDS);