释放锁的时候 get then delete 不是一个原子操作,可能存在竞态问题。在多线程环境中,如果两个线程几乎同时检查锁的值,并且它们都发现锁的值与自己的 UUID 匹配,那么它们都会尝试删除锁,从而可能导致其中一个线程误删另一个线程的锁。所以一般采用 lua 脚本:
```lua
local key = KEYS[1]
local value = ARGV[1]
if redis.call("GET", key) == value then
return redis.call("DEL", key)
else
return 0
end
```
```lua
local key = KEYS[1]
local value = ARGV[1]
if redis.call("GET", key) == value then
return redis.call("DEL", key)
else
return 0
end
```
2025-01-03
最新回答 / weixin_慕UI8109293
在application.properties里面设置redis服务地址
spring.redis.host=127.0.0.1 就行了
2023-04-18
最赞回答 / 慕用4124484
视频演示的是redis单节点的情况,如果是redis集群部署,需要修改yml配置文件和RedissonClient后面有机会我做一个加餐视频,来补充这个情况哈
2023-03-15