首页 > 数据库 >redis-分布式锁注意事项

redis-分布式锁注意事项

时间:2023-06-27 11:13:12浏览次数:105  
标签:opsForValue redis value setIfAbsent 注意事项 delete lockKey redisTemplate 分布式

lockKey:商品标识
value:当前线程标识

1.确保每把锁同一时间能且仅能上一次
setnx(set if not exists):当锁不存在时才上锁
redisTemplate.opsForValue().setIfAbsent(lockKey,value)
没加上锁需要返回错误码 直接让其重试

2.上锁成功后,需要在之后将锁释放
redisTemplate.delete(lockKey)

3.需要考虑拿到锁以后,中途有可能抛异常,从而死锁,别人再也拿不到锁
try{}catch{}finally{redisTemplate.delete(lockKey)}

4.需要考虑服务器宕机或者停电或者内存不够杀进程等等诸多物理因素,导致整个jar包停掉了,此时其他服务器上的jar包依然上正常的,可是,这样也有可能死锁
设置过期时间
redisTemplate.opsForValue().setIfAbsent(lockKey,value)
--->
redisTemplate.opsForValue().setIfAbsent(lockKey,value,10,TimeUnit.SECONDS)

5.如果过期时间过了,别人拿到锁了,但是自身没有走完所有代码,然后删除锁的时候,要确保不能删掉别人的锁
redisTemplate.delete(lockKey)
--->

value--->clientID
clientID = UUID.randomUUID().toString()
if(clientID.equals(redisTemplate.opsForValue().get(lockKey)))
{
redisTemplate.delete(lockKey)
}

Redisson

标签:opsForValue,redis,value,setIfAbsent,注意事项,delete,lockKey,redisTemplate,分布式
From: https://www.cnblogs.com/dengliang356a/p/17508140.html

相关文章

  • 分布式任务elasticjob整合springboot本地多服务启动(附源码)
    Elastic-Job是一个分布式调度的解决方案,由当当网开源,它由两个相互独立的子项目Elastic-Job-Lite和ElasticJob-Cloud组成,使用Elastic-Job可以快速实现分布式任务调度。Elastic-Job的github地址:https://github.com/elasticjob功能列表:分布式调度协调在分布式环境中,任务能够按指......
  • redis分布式锁实现
    @AutowiredprivateRedisTemplate<String,String>redisTemplate;//有死锁问题,设置锁的过期时间防止死锁publicvoidincr(){Booleanlock=redisTemplate.opsForValue().setIfAbsent("lock","1111"); //setnx,只有key不存在才能设置成功......
  • 分布式事务、CAP理论、BASE理论
    分布式事务、CAP理论、BASE理论什么是分布式事务?首先理解什么是本地事务?平常我们在程序中控制事务是利用数据库本身的事务特性来实现的,比如spring中的@Transactional注解,因此叫数据库事务。由于应用主要靠关系数据库来控制事务,此数据库只属于该应用,所以基于本应用自己的关......
  • redis初见
    redis介绍redis下载:1、官网:https://redis.io/-目前最稳定:6.x版本-最新版本:7.x2、中文网:http://redis.cn/download.html-上面最新只到5.x版本3、windows版本下载地址-redis官方不提供windows版本,但windows封装了一些安装包,使其可以安装在linux下......
  • 转载: redis中的bigkey问题
    reference:  https://www.modb.pro/db/459810 什么是bigkeybigkey就是rediskey/value体系中的大value问题。我们知道redis的底层数据存储结构中,有多种数据结构的实现。String:简单动态字符串List:双向链表、压缩列表 Hash:哈希表、压缩列表 SortedSet:跳表、压......
  • 基于docker部署redis
    Docker中部署redis一、在docker中拉去redis镜像dockerpullredis二、在本机给redis创建配置文件1.mkdir–p/root/docker/redis/conf2.上传redis自带的redis.conf到改目录下。注意:有可能xftp无法链接,可以先传到其他目录,在linux中移动到该目录3.编辑redis.conf配置文件3.1.把bind......
  • 项目集成redis实战
    项目集成redis实战1.进入到项目的tomcat配置文件中,修改redis服务器和密码cd/usr/src/tomcat-pinter/webapps/WEB-INF/classes/viapplication.properties.2.杀死tomcat进程,重启服务3.重启服务cd/usr/src/tomcat-pinter/bin./startup.sh&tail–f../logs/catalina.ou......
  • linux下redis安装与使用
    linux下redis安装与使用一、redis安装1.上传reids压缩包到任意目录,一般与mysql数据库放一起。/usr/src2.redis压缩包解压tarxvfredis-7.0.4.tar.gz3.用gcc编译C语言,先安装gccyuminstall–ygcc4.进入到解压后的redis目录下,执行编译make5.执行安装命令makeinstall默认安装在:/u......
  • redis常用命令
    Redis常用命令一.redis特点:1.支持数据的持久化,可以将内存的数据保存在磁盘中,重启时再次加载2.存储的数据多样化,支持:string、list、hash、set、zset数据结构的存储3.支持master-slave模式的数据备份二.redis优势:性能高,读的速度为11万次/s,写的速度8.1万次/s三.常用的数据命令string类......
  • redis配置和使用方法
    Redis配置和使用方法一、下载和环境配置1.下载Redis官网:https://github.com/tporadowski/redis/releases,根据本地电脑下载适配的压缩包。2.环境配置下载到本地后,解压到任意目录。进入文件内,复制地址添加到本地电脑的系统环境变量Path路径。二、Redis启动和连接1.启动Redis服务端打......