有两个系统共享一个redis数据库,一个系统只读取redis,另一个系统更新它。
读取系统非常繁忙以至于redis无法处理它,减少redis请求的数量,我发现" mget",但我也发现" multi&# 34。
我确定mget会减少请求的数量,但是" multi"照着做?我认为"多"将强制redis服务器保留有关此事务的一些信息,并逐个从客户端收集此事务中的请求,因此发送的请求总数保持不变,但返回的结果将合并在一起,对吗?
所以,如果我只是阅读KeyA,keyB,keyC in" multi"当另一个写入系统改变了KeyB的值时,会发生什么?
答案 0 :(得分:1)
简答:您应该使用MGET
MULTI
用于交易,不会减少请求数量。此外,将来不推荐使用MULTI
命令 MIGHT ,因为有更好的选择:lua scripting
。
- 所以如果我只是在其他写入系统改变KeyB的值时读取KeyA,keyB,keyC in“multi”,会发生什么?
醇>
由于MULTI
(带EXEC
)命令确保事务,所有三个GET
命令(读取操作)都以原子方式执行。如果更新发生在读取操作之前,您将获得旧值。否则,您将获得新值。
顺便说一下,还有另一个减少RTT的选项:PIPELINE
。但是,在您的情况下,MGET
应该是最佳选择。