redis資料結構及操作

codecraft發表於2016-11-28

兩種物件

當在redis新建鍵值對的時候,新建兩個物件,一個是鍵物件,一個是值物件。

鍵物件

一般鍵物件都是string物件

值物件

值物件根據情況分為

  • string物件(int、embstr、raw編碼)、

  • list物件(ziplist、linkedlist編碼)、

  • zset物件(ziplist、skiplist編碼)

  • hash物件(ziplist、ht編碼)、

  • set物件(intset、ht編碼)

redisObject是一個更大的物件,組裝引用上述資料物件,同時還增加了type、encoding等資訊

物件編碼

每種型別的物件都至少使用了兩種不同的編碼,而不是固定一種編碼,這樣極大提高了redis的靈活性和效率。
比如list物件,在包含元素比較少的時候,redis底層使用ziplist編碼實現:
1)ziplist比linkedlist更節約記憶體,並且在元素少的時候,在記憶體中以連續塊方式儲存,可以更可被載入記憶體
2)隨著列表元素越來越多,使用ziplist的優勢逐漸消失,物件底層將會實現從ziplist從linkedlist的轉換

檢視值物件型別

用type 變數名,可以檢視值物件的型別
用object encoding 變數名,可以檢視值物件真正存的資料的資料結構編碼

比如int(long型別整數),
embstr(embstr編碼的簡單動態字串),
raw(簡單動態字串),
ht(字典),
linkedlist(雙端連結串列),
ziplist(壓縮列表),
intset(整數集合),
skiplist(跳躍表和字典)

1、String

set/get var
incr/decr var

2、List

insert:lpush list a b c d,linsert list after d e
delete:rpop list,lrem list 1 a
update:lset list 1 g
search:lrange list 0 -1,lindex list 1,llen list

主要操作:
lpush、linsert、rpop、lrem、lset、lrange、lindex

3、Set

insert:sadd users linda persia jack
delete:srem users linda
update:
search:smembers users,scard users,spop,sismember users casesar

sdiff sa sb
sinter sa sb
sunion sa sb

主要操作
sadd,srem,smembers,scard,spop
sdiff,sinter,sunion

4、SortSet

insert:zadd scores 70 linda 100 persia 90 jack
update:zadd scores 88 linda,zincrby scores -3 persia
delete:zrem scores linda,zremrangebyscore scores (60 80,zremrangebyrank scores 0 1
search:

   zrange scores 0 -1 withscores
   zrevrange scores 0 -1 withscores
   zrangebyscore scores (10 +inf

   zcount scores (90 100
   zcard scores
   zscore scores persia
   zrank scores persia
   zrevrank scores persia

5、map

insert:hset kv t1 linda,hsetnx kv t4 houhou,hmset kv t2 hah t3 xixi
update:hset kv t1 linda1,hincrby kv t5 1
delete:hdel kv t1
search:hget kv t1

   hmget kv t2 t3
   hkeys kv
   hvals kv
   hlen kv 
   hexists kv t6  

對鍵的操作:

del key1
expire key2 900
rename key3 key33
type key4
object encoding key5

相關文章