redis作为分布式锁的要点
来源:互联网 发布:m4步枪 知乎 编辑:程序博客网 时间:2024/06/03 19:43
if (redisClient.setnx(lockKey, "1") > 0) {//锁不存在,则获取锁成功
redisClient.expire(lockKey, lockSeconds);
}
redisClient.expire(lockKey, lockSeconds);
}
你这个setnx和expire一定要是原子性的,即要不两个都成功,要不两个都失败。
不然你前面成功了,后面设置时间这个失败了,锁就没有有效时间了,他一直存在着。
为了避免这种问题出现我们需要这个方法判断一下
if (redisClient.ttl(lockKey) == -1) {//防止上一操作加锁成功,但设置过期语句执行失败; [当 key 存在但没有设置剩余生存时间时,返回 -1]
redisClient.expire(lockKey, 1);//迅速过期,1秒有效时间
}
redisClient.expire(lockKey, 1);//迅速过期,1秒有效时间
}
redisClient.del(lockKey)//删除键
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以秒为单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
阅读全文
0 0
- redis作为分布式锁的要点
- redis作为分布式锁的设计
- 选择Redis作为分布式缓存
- redis的分布式锁
- Redis的分布式锁
- 【Redis深入】Redis分布式锁的实现
- redis分布式锁的实现
- redis实现的分布式锁
- 基于Redis的分布式锁
- redis分布式锁的实现
- 分布式锁的redis实现
- redis分布式锁的思考
- 基于Redis的分布式锁
- 基于redis的分布式锁
- 基于redis的分布式锁
- 分布式数据库设计的要点
- 基于redis的分布式锁的实现
- 基于redis的分布式锁的实现
- 使用GitLab来实现IOS项目的持续集成CI
- tensorflow笔记
- C++ STL之set常见用法
- 基本概念-同步、异步、阻塞、非阻塞
- 命令行参数解析之getopt
- redis作为分布式锁的要点
- 错误总结-apache-CXF
- java开发系统内核:实现窗口创建API,由DOS进入windows
- listview点击实现帧动画平移放大
- Linux下如何查看版本信息
- 二叉树总结
- Node.js环境变量配置
- mac 启用wifi调试android 程序
- 查找不到根节点的不可见的物体,transform.Find 与GameObject.Find区别