redis学习三redis里的list、set、hash、sorted_set、skiplist

redis中value类型-list

查询list族的帮助信息:
在这里插入图片描述
lpush(从左开始放置)lpus 1 2 3 4 5 => 5 4 3 2 1
rpush(从右开始放置)rpush 1 2 3 4 5 => 1 2 3 4 5

lpop rpop
在这里插入图片描述
其中(lpop 和lpush命令对应)和(rpop和rpush命令对应)为同向命令相当于弹出栈
如果要表示为队列的话则用反向命令(lpush和rpop对应,rpush和lpop对应)
在这里插入图片描述
LRANGE命令(根据正负索引取所有)
在这里插入图片描述
LIndex命令取出对应位置的元素Lset设置某个位置为新的值(此方法代替了数组操作)
在这里插入图片描述
lrem移除一些元素(链表去重)
lrem key 2(正数代表从前往后数移除几个) a

在这里插入图片描述
lrem key -2(负数代表从后往前数移除几个) a
在这里插入图片描述

Linsert插入元素
linsert key after/before (某个元素后面【注意:如果这个元素出现了多次,则在第一个后面加】) 插入一个value
在这里插入图片描述
llen统计长度
在这里插入图片描述
blpop/brpop 命令,代表阻塞的单播队列(FIFO先进先出)
其中0代表一直阻塞,直到拿到数据位置
在这里插入图片描述
Ltrim命令:
在这里插入图片描述
删除两端的元素
在这里插入图片描述

redis中value类型-hash

在这里插入图片描述
用户有姓名,年龄,性别,如果用redis怎么存?
在这里插入图片描述
这样存储的成本是极低的,如果这个sean有100个字段,可以发一个keys xxx* 然后对拿到的所有key
用一个moreget取到所有的值
在这里插入图片描述
在这里插入图片描述
hash的基本操作:
在这里插入图片描述
也可以做加减:
在这里插入图片描述
应用场景:商品详情页(通过hash整合数据,商品详情页被浏览次数,微博的关注)

redis中的value类型-set

list可以重复出现(且有序【有序描述的是插入顺序】)
set是一种去重的集合,且不维护顺序(完全乱序的)
在这里插入图片描述
sadd命令往set集合里面加元素并去重(如下例子tom去重了)
在这里插入图片描述
srem删除set里面的元素
在这里插入图片描述
set求交集:sinter和sintersore
在这里插入图片描述
sinter直接返回交集结果,而sinterstore是需要把结果写入到我新定义的key里面去的

sunion命令求并集,sunionstore命令则是把并集的结果写入到一个新的key里面
在这里插入图片描述
sdiff命令取的结果是从第一个key里面取出对应的结果,而用第二个key作为参考
在这里插入图片描述
srandmember命令:
在这里插入图片描述

如果count是为正数的时候,取出一个去重的结果集(不能超过已有集合)
如果count是负数的时候,取出一个带重复的结果集,一定满足你要的数量
如果:0,不返回
(此方式可以解决抽奖:如果有10个奖品,但是我的用户分为两种情况,小于10个用户
大于10个用户, 用户中奖又分为重复与非重复奖品)
如果人少于礼物数的时候应该怎么去抽则count设置负数(一个人可以多次中奖)
(人数多余奖品)比如微博抽奖,redis里面放粉丝,如果count传正数,则一个人
只能中一次礼物,如果为负数的时候则可能出现重复的人抽到礼物

在这里插入图片描述
在这里插入图片描述
如公司年会抽奖(一个人抽到了就不能再抽奖了)使用spop命令
在这里插入图片描述

redis中sorted-set类型

数据被去重且排序(对元素排序的顺序)
在这里插入图片描述

对象拿属性去排序方式:
在这里插入图片描述
sorted_set:有两个维度,1是set不重复,2是sort,每个元素需要给出一个分值(如果分值都一样则按照名称字典序排序)
顺序:每个元素有它的正负向索引(如上图负数代表负向索引,正数代表正向索引)

zadd命令添加元素
在这里插入图片描述
也可以通过zarange withsocres查看分值
在这里插入图片描述
zrangebyscore命令:
根据分值给定最小值和最大值去取出元素:
在这里插入图片描述
根据价格由低到高取出前两名水果:
在这里插入图片描述

如果按照由高到低取出前两名水果:
在这里插入图片描述
但是不能这样来写
在这里插入图片描述
apple应该排在第一个才对,由此可以得出物理内存左小右大,且顺序不随命令而变化

zcore和zrank命令(第一个命令是取出分值,第二个命令是取出排名)
在这里插入图片描述
zincrby指定某个元素增加值:
在这里插入图片描述
应用场景:如要知道歌曲电影等的排行榜(按热度排名(下载,点击,播放量))
排行榜前十名,按照分值倒叙排序(每次点击都调用zincrby调整排名)

sorted_set的集合操作

并集、交集
在这里插入图片描述

依次给出这个操作有几个key去参与,权重是和key按顺序来的,以及相应的聚合参数,以便处理分值
先来不聚合以及不设置权重的:
在这里插入图片描述
下面设置权重,k2的权重设置为0.5则k2对应的score都除以2,最后再相加
在这里插入图片描述
合并的时候取最大值 aggregate max
在这里插入图片描述
求交集则是zinterstore

排序是怎么实现的?以及增删查改的速度快吗?

sorted_set底层使用的是skip_list(跳跃表)
在这里插入图片描述
当有一个x=11想往这个跳跃表里面插入元素的时候,在我们的key当中会维护第一个头的元素
指针,然后根据这个指针可以找到各层的指针的元素,首先去和最上层的第一个元素去比较
,如果小于头则直接插入到最下层的头节点的前一个元素上面,如果大于最上层的第一个元素,
就跟最上层的下一个元素去比较(由于后一个元素是null),则下降到第二层去比较发现小于22
,然后此时下降到第三层在7和22之间插入一个11(每个元素被插入的时候会随机造层
【往上造】,假设造三层,则会在第二层以及第一层也造上元素11)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值