0
我們的移動應用跟蹤用戶的歷史記錄(歷史事件是預定義的行動和日期)如何使用Redis的跟蹤移動用戶歷史的短期和長期
每個移動報告用戶歷史,後來就可以檢索它。
我雖然在Redis上使用最新的歷史記錄(比方說100條記錄)來快速檢索,並在100條記錄之後將舊數據移動到某些數據源。
- 您是否認爲Redis適合短期歷史檢索?
- 您將使用哪個數據源來保留最早的歷史記錄以供檢索?
來自您的經驗的其他想法?謝謝。
我們的移動應用跟蹤用戶的歷史記錄(歷史事件是預定義的行動和日期)如何使用Redis的跟蹤移動用戶歷史的短期和長期
每個移動報告用戶歷史,後來就可以檢索它。
我雖然在Redis上使用最新的歷史記錄(比方說100條記錄)來快速檢索,並在100條記錄之後將舊數據移動到某些數據源。
來自您的經驗的其他想法?謝謝。
是的,Redis是短期歷史行爲的絕佳選擇。所述LIST公尋找數據結構爲:
此外,您可能會使用某種類型的cron作業, d將舊數據插入到SQL中,如數據庫。使用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)
}
難道不使用使用排序設置和使用的日期爲考試成績?會更容易得到它訂購wouldnt它? – rayman
獲取並插入舊數據的cron作業?它將如何知道從redis獲取舊數據並將其刪除..是否可以在答案上詳細說明該部分以及 – rayman
您正在使用歷史記錄數據,因此每次插入的時間都比以前的時間晚。如果使用ZSET,你會使用時間(unixtime?)作爲實際數據的得分。如果您不需要隨時查詢條件 - ZSET是多餘的。 – misterion