共計 2138 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 redis 中數據結構有哪幾種,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
redis 數據庫中有五種數據結構,它們分別是:string- 字符串、Hash- 字典、List- 列表、Set- 集合、Sorted Set- 有序集合。
這五種數據結構分別有著不同的使用場景,下面我們就來介紹下它們的使用場景。
1、String
String 數據結構是簡單的 Key-Value 類型,value 不僅可以是 String,也可以是數字(當數字類型用 Long 可以表示的時候 encoding 就是整型,其他都存儲在 sdshdr 當作字符串)。使用 String 類型,可以完全實現目前 Memcached 的功能,并且效率更高。還可以享受 redis 的定時持久化(可以選擇 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供與 Memcached 一樣的 get、set、incr、decr 等操作外,redis 還提供了下面的一些操作:
1.LEN niushuai:O(1) 獲取字符串長度
2.APPEND niushuai redis:往字符串 append 內容,而且采用智能分配內存(每次 2 倍)3. 設置和獲取字符串的某一段內容
4. 設置及獲取字符串的某一位(bit)5. 批量設置一系列字符串的內容
6. 原子計數器
7.GETSET 命令的妙用,請于清空舊值的同時設置一個新值,配合原子計數器使用
2、Hash
在 Memcached 中,我們經常將一些結構化的信息打包成 HashMap,在客戶端序列化后存儲為一個字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別等。這時候在需要修改其中一項時,通常需要將字符串(JSON)取出來,然后進行反序列化,修改某一項的值,在序列化成字符串(JSON)存儲回去。簡單修改一個屬性就干這么多事,消耗必定是很大的,也不適用一些可能并發操作的場合(比如兩個并發的操作都需要修改年齡)。而 redis 的 Hash 結構可以使你像在數據庫中 Update 一個屬性一樣只修改某一項屬性值。(存儲、讀取、修改用戶屬性)
3、List
List 說白了就是鏈表(redis 使用雙端鏈表實現的 List),相信學過數據結構知識的人都應該理解其結構。使用 List 結構,我們可以輕松的實現最新消息排行等功能(比如新浪博客的 TimeLine)。List 的另一個應用就是消息隊列,可以利用 List 的 Push 操作,將任務存在 List 中,然后工作線程再用 PoP 操作將任務取出進行執行。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢,刪除 List 中某一段的元素。
(學習視頻分享:redis 數據庫教程)
4、Set
Set 就是一個集合,集合的概念就是一堆不重復值的組合。利用 Redis 提供的 Set 數據結構,可以存儲一些集合性的數據。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有的粉絲存在一個集合。因為 Redis 非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存到一個新的集合中。
1. 共同好友、二度好友
2. 利用唯一性,可以統計訪問網站的所有獨立 IP
3. 好友推薦的時候,根據 tag 求交集,大于某個 threshold 就可以推薦
5、Sorted Set
和 Set 相比,Sorted Set 是將 set 中的元素增加了一個權重參數 score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學成績的 Sorted Set,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。另外還可以用 Sorted Set 來做帶權重的隊列,比如普通消息的 score 為 1,重要消息為 2,然后工作線程可以選擇 sore 的倒序來獲取工作任務。讓重要的任務優先執行。
二、redis 其他功能使用場景
1、訂閱 - 發布系統
Pub/Sub 從字面上理解就是發布(Publish)與訂閱(Subscribe),在 redis 中,你可以設定對某一個 key 值進行消息發布及消息訂閱,當一個 key 值上進行了消息發布后,所有訂閱他的客戶端都會收到相應的消息。這一功能最明顯的用法就是用作實時消息系統。
2、事務
誰說 NoSql 都不支持事務,雖然 redis 的事務提供的并不是嚴格的 ACID 的事務(比如一串用 EXEC 提交執行的命令,在執行中服務器宕機,那么會有一部分命令執行了,剩下的沒執行),但是這個事務還是提供了基本的命令打包執行的功能(在服務器不出問題的情況下,可以保證一連串的命令是順序在一起執行的,中間會有其他客戶端命令插進來執行)。redis 還提供了一個 watch 功能,你可以對一個 key 進行 watch,然后再執行事務,在這個過程中,如果這個 watch 的值進行了修改,那么這個事務會發現并拒絕執行。
看完了這篇文章,相信你對“redis 中數據結構有哪幾種”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!
向 AI 問一下細節