Redis 學習之 基本資料結構
Redis使用教學欄位介紹其基礎資料結構
#推薦(免費):redis使用教學
Redis基礎資料結構
Redis有5種基本資料結構:String(字串)、list(列表)、set(集合)、hash(哈希)、zset(有序集合)
字串string
字串型別是Redis的value最簡單的資料結構,類似與Java語言中的ArrayList(數字列表),不過在Redis裡String是一種動態字串
Redis裡的String採用預先分配冗餘空間的方法
[圖片上傳失敗...(image-724c60-1537973556456)]
set & get
>set keyname test OK >get keyname test //key如果存在就返回0 >setnx keyname test 0 >exists keyname >del keyname 1 //批量设置 >mset key1 test1 key2 test2 OK //批量获取 >mget key1 key2 1) test1 2) test2
key過期
//设置5s后过期 >expire keyname 5 //setex是expire和set的复合写法 >setex keyname 5 test OK //5s后查询 >get keyname NULL
計數
ps:value為數字的情況,可以使用incr和incrby計數
>set num 10 OK //incr默认加1 >incr num 11 //incrby后面要加上数字 >incrby num ERR wrong number of arguments for 'incrby' command //正确计数 >incrby num 5 16
列表list
下面介紹一下redis的另一個資料結構list
前面我們說redis裡的string類似與java語言裡面的ArrayList,則redis裡的列表就類似與LinkList(鍊錶),鍊錶一個特別就是更新和新增特別快,查詢索引慢。
為什麼說類似與linklist?因為redis的list並非和linklist一樣,它其實是一種快速列表(quicklist)的形式,列表結構如圖:
#[圖片上傳失敗. ..(image-625c1b-1537973556457)]
這裡要介紹一下壓縮列表(ziplist)了,壓縮列表是什麼?其實就是連續的記憶體空間
從圖可以看出快速列表其實就是由壓縮列表和雙向的指標組成,不過我們知道鍊錶是兩個指標的,也就是prev和next執行,這就是快速清單和linklist的一個不同點了。
PS:然後redis設計時,為什麼改成雙向指標?假如和鍊錶一樣,用兩個指標prev、next,同樣可以實現遍歷,不過雙向指標有一個很明顯的優點,就是佔用的記憶體空間就相對少了。
佇列與堆疊
/* 队列:First in first out */ //加两个value >rpush keynames key1 key2 2 //计算 >llen keynames 2 >lpop keynames key1 >lpop keynames key2 //rpush会自动过期的 >rpop keynames NULL /* 栈:First in last out */ //同样,加两个元素 >rpush keynames key1 key2 2 >rpop keynames key2 >rpop keynames key1
字典hash
Redis的字典類似與java語言的hashmap,也是無序的二維結構,也即陣列加列表的結構。這是redis字典和hashmap類似的地。
然後也有不同,例如rehash,刷新字典操作,hashmap是全部熱hash,當字典足夠多時,性能不是很好的,所以redis進行改造,採用漸進式的方式,為什麼說是漸進式?因為redis不會全部reload,而是保存新舊兩個字典,然後採用定時任務,將舊hash的資料搬到新的hash,搬後在回收hash記憶體空間
字典(hash)的數組加上連結結構:
[圖片上傳失敗...(image-f5660f-1537973556457)]
>hset keynames key1 "test1" 1 >hset keynames key2 "test2" 1 //批量set >hmset keynames key1 "test1" key2 "test2" OK //获取key1的值 >hget keynames key1 test1 //获取hash为keynames的长度 >hlen keynames 2 //获取全部 >hgetall keynames 1) key1 2) test1 3) key2 4) test2
集合set
redis的set和java語言中的hashset類型,是一種無序唯一的。
>sadd keynames key1 1 //key1已经加过了,所以返回1 >sadd keynames key1 key2 1 >smembers keynames 1) key2 2) key1 //查询某个key是否存在,相当与contains >sismember keynames key1 1 //相当于count >scard keynames 2 //随意弹出key1 >spop keynames key1
有序集合zSet
有序集合是redis裡比較有特色的,它類似SortedSet和HashMap的組合。其內部實作是一種被稱為作跳躍列表的資料結構。有序集合一方面它就是一個set,所以每個元素都是唯一的,然後它可以給每個value賦值一個score,再根據這個score進行排序,score就等於一個權限排序的識別。
ps:因為這個原因,有序集合可以用來儲存粉絲訊息,value值是粉絲id,score是關注時間
//9.0是score也就是权重 >zadd keyname 9.0 math 1 >zadd keyname 9.2 history 1 //顺序 >zrange keyname 0 -1 1) history 2) math //逆序 >zrevrange keyname 0 -1 1) math 2) history //相当于count() >zcard keyname 2 获取指定key的score >zscore keyname math 9
跳躍列表 TODO
以上是Redis 學習之 基本資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本文討論了在REDIS中實施身份驗證和授權,重點是實現身份驗證,使用ACL以及確保REDIS的最佳實踐。它還涵蓋了管理用戶權限和工具以增強重新安全性。

本文討論了在Redis群集中選擇碎片鍵,並強調了它們對性能,可伸縮性和數據分佈的影響。關鍵問題包括確保均勻數據分配,與訪問模式保持一致以及避免常見錯誤l

本文討論了使用REDIS進行工作隊列和背景處理,詳細的設置,作業定義和執行。它涵蓋了原子運營和工作優先級等最佳實踐,並解釋了REDIS如何提高處理效率。

本文討論了在REDIS中實施和管理緩存無效的策略,包括基於時間的到期,事件驅動的方法和版本控制。它還涵蓋了緩存到期的最佳實踐和監視和自動的工具

文章討論了使用Redis CLI,Redis Insight和Datadog和Prometheus等工具等工具進行監視REDIS群集的性能和健康。

本文討論了在Web應用程序中使用REDIS進行會話管理,詳細介紹設置,諸如可伸縮性和性能以及安全措施之類的好處。
