国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman redis 中如何啟用事務(wù)?

roczyl

http://m.wtbis.cn/doc/webman/db/redis.html
中只有 pipeline 的使用方法,
如果想使用事務(wù)保證操作的原子性,該怎么用呢?

494 4 2
4個(gè)回答

胡桃

無(wú)法啟用

  • roczyl 2025-03-03
            $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);
  • 胡桃 2025-03-04

    這不是事務(wù),只是一個(gè)原子性的指令,ACID 特性只保證了 A

    而且 Redis 官方在 7.0 之后推出了 Functions 替代 Eval Scripts.

  • roczyl 2025-03-04

    嗯。實(shí)際上我只要保證在讀取和刪除之間不要插入新的數(shù)據(jù)就行。這個(gè)可以滿足我的要求。

timeless-zyg

可以嘗試編寫lua腳本

roczyl

場(chǎng)景是這樣的:
有多個(gè)redis消費(fèi)隊(duì)列同時(shí)運(yùn)行,接受一個(gè)字符串$msg,我需要把$msg存到Redis里,如果之前已經(jīng)存了,就append。
另一個(gè)自定義進(jìn)程,每5分鐘運(yùn)行一次,檢查Redis中的字符串是否存在,如存在則將$msg通過(guò)釘釘發(fā)出去,同時(shí)在Redis中刪除字符串。
問(wèn)題是現(xiàn)在沒法用Redis事務(wù),我擔(dān)心自定義進(jìn)程刪除Redis的時(shí)候,消費(fèi)隊(duì)列正好新增。
這種場(chǎng)景,有更好的解決方案嗎?

  • roczyl 2025-03-03
            $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);
shiroi

也可以結(jié)合redis list來(lái)管理 lpush + rpop

//消息入列
$redis->lPush('Dingding_send_message', $msg);

//定時(shí)任務(wù)進(jìn)行出列
while ($msg = $redis->rPop('Dingding_send_message')) {
    sendToDingDing($msg); //發(fā)送到釘釘
}
  • roczyl 2025-03-04

    有30個(gè)進(jìn)程在1分鐘之內(nèi)往Redis中放數(shù)據(jù),也許其中幾個(gè)會(huì)失敗,我大概在1分鐘以后,將這30個(gè)都拿出來(lái)拼成一個(gè)字符串發(fā)送到釘釘。

  • roczyl 2025-03-04

    用你這種一個(gè)個(gè)發(fā)的話,實(shí)際上我就沒必要這樣做了,收到信息就發(fā)掉就行了。

??