分布式锁与秒杀

分布式锁与秒杀

  • [1. 分布式锁](#1. 分布式锁)
    • [1.1 常用Redis分布式锁方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)](#1.1 常用Redis分布式锁方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令))
  • 秒杀

1. 分布式锁

https://www.cnblogs.com/shoshana-kong/p/17519673.html

1.1 常用Redis分布式锁方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)

实际上,我们还可以使用Lua脚本来保证原子性(包含setnx和expire两条指令),lua脚本如下:

java 复制代码
if redis.call('setnx',KEYS[1],ARGV[1]) == 1 then
   redis.call('expire',KEYS[1],ARGV[2])
else
   return 0
end;

加锁代码如下:

java 复制代码
String lua_scripts = "if redis.call('setnx',KEYS[1],ARGV[1]) == 1 then" +
            " redis.call('expire',KEYS[1],ARGV[2]) return 1 else return 0 end";   
Object result = jedis.eval(lua_scripts, Collections.singletonList(key_resource_id), Collections.singletonList(values));
//判断是否成功
return result.equals(1L);

秒杀

https://zhuanlan.zhihu.com/p/651992240

相关推荐
kyle~几秒前
Linux时间系统1 --- 正确使用时间
java·linux·服务器
吴声子夜歌9 分钟前
Java——泛型
java·开发语言·泛型
XiYang-DING10 分钟前
【Java EE】 HTTP协议
java·http·java-ee
敖正炀25 分钟前
JDBC 批处理内核:addBatch、executeBatch 与驱动 SQL 重写
java
计算机安禾25 分钟前
【c++面向对象编程】第9篇:友元(friend):破坏封装的“特权”——真的有害吗?
java·c++·log4j
LJianK127 分钟前
乐观锁算线程同步吗?
java·开发语言·jvm
用户2986985301430 分钟前
Java 后端处理 Word 修订:批量接受与拒绝的自动化方案
java·后端
WL_Aurora35 分钟前
IDEA + Maven 环境配置超详细教程(图文详解)
java·maven·intellij-idea
小雅痞39 分钟前
[Java][Leetcode middle] 73. 矩阵置零
java·leetcode·矩阵
funnycoffee1231 小时前
cisco Firepower 4110 9300 FXOS set chassis hostname
java·服务器·数据库