本文主要是介绍Redission分布式锁介绍和配置引入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本人在实际项目用于确保Key一致性经常使用的一种加锁方式,帮助分布式环境中互斥访问。很多人问不用锁不是一样完成目标吗?但需要清楚的是这是在高并发的场景下,多节点同时访问缓存的场景,是一般单体项目所无法比拟的,使用锁方式可以控制并发访问,避免缓存击穿和雪崩等问题。(关于缓存击穿和雪崩等后续会出单独一篇文章讲述,敬请期待...),以下我记录了一般引入方式和使用方式。
Redission介绍
是一个在Redis的基础上实现的Java驻内存数据网格,支持多样Redis配置支持、丰富连接方式、分布式对象、分布式集合、分布式锁、分布式服务、多种序列化方式、三方框架整合,底层采用的是Netty 框架,使用了大量的Lua脚本。
官方文档:https://github.com/redisson/redisson
Maven配置
聚合工程锁定版本,common项目添加依赖(多个服务都会用到分布式锁)<!--分布式锁-->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.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);
这篇关于Redission分布式锁介绍和配置引入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!