目錄
Redis基礎資料結構
字串string
列表list
字典hash
集合set
有序集合zSet
首頁 資料庫 Redis Redis 學習之 基本資料結構

Redis 學習之 基本資料結構

Dec 04, 2020 pm 03:44 PM

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在Redis中實施身份驗證和授權? 如何在Redis中實施身份驗證和授權? Mar 17, 2025 pm 06:57 PM

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

如何在Redis群集中選擇一個碎片鍵? 如何在Redis群集中選擇一個碎片鍵? Mar 17, 2025 pm 06:55 PM

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

如何將Redis用於工作隊列和背景處理? 如何將Redis用於工作隊列和背景處理? Mar 17, 2025 pm 06:51 PM

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

如何在REDIS中實施緩存無效策略? 如何在REDIS中實施緩存無效策略? Mar 17, 2025 pm 06:46 PM

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

如何監視REDIS群集的性能? 如何監視REDIS群集的性能? Mar 17, 2025 pm 06:56 PM

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

如何將Redis用於酒吧/子消息傳遞? 如何將Redis用於酒吧/子消息傳遞? Mar 17, 2025 pm 06:48 PM

本文介紹瞭如何將Redis用於酒吧/子消息傳遞,涵蓋設置,最佳實踐,確保消息可靠性和監視性能。

如何在Web應用程序中使用REDI進行會話管理? 如何在Web應用程序中使用REDI進行會話管理? Mar 17, 2025 pm 06:47 PM

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

如何確保重新侵害常見漏洞? 如何確保重新侵害常見漏洞? Mar 17, 2025 pm 06:57 PM

文章討論了確保重新侵害漏洞,重點關注強密碼,網絡綁定,命令禁用,身份驗證,加密,更新和監視。

See all articles