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