搜尋
首頁資料庫Redisredis怎麼做分頁

redis怎麼做分頁

Nov 21, 2019 am 09:20 AM
redis

redis怎麼做分頁

每個主題下的使用者的評論組裝好寫入Redis中,每個主題會有一個topicId,每個評論會和topicId關聯起來,大致的數據模型如下:           (建議學習:Redis影片教學

{ topicId: 'xxxxxxxx', comments: [ { username: 'niuniu', createDate: 1447747334791, content: '在Redis中分页', commentId: 'xxxxxxx', reply: [ { content: 'yyyyyy' username: 'niuniu' }, ... ] }, ... ]}

將評論資料從MySQL查詢出來組裝好存到Redis後,以後每次都能從Redis取得組裝好的評論數據,從上面的數據模型可以看出數據都是key-value型數據,無疑要採用hash進行存儲,但是每次拿取評論數據時需要分頁而且還要按createDate字段進行排序,hash肯定是不能做到分頁和排序的。

那麼,就挨個看一下Redis所支援的資料類型:

1、String: 主要用於儲存字串,顯然不支援分頁和排序。

2、Hash: 主要用於儲存key-value型數據,評論模型中全是key-value型數據,所以在這裡Hash無疑會用到。

3、List: 主要用於存儲一個列表,列表中的每一個元素按元素的插入時的順序進行保存,如果我們將評論模型按createDate排好序後再插入List中,似乎就能做到排序了,再利用List中的LRANGE key start stop指令還能做到分頁。

嗯,到這裡List似乎滿足了我們分頁和排序的要求,但是評論還會被刪除,就需要更新Redis中的數據,如果每次刪除評論後都將Redis中的資料全部重新寫入一次,顯然不夠優雅,效率也會大打折扣,如果能刪除指定的資料無疑會更好,而List中涉及到刪除資料的就只有LPOP和RPOP這兩條指令,但LPOP和RPOP只能刪除列表頭和列表尾的數據,不能刪除指定位置的數據,(備註:其實還有LREM命令可以做到刪除,但是非常不方便),而且當存在接口高並發訪問時,這個list可能會無限延長,裡面的數據會存在許多重複,這就會影響到正常的業務,所以List也不太適合。

4、Set: 主要儲存無序集合,無序!排除。

5、SortedSet: 主要儲存有序集合,SortedSet的新增元素指令ZADD key score member [[score,member]…]會為每個新增的元素member綁定一個用於排序的值score ,SortedSet就會根據score值的大小對元素進行排序,在這裡就可以將createDate當作score用來排序。

SortedSet中的指令ZREVRANGE key start stop再可以回傳指定區間內的成員,可以用來做分頁,SortedSet的指令ZREM key member可以依照key移除指定的成員,可以用來做分頁,SortedSet的指令ZREM key member可以依照key移除指定的成員,可以滿足評論的要求,所以,SortedSet在這裡是最適合的(時間複雜度O(log(N)))。

所以,需要用到的資料型別有SortSet和Hash,SortSet用來做分頁排序,Hash用來儲存特定的鍵值對資料。 SortSet結構中將每個主題的topicId作為set的key,將與該主題相關的評論的createDate和commentId分別作為set的score和member,commentId的順序就根據createDate的大小進行排列。

當需要查詢某一主題某一頁的註解時,就可主題的topicId透過指令zrevrange topicId (page-1)×10 (page-1)×10 perPage這樣就能找出某個主題下某一頁的所有按時間排列順序的評論的commintId。 page為查詢第幾頁的頁碼,perPage為每頁顯示的條數。

當找到所有註解的commentId後,就可以把這些commentId當作key去Hash結構中去查詢該條評論對應的內容。

這樣就利用SortSet和Hash兩種結構在Redis中達到了分頁和排序的目的。

當然,也可以直接只使用SrotedSet類型,而不使用Hash類型,直接將評論存放在member中。

但為什麼要將註解和排序放到不同的類型裡?其中的好處是,可以對評論設定不同的排序類型,例如按時間的正反序,按讚的正反序,查看次數的正反序等。而這樣只需要維護不同的SrotedSet排序,不需要維護多套評論的內容了。

以上是redis怎麼做分頁的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
REDIS與數據庫:性能比較REDIS與數據庫:性能比較May 14, 2025 am 12:11 AM

Redisoutperformstraditionaldatabasesinspeedforread/writeOperationsDuetoitsin-memorynature,niletraditionalditionalditionalditationaldatabasesexcelcelincomplexqueriessanddaintegrity.1)redisisisisideSidealForrealForreal-timeanalyticsanticanticanticanticanticantic.2)

我什麼時候應該使用redis代替傳統數據庫?我什麼時候應該使用redis代替傳統數據庫?May 13, 2025 pm 04:01 PM

用戶edisinsteadofatraditionaldatabasewhenyourapplicationrequirespeedandreal-timedataprocorsing,sueAsAsforCaching,sessionmanagement,orrereal-timeanalytics.redisexcelsin:1)caching,緩存,減少載荷載量

REDIS:超越SQL- NOSQL的觀點REDIS:超越SQL- NOSQL的觀點May 08, 2025 am 12:25 AM

Redis超越SQL數據庫的原因在於其高性能和靈活性。 1)Redis通過內存存儲實現極快的讀寫速度。 2)它支持多種數據結構,如列表和集合,適用於復雜數據處理。 3)單線程模型簡化開發,但高並發時可能成瓶頸。

REDIS:與傳統數據庫服務器的比較REDIS:與傳統數據庫服務器的比較May 07, 2025 am 12:09 AM

Redis在高並發和低延遲場景下優於傳統數據庫,但不適合複雜查詢和事務處理。 1.Redis使用內存存儲,讀寫速度快,適合高並發和低延遲需求。 2.傳統數據庫基於磁盤,支持複雜查詢和事務處理,數據一致性和持久性強。 3.Redis適用於作為傳統數據庫的補充或替代,但需根據具體業務需求選擇。

REDIS:功能強大的內存數據存儲的簡介REDIS:功能強大的內存數據存儲的簡介May 06, 2025 am 12:08 AM

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis主要是數據庫嗎?Redis主要是數據庫嗎?May 05, 2025 am 12:07 AM

Redis主要是一個數據庫,但它不僅僅是數據庫。 1.作為數據庫,Redis支持持久化,適合高性能需求。 2.作為緩存,Redis提升應用響應速度。 3.作為消息代理,Redis支持發布-訂閱模式,適用於實時通信。

REDIS:數據庫,服務器還是其他?REDIS:數據庫,服務器還是其他?May 04, 2025 am 12:08 AM

redisisamultifaceTedToolThatServesAsAdatabase,server和more.itfunctionsasanin-memorydatastrustore,supportsvariousDataStructures,and CanbeusedAsacache,MessageBroker,sessionStorage,sessionStorage,sessionstorage,andford forderibedibedlocking。

REDIS:揭示其目的和關鍵應用程序REDIS:揭示其目的和關鍵應用程序May 03, 2025 am 12:11 AM

Redisisanopen-Source,內存內部的庫雷斯塔氏菌,卡赫和梅斯吉級,excellingInsPeedAndVersatory.itiswidelysusedforcaching,Real-Timeanalytics,Session Management,Session Managements,and sessighterboarderboarderboardobboardotoitsssupportfortfortfortfortfortfortfortfortorvortfortfortfortfortfortforvortfortforvortforvortforvortfortforvortforvortforvortforvortdatastherctuct anddatataCcessandcessanddataaCces

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。