這篇文章帶大家深入了解Redis中的資料結構,看看這些資料結構的應用場景,希望對大家有幫助!
Redis是一個Key-Value的儲存系統,使用ANSI C語言編寫。 key的類型是字串。 【相關推薦:Redis影片教學】
value的資料型別8種資料型別:
常見資料型別
string字串類型
list清單類型
#set集合類型
sortedset(zset)有序集合類型
hash類型
不常見資料類型
bitmap位圖類型
geo地理位置類型
stream類型
注意
Redis中指令是忽略大小寫,(set SET),key是不忽略大小寫的(NAME name)
Redis的String能表達3種值的型別:字串、整數、浮點數100.01 是個六位的字串
指令名稱 | 指令格式 | 指令描述 |
---|---|---|
#set | set key value | 賦值 |
get key | 取值 | |
getset key value | 取值並賦值 |
| mset
設定多個 | key | 的值為各自對應的value。|
MGET KEY1 KEY2 .. KEYN | 傳回所有(一個或多個)給定key 的值 | |
EXPIRE key seconds | 設定一個鍵的過期時間(秒) | |
append key value | 向尾部追加值 | |
strlen key | 取得字串長度 | |
setnx key value | 當value不存在時採用賦值 | set key value NX PX 3000 原子操作,px 設定毫秒數|
incr key | #遞增數字 | |
incrby key increment | 增加指定的整數 | |
decr key | 遞減數字 |
1、物件快取
2、單值快取
#3、incr用於樂觀鎖incr:遞增數字,可用於實作樂觀鎖watch(交易)
4、setnx用於分散式鎖當value不存在時採用賦值,可用來實作分散式鎖定
5、計數器
6、Web叢集session共用
dockerRedis:0>keys * dockerRedis:0>append testName 2 "1" dockerRedis:0>exists testName "1" dockerRedis:0>append testName " 1234" "6" dockerRedis:0>get testName "2 1234" dockerRedis:0>set testName1 "testName1" "OK" dockerRedis:0>get testName1 "testName1" dockerRedis:0>getset testName2 "testName2" null dockerRedis:0>get testName2 "testName2" dockerRedis:0>strlen testName "6" dockerRedis:0>set incrTest "10" "OK" dockerRedis:0>incr incrTest "11" dockerRedis:0>get incrTest "11" dockerRedis:0>decr incrTest "10" dockerRedis:0>decrby incrTest 5 "5" dockerRedis:0>mset set01 1 set02 2 set03 3 "OK" dockerRedis:0>mget set01 set02 set03 1) "1" 2) "2" 3) "3"
list清單類型可以儲存有序、可重複的元素取得頭部或尾部附近的記錄是極快的list的元素數量最多為2^32-1個(40億)
指令名稱 | 指令格式 | 指令描述 |
---|---|---|
#lpush | lpush key v1 v2 v3 . .. | 從左側插入清單 |
lpop | #lpop key | 從清單左側取出 |
#rpush | rpush key v1 v2 v3 ... | #從右側插入清單 |
rpop key | 從清單右側取出 | |
lpushx key 值 | 將值插入到清單頭部 | |
blpop key timeout | #從清單左側取出,當清單為空時阻塞,可以設定最大阻塞時間,單位為秒 | |
llen key | 在清單中取得元素個數 | |
lrange key start end | 傳回清單中指定區間的元素,區間透過start和end指定 | |
lset key index value | 將清單index位置的元素設定成value的值 | |
rpoplpush key1 key2 | 從key1清單右側彈出並插入到key2列表左側 | |
rpushx key | 將值插入到列表尾部value | |
blpop key | 從清單右側取出,當清單為空時阻塞,可以設定最大阻塞時timeout 間,單位為秒 | |
lindex key value | 取得清單中下標為index的元素index從0開始index | |
ltrim key start end | 對清單進行修剪,只保留start到end區間end | |
brpoplpush | 從key1清單右側彈出並插入到key2清單左側,會阻塞key1 key2 | |
linsert key BEFORE/AFTER pivot value | 將value插入列表,且位於值pivot之前或之後 |
##3、Blocking MQ(阻塞佇列)= LPUSH BRPOP
4、使用者清單、商品清單、評論清單
set集合類型
指令描述 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#往集合key存入元素,元素存在則忽略,若key不存在則新建 | #srem | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#從集合key中刪除元素 | smembers | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
獲得集合中所有元素 | spop | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
從集合key中選出count個元素,元素從key中刪除 | srandmember | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
從集合key中選出count個元素,元素不會從key中刪除 | scard | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
取得集合key的元素個數 | sismember | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
判斷member元素是否存在於集合key中 | sinter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
求多集合的交集 | sdiff | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
求多集合的差集 | #sunion | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#求多集合的並集 | #應用場景
zset有序集合類型SortedSet(ZSet) 有序集合: 元素本身是無序不重複的 每個元素關聯一個分數(score) 可依分數排序,分數可重複 常用指令
點擊排行榜、銷售排行榜、追蹤排行榜
#Redis hash是一個string類型的field和value的對應表,它提供了欄位和欄位值的對應。每個 hash 可以儲存 2^32-1鍵值對(40多億)。
hlen key 取得欄位數量
#購物車操作 bitmap位圖類型
應用場景
geo地理位置類型geo是Redis用來處理位置資訊的。在Redis3.2中正式使用。主要是利用了Z階曲線、Base32編碼和geohash演算法 常用指令
geohashgeohash key 成員名稱1 成員名稱2... 傳回標準的geohash字串 應用場景 1、記錄地理位置
訊息遍歷 訊息的阻塞和非阻塞讀取訊息的分組消費未完成訊息的處理 每個Stream都有唯一的名稱,它就是Redis的key,首次使用xadd 指令追加訊息時自動建立##########應用程式場景#########訊息佇列的使用######更多程式設計相關知識,請造訪:###程式設計入門###! ! ### |
以上是深入解析Redis中的資料結構,聊聊應用場景的詳細內容。更多資訊請關注PHP中文網其他相關文章!