分布式锁与秒杀

分布式锁与秒杀

  • [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

相关推荐
cqwuliu18 小时前
Freemarker模板工具
java·开发语言
asdfg125896318 小时前
`(line1, line2) -> line1 + line2` 此Lambda 表达式的理解
java·开发语言
AI人工智能+电脑小能手19 小时前
【大白话说Java面试题 第49题】【JVM篇】第9题:什么是双亲委派机制?介绍一下运作过程。?
java·开发语言·jvm
码农-阿杰19 小时前
Java 线程中断机制深度解析:从 API 到底层 C++ 实现
java·开发语言·c++
风味蘑菇干19 小时前
斗地主案例
java·数据结构·算法
宠..19 小时前
VS Code 修改 C++ 标准同时修改错误检测标准
java·linux·开发语言·javascript·c++·python·qt
WL_Aurora19 小时前
Java Scanner输入陷阱深度解析
java·开发语言
一只大袋鼠19 小时前
SpringMVC 框架中的拦截器
java·springmvc·javaweb·拦截器
Han_han91919 小时前
斗地主案例:
java·开发语言
阿丰资源19 小时前
基于SpringBoot的电影评论网站(含源码)
java·spring boot·后端