壹般是直接找到分頁緩存,按頁放入緩存中,但這種緩存方式有很多缺點。
如果緩存不能及時更新,壹旦數據發生變化,之前的所有分頁緩存都將失效。
例如,在微博這樣的場景中,現在微博下有壹個頂級排名。這在傳統的分頁方式中很難處理。
思路
最近,我想到了另壹種思路。
數據緩存在Redis中,以ID為鍵;
將數據ID和排序分數存儲在Redis的跳轉列表中,即zset
查找數據時,首先從Redis中的skip list中取出對應的分頁數據,得到ID列表。
使用multi get壹次性從redis中獲取ID列表中的所有數據。如果有任何數據缺少某個ID,則從數據庫中查找它,再次返回給用戶,並根據ID在Redis中緩存找到的數據。
在最後壹步,妳可以有壹些提示:
比如在缺少壹些ID數據的情況下,直接先返回給用戶,然後前端用ajax請求缺少的ID數據,然後動態刷新。
還有壹些優化可能會使用Lua腳本來合並操作,但考慮到Lua腳本速度較慢,可能需要仔細測試。
如果使用Lua腳本,以下操作可以在壹個請求中完成:
查找頁面上的所有文章,並返回緩存文章的ID和內容,以及未緩存文章的ID列表。
其他事情:
Lua支持LRU模式,也就是說,它像Memcached壹樣工作。但是好像沒見過有人這樣用,很奇怪。
可能是redis已經可以存儲了,我不擔心內存的容量。