我想使用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()
}
处理这种情况的惯用方法是什么?
答案 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