我们的移动应用跟踪用户历史记录(历史事件已预先定义,包含操作和日期)
报告用户历史记录的每个移动设备都可以检索它。
我使用Redis上的最新历史记录(让我们说100条记录)来快速检索,并在100条记录之后将旧数据移动到某些数据源。
您的经历中的其他想法?谢谢。
答案 0 :(得分:1)
是的,Redis非常适合短期历史行为。 LIST具有良好的数据结构:
此外,您可以使用某种类型的cron作业来获取和插入旧数据,如数据库。使用LUA scrpting获取日志尾部:
local ret = {}
while tonumber(redis.call('llen', KEYS[1])) > tonumber(ARGV[1]) do
table.insert(ret, redis.call('rpop', KEYS[1]))
end
return ret
其中KEY是您的LIST键,第一个参数是要处理的尾部大小。此LUA脚本以原子方式切断(并返回)所有日志条目,而不是ARGV 1。下一步是按列表简单foreach并插入SQL数据库。
虽然用户想要获取他的所有历史记录(在伪代码中,require
个变量是用户查询的总记录数):
ret = redis.call('LRANGE', 'myKey', 0, require)
require = require - length(ret)
if (require > 0) {
ret += db.query('SELECT ... LIMIT ' + require)
}