我知道使用multi执行redis命令会延迟到块结束。
如何使用multi(或类似)发送一个redis请求,但仍能使用返回的数据进行计算?
示例 - 用户有很多朋友。每个朋友都有自己的朋友。我想计算每个用户有多少朋友的朋友(有重复)
$redis.multi do
friends_of_friends = user.friends.map(&:friends_count)
end
friend_of_friends.inject(&:+)
可能吗?
答案 0 :(得分:0)
您尝试实现的主要目标是什么? MULTI / EXEC确保大量命令作为一个块(即原子级)执行 - 因此尝试读取然后根据响应进行写入是不可能的。
使用Redis执行此操作的方法是使用WATCH
指令来获得乐观锁定 - 如果更改了WATCHed键,则EXEC将出错。或者,您应该考虑使用Lua脚本来嵌入读取和放大器。写逻辑 - 这将确保原子性,将需要一个Redis的请求,并将节省网络开销。