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