利用redis快取熱門資料,分頁的一種思路
普通分頁
一般分頁做快取都是直接查詢出來,按頁放到快取裡,但是這種快取方式有很多缺點。
如快取不能及時更新,一旦資料有變化,所有的之前的分頁快取都失效了。
比如像微博這樣的場景,微博下面現在有一個頂次數的排序。這個用傳統的分頁方式很難應對。
一種思路
最近想到了另一種思路。
資料以ID為key快取到Redis裡;
把資料ID和排序打分存到Redis的skip list,即zset裡;
當查詢資料時,先從Redis裡的skip list取出對應的分頁資料,得到ID列表。
用multi get從redis上一次性把ID列表裡的所有資料都取出來。如果有缺少某些ID的資料,再從資料庫裡查詢,再一塊返回給使用者,並把查出來的資料按ID快取到Redis裡。
在最後一步,可以有一些小技巧:
比如在缺少一些ID資料的情況下,先直接返回給使用者,然後前端再用ajax請求缺少的ID的資料,再動態重新整理。
還有一些可能用Lua指令碼合併操作的優化,不過考慮到Lua指令碼比較慢,可能要仔細測試。
如果是利用Lua指令碼的話,可以在一個請求裡完成下面的操作:
查詢某頁的所有文章,返回已快取的文章的ID及內容,還有不在快取裡的文章的ID列表。
其它的一些東東:
Lua是支援LRU模式的,即像Memcached一樣工作。但是貌似沒有見到有人這樣用,很是奇怪。
可能是用redis早就準備好把redis做儲存了,也不擔心記憶體的容量問題。
相關文章
- 分頁按頁碼讀取redis資料Redis
- Redis快取資料庫-快速入門Redis快取資料庫
- Redis快取php資料Redis快取PHP
- 快取穿透、雪崩、熱點與Redis快取穿透Redis
- 關於redis快取資料庫的一些思考Redis快取資料庫
- REDIS 快取的穿透,雪崩和熱點keyRedis快取穿透
- 快速搭建Redis快取資料庫Redis快取資料庫
- 一種實現 MediaWiki 分頁面載入 JS 的思路JS
- [轉發][非原創]oschina上的一種雙快取思路快取
- Netflix 如何預熱快取?利用EBS移動PB級資料快取
- Redis快取穿透、擊穿、雪崩,資料庫與快取一致性Redis快取穿透資料庫
- .NET之頁面資料快取快取
- 禁止頁面快取資料的方法分享快取
- Python操作Redis快取資料庫PythonRedis快取資料庫
- PHP 資料採集的一種思路PHP
- 談談Redis快取中MySQL的資料如何與Redis同步Redis快取MySql
- JAVA快取-Redis入門級使用Java快取Redis
- laravel利用Redis來實現網站快取讀取LaravelRedis網站快取
- 阿里一面:關於【快取穿透、快取擊穿、快取雪崩、熱點資料失效】問題的解決方案阿里快取穿透
- Redis快取篇(一)Redis是如何工作的Redis快取
- Redis中快取二進位制資料Redis快取
- 常用3種資料庫的Sql分頁資料庫SQL
- 【乾貨】一個利用最新熱門電影空手套來賺錢的操作思路
- 聊聊如何利用redis實現多級快取同步Redis快取
- [Redis] 02-快取和資料庫資料一致性問題Redis快取資料庫
- 【轉】一個小工具類,利用shareObject把資料快取Object快取
- 爬取網頁後的抓取資料_3種抓取網頁資料方法網頁
- 快取穿透、快取擊穿、快取雪崩、快取預熱快取穿透
- 使用Redis和Java進行資料庫快取RedisJava資料庫快取
- 配置Redis作為快取(六種淘汰策略)Redis快取
- Redis-6-三種快取讀寫策略Redis快取
- Redis的快取穿透、快取雪崩、快取擊穿的區別Redis快取穿透
- Redis快取擊穿、快取穿透、快取雪崩Redis快取穿透
- [Redis]快取穿透/快取擊穿/快取雪崩Redis快取穿透
- Redis 入門與 ASP.NET Core 快取RedisASP.NET快取
- 快取工廠之Redis快取快取Redis
- 利用XMLHTTP 從其他頁面獲取資料 (轉)XMLHTTP
- Redis快取何以一枝獨秀?(2) —— 聊聊Redis的資料過期、資料淘汰以及資料持久化的實現機制Redis快取持久化