釋放鎖的時候 get then delete 不是一個原子操作,可能存在競態(tài)問題。在多線程環(huán)境中,如果兩個線程幾乎同時檢查鎖的值,并且它們都發(fā)現(xiàn)鎖的值與自己的 UUID 匹配,那么它們都會嘗試刪除鎖,從而可能導(dǎo)致其中一個線程誤刪另一個線程的鎖。所以一般采用 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里面設(shè)置redis服務(wù)地址
spring.redis.host=127.0.0.1 就行了
2023-04-18
最贊回答 / 慕用4124484
視頻演示的是redis單節(jié)點的情況,如果是redis集群部署,需要修改yml配置文件和RedissonClient后面有機會我做一個加餐視頻,來補充這個情況哈
2023-03-15