http://www.wtbis.cn/doc/webman/db/redis.html
中只有 pipeline 的使用方法,
如果想使用事務(wù)保證操作的原子性,該怎么用呢?
可以嘗試編寫lua腳本
謝謝,好像這樣可以:
$key = 'Dingding_send_message';
$contents = Redis::eval(<<<'LUA'
local content = redis.call("get", KEYS[1])
redis.call("del", KEYS[1])
return content
LUA, 1, $key);
場景是這樣的:
有多個redis消費(fèi)隊列同時運(yùn)行,接受一個字符串$msg,我需要把$msg存到Redis里,如果之前已經(jīng)存了,就append。
另一個自定義進(jìn)程,每5分鐘運(yùn)行一次,檢查Redis中的字符串是否存在,如存在則將$msg通過釘釘發(fā)出去,同時在Redis中刪除字符串。
問題是現(xiàn)在沒法用Redis事務(wù),我擔(dān)心自定義進(jìn)程刪除Redis的時候,消費(fèi)隊列正好新增。
這種場景,有更好的解決方案嗎?
$key = 'Dingding_send_message';
$contents = Redis::eval(<<<'LUA'
local content = redis.call("get", KEYS[1])
redis.call("del", KEYS[1])
return content
LUA, 1, $key);
也可以結(jié)合redis list來管理 lpush + rpop
//消息入列
$redis->lPush('Dingding_send_message', $msg);
//定時任務(wù)進(jìn)行出列
while ($msg = $redis->rPop('Dingding_send_message')) {
sendToDingDing($msg); //發(fā)送到釘釘
}