兩種物件
當在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