如何解决Redis是否已设置条件?
我正在寻找这样的东西:
update data
set data = new_data
where data.updated_at < new_data.updated_at
我找不到解决此问题的方法,
最接近的一种方法是使用WATCH
,但是不幸的是,它无法监视特定的value
条件。
如果redis无法做到这一点,那么您在内存中是否建议任何支持Redis的功能(如Redis)?
解决方法
您可以使用EVAL
command
假设您要同时设置更新时间戳和数据值,并且如果也没有时间戳也设置值(对于首次设置),那么Lua脚本可能类似于:
local updt = redis.call('GET',KEYS[1])
if (not updt) or (tonumber(updt) < tonumber(ARGV[1])) then
return redis.call('MSET',KEYS[1],ARGV[1],KEYS[2],ARGV[2])
else
return redis.error_reply('data is newer on server!')
end
您可以按以下方式调用
:EVAL "local updt = redis.call('GET',KEYS[1]) if (not updt) or (tonumber(updt) < tonumber(ARGV[1])) then return redis.call('MSET',ARGV[2]) else return redis.error_reply('data is newer on server!') end" 2 dataUpdated data 1 initVal
您会在Lua Scripts中找到一个非常有用的工具,可以最大限度地利用Redis。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。