釋放鎖的時(shí)候 get then delete 不是一個(gè)原子操作,可能存在競(jìng)態(tài)問(wèn)題。在多線程環(huán)境中,如果兩個(gè)線程幾乎同時(shí)檢查鎖的值,并且它們都發(fā)現(xiàn)鎖的值與自己的 UUID 匹配,那么它們都會(huì)嘗試刪除鎖,從而可能導(dǎo)致其中一個(gè)線程誤刪另一個(gè)線程的鎖。所以一般采用 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é)點(diǎn)的情況,如果是redis集群部署,需要修改yml配置文件和RedissonClient后面有機(jī)會(huì)我做一個(gè)加餐視頻,來(lái)補(bǔ)充這個(gè)情況哈
2023-03-15