redis数据结构

正好写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
    原文作者:codecraft
    原文地址: https://segmentfault.com/a/1190000004363896
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞