redis的字串是動態字串,內部結構類似arraylist,採用預分配冗餘空間來減少記憶體的頻繁分配。
其內部的array的實際分配空間capacity一般要高於實際字串的長度len
其常用命令如下:
1.set name value
2.get name
3.mset name1 value1 name2 value2 ...
4.get name1 name2
5.expire name 5 -> 設定name的過期時間為5s
6.setex name 5 value -> 等同於 set name 123 + expire name 5
7.setnx name value -> 如果name這個key不存在則建立,否則不建立
redis的列表類似linkedlist,注意是雙向鍊錶。所以它的插入是o(1)的
當列表彈出最後乙個元素後,該key就會被**刪除
命令:
rpush/lpush key value1 value2 value3
rpop/lpop key
llen key -> 獲取列表的長度
以下操作由於鍊錶的特點,是耗時操作
lindex key value -> 獲取列表中value的index
ltrim key startindex endindex -> 刪除兩個index之外的value
lrange key startindex endindex -> 獲取兩個index之間的值
實際上,redis的列表採用的是一種快速鍊錶的結構
[1,
2,3]
->[4
,5,6
] 乙個pre和next指標1-
>2-
>3-
>4-
>5-
>
6 多個pre和next指標
類似hashmap,裡面的key是無序的
redis的hash才用了漸進式rehash的操作:
1.在插入新元素時發現需要rehash
2.這個時候建立乙個新的hash,但是並不將之前的hash全部rehash到新的hash中
3.在後續的定時任務以及hash操作指令中,循序漸進的將舊hash內容移動到新的hash中
4.當舊的hash最後乙個元素被刪除後,該結構就會被**
命令:
hset key hashkey hashvalue
hget key hashkey
hgetall key -> 會以hashkey1 、hashvalue1、hashkey2、hashvalue2這樣的方式顯示出來
hmset hmget ..
... hincrby key value incrnum
類似hashset,內部key-value是無序的,每個key的value都是null
如果重複新增元素,後面的元素新增不進去
命令:
sadd key setkey
smembers key -> 查詢set中所有的元素
sortedset + hashmap的結構,成為跳躍列表
命令:
zadd key score zsetkey
zrange books startindex endindex
zcard key -> 查詢key中一共有多少個資料
zscore key zsetkey -> 查詢score
zrank key zsetkey -> 查詢某個元素的排名 1,2,3,...
1. create if not exists: 如果某個key不存在,就建立,再將元素設定進去
2. drop if no elements: 如果某個key內的元素都被刪除,那麼這個key就會被刪除
3. 過期時間
expire key 600 -> 10分鐘過期
ttl key -> 查詢key還有多久過期(如果已經過期會返回-1)
Redis 基礎資料結構
基礎資料型別 5種 string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 set key name value 命令用於設定給定key的值,如果key已經儲存其它值,則會覆蓋舊值,且與型別無關 get key name 命令用於獲取指定key的值,如果key不存在,則...
Redis 基礎資料結構
redis有5種基礎資料結構,分別是 string list hash set zset。1 string 字串 字串string是redis最簡單的資料結構,內部表示的就是乙個字元陣列。儲存值 set key value 獲取值 get key redis可以對多個字串進行批量讀寫。批量儲存 ms...
Redis 基礎資料結構(一)
前言 redis 有5種基礎資料結構,分別是string 字串 list 列表 hash 字典 set 集合 zset 有序集合 而redis所有的資料結構都有乙個唯一的key字串作為名稱。然後通過這個唯一的key來獲取相應的value,不同資料結構的差異在於value對應底層的資料結構不同。對re...