redis数据结构及操作

两种对象

当在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

你可能感兴趣的:(redis)