千萬(wàn)數(shù)據(jù)redis分頁(yè)查詢(xún) redis如何實(shí)現(xiàn)多條件分頁(yè)查詢(xún)?
redis如何實(shí)現(xiàn)多條件分頁(yè)查詢(xún)?分頁(yè)邏輯應(yīng)該在程序中完成,然后將每頁(yè)的數(shù)據(jù)保存在redis中普通分頁(yè)一般的分頁(yè)緩存是直接查找出來(lái),逐頁(yè)放入緩存,但是這種緩存方法有很多缺點(diǎn)。如果無(wú)法及時(shí)更新緩存,則一
redis如何實(shí)現(xiàn)多條件分頁(yè)查詢(xún)?
分頁(yè)邏輯應(yīng)該在程序中完成,然后將每頁(yè)的數(shù)據(jù)保存在redis中
普通分頁(yè)
一般的分頁(yè)緩存是直接查找出來(lái),逐頁(yè)放入緩存,但是這種緩存方法有很多缺點(diǎn)。
如果無(wú)法及時(shí)更新緩存,則一旦數(shù)據(jù)更改,所有以前的分頁(yè)緩存都將無(wú)效。
例如,在像微博這樣的場(chǎng)景中,微博下有排名靠前的次數(shù)。這在傳統(tǒng)的分頁(yè)中很難處理。
一個(gè)主意
最近,我想到了另一個(gè)主意。
數(shù)據(jù)緩存在redis中,ID為key;
數(shù)據(jù)ID和排序得分保存在redis的skip list中,即Zset;
查找數(shù)據(jù)時(shí),首先從redis的skip list中提取相應(yīng)的分頁(yè)數(shù)據(jù),得到ID list。
使用multi-get一次從redis獲取ID列表中的所有數(shù)據(jù)。如果有缺少某個(gè)ID的數(shù)據(jù),將從數(shù)據(jù)庫(kù)中搜索并返回給用戶(hù),搜索到的數(shù)據(jù)將按ID緩存在redis中
在最后一步,您可以有一些提示:
例如,如果缺少某個(gè)ID數(shù)據(jù),首先直接返回給用戶(hù),然后前端使用Ajax請(qǐng)求丟失的ID數(shù)據(jù),然后動(dòng)態(tài)刷新。
還有一些優(yōu)化可能會(huì)將操作與Lua腳本合并,但是考慮到Lua腳本比較慢,您可能需要仔細(xì)測(cè)試它們。
如果您使用的是Lua腳本,則可以在一個(gè)請(qǐng)求中完成以下操作:
查找頁(yè)面上的所有文章,返回緩存文章的ID和內(nèi)容,以及不在緩存中的文章的ID列表。
其他事項(xiàng):Lua支持LRU模式,類(lèi)似memcached。但奇怪的是,沒(méi)有人這樣使用它。
也許redis已經(jīng)準(zhǔn)備好存儲(chǔ)redis很長(zhǎng)時(shí)間了,我不擔(dān)心內(nèi)存容量。
redis怎么緩存用戶(hù)列表,做到可以分頁(yè)展示?
對(duì)于具有分頁(yè)條件的緩存,可以緩存多個(gè)密鑰。Page=1&;limit=10和Page=1&;limit=5可用于緩存查詢(xún)結(jié)果