序
正好写SpringBoot应用之分布式会话这篇文章,用到了redis。于是就补充一些redis的基本常识。
redis对象
当在redis新建键值对的时候,新建两个对象,一个是键对象,一个是值对象。
键对象
一般键对象都是string对象
值对象
值对象根据情况分为
string对象(
int、embstr、raw编码
)list对象(
ziplist、linkedlist编码
)zset对象(
ziplist、skiplist编码
)hash对象(
ziplist、ht编码
)set对象(
intset、ht编码
)
redisObject
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