关键词有条件更新的惯用法

时间:2018-02-13 12:51:06

标签: redis

我想使用Redis缓存用户发送给我的最新数据。但是,我不能只使用SET,因为用户可能无序发送数据,我需要根据另一个键的值来调整SET,例如:

latest_timestamp = GET "latest_timestamp:<new_data.user_id>"
if latest_timestamp < new_data.timestamp {
  SET "latest_timestamp:<new_data.user_id>" new_data.timestamp
  SET "latest_data:<new_data.user_id>" new_data.to_string()
}

处理这种情况的惯用方法是什么?

1 个答案:

答案 0 :(得分:4)

服务器端Lua脚本(参见EVAL)是IMO惯用的方法。

确保您的代码传递两个密钥的全名(即所有替换),以及新时间戳和新数据作为参数。该脚本应如下所示:

local lts = tonumber(redis.call('GET', KEYS[1]))
local nts = tonumber(ARGV[1])
if lts < nts then
  redis.call('SET', KEYS[1], nts)
  redis.call('SET, KEYS[2], ARGV[2])
end