Redis 脑图
2021-08-19 15:02:26 134 举报
AI智能生成
Redis 脑图
作者其他创作
大纲/内容
相关命令
key的相关命令
keys *
获取当前库的所有key
del k
删除key
exists k
判断是否存在key
db的相关命令
select index
切换库
dbsize
查看当前库key的数量
flushdb
清空当前库
flushall
清空所有库0-15(不安全)
Redis的数据类型
String
可做简单的k-v缓存,实现计数器、分布式锁、session共享、分布式ID生成(自增)
redis底层是C,为什么
不用c字符串而用sds
不用c字符串而用sds
获取长度
C字符串并不记录自身长度,想获取长度只能遍历
sds直接获取len即可
内存分配
c字符串每次长度变化都会对数组进行内存重新分配,比较耗时
对sds内容进行修改或者需要扩展时,sds有空间预分配和惰性空间释放
缓冲区安全
C字符串不记录自身长度,不会自动进行边界检查,所以会增加溢出的风险
sds先检查空间是否满足修改所需的要求,如果不满足就先扩容再进行修改
二进制安全
C字符串是以空字符串(\0)结尾,所以字符串中不能包含空字符串,只能保存文本数据
既能保存文本数据,也能保存二进制数据(通过长度判断结束,不受影响)
相关命令
set k v
存放一个k-v对
get k
获得k对应v
mset k1 v1 k2 v2 ...
存放多个k-v
mget k1 k2 k3 ...
获得多个v
setnx k v
当库中有该K时不存。当库中没有改K时存放
非常重要(做分布式锁)
非常重要(做分布式锁)
getset k v
获取值之后 修改该K的V
insc k1
该k1对应的v的值++(v必须是Integer类型)
desc k1
该k1对应的v的值--(v必须是Integer类型)
inscby k1 步长
设置每次走的步长
descby k1 步长
设置每次走的步长
list
list是一个双向链表
应用
实现高性能的分页
实现栈或队列:例如到货通知、邮件发送、秒杀、保存待抢购的商品列表
底层实现
压缩列表(ziplist)
当列表对象痛死满足两个条件时,
列表对象使用ziplist进行存储
列表对象使用ziplist进行存储
列表对象保存的元素数量小于512个
列表对象保存的所有字符串元素长度都小于64个字节
他将所有的元素紧挨着存储,分配的是一块连续的内存
快速列表(quicklist)
由于普通链表指针比较浪费空间且会加重内存碎片化,所以优化为quicklist
特点
将多个ziplist使用双向指针串起来(链表+ziplist)
既满足了快速的插入删除性能,又不会出现太大的空间冗余
相关命令
lpush k v
从左边放
rpush k v
从右边放
lpop k
从左边取第一个
rpop k
从右边取第一个
blpop k timeout
从左边取,没取到的话阻塞timeout时间
brpop k timeout
从右边取,没取到的话阻塞timeout时间
lrange k 0 -1
查看队列
-1代表倒数第一个
-2 代表倒数第二个
实现分页
page size
(page-1)* size
page*size-1
llen k
查看该队列的长度
lrem k count value
count = 0 ,移除队列里面所有与value 值相同的value
count > 0 , 从表头开始搜索,删除数据value的值,删除的个数为count个
count< 0 ,从表尾开始搜索,删除数据为value的值,删除的个数为 count的绝对值个
hash
map 适合存储对象?
因为对象的属性和值,我们可以认为是一个map集合里面的数据!
相比于json串,可单独修改对象的字段
可以快速定位,存储的信息需要被频繁的修改可用hash存储,比如实现购物车
相关命令
hset k field value
存
hget k filed
取
hmset k field value field value
存多个
hmget k field filed
取多个
hgetall k
取得所有的k-v
hkeys k
只取key
hvals k
只取value
set
无序唯一
命令
sadd k v
在k的set 集合里面添加一个v,该v 不能重复
spop k
随机弹出一个
smembers k
K的set集合的所有数据
scard k
K的set集合的长度
sdiff k1 k2 (k1-k2)
减集
sinter k1 k2
交集
sunion k1 k2
并集
zset
写数据带分数,实现排行榜
相关命令
zadd k 分数 成员
添加 可批量添加
zrange k start end
排行 (从低到高)
zreveage k start end
排行 (从高到低)
zrangebyscore k 分数的最小值 分数的最大值
指定分数区间排行(从低到高)
0 条评论
下一页