2015-03-31 35 views
0

我知道使用多执行redis命令是延迟,直到块完成。批/带redis总结不同的键

如何使用多个(或类似的)发送一个redis请求,但仍然能够使用返回的数据进行计算?

示例 - 用户有很多朋友。每个朋友都有自己的一组朋友。我想统计每个用户有多少朋友朋友(有重复)

$redis.multi do 
    friends_of_friends = user.friends.map(&:friends_count) 
end 

friend_of_friends.inject(&:+) 

是可能的吗?

回答

0

你试图达到的主要目标是什么? MULTI/EXEC确保大量命令作为一个块(即原子)执行 - 因此尝试读取并根据响应进行写操作是不可能的。

使用Redis执行此操作的方法是使用WATCH指令获得乐观锁定 - 如果更改了WATCH键,EXEC将会出错。或者,您应该考虑使用Lua脚本来嵌入读取逻辑 - 这将确保原子性,需要向Redis发送一个请求,并节省网络开销。