redis的list、set、hash、sorted_set、skiplist
redis的list、set、hash、sorted_set、skiplist
list---
Lpush和Rpush
因为是lpush a先从左边进 然后是bcde 所以k1的排列是edcba
因为是rpush a先从右边进 然后是bcde 所以k1的排列是abcde
lopo
通过lpop 弹出 a先从左进去的 所以先弹出来 f
lpop k2 的时候 就是 abcdef 因为f先进去的 a最后进去的 a先出来
同理 使用rpop和lpop效果相反
lrange
使用lrange可以把所以读出:
注意:此处lrange的l不是左的意思了 是list的缩写
lset
这里可以扩展一个lset命令 用来覆盖
lrem
list链表是没有去重功能的 所以出现了这个去重命令
lrem key名 num1 value ,num是去重的数量 就是去除几个 value是重复值
linsert
linsert有after和before两个参数
hash---
应用场景:对field的值进行计算 点赞、收藏、详情页
单例像key插入数据:
多个字段:
hgetall
hgetall是把所有这个建筑队全获取出 tail 和value全读出
hkey 和hvals
hkey是把所有的tail字段获取出
hvals是把所有的值获取出
hincrby
加就在后面值写正值
减就是负值
set---
场景:无序 、去重
增删改查:
set的交集:
解释:
- 前两句sadd了两个key 分别是k2 k3 并且分别给了值
- 然后smembers 查看key
- sinter是取出k2 和k3 相交的部分并且返回
- sintrstore是把k2 k3相交的部分放到目标key dest里面
- 最后查看dest可以看出
sdiff
sdiff是取出两个key的差集
sdiff key1 key2 这里要注意的是key1和key2的前后顺序 如果是要拿出key的值并且以key2的值作为差集参考是把key1放前
srandmember
srandmember随机事件
主要应用场景 :抽奖
解释:
- 往k1里添加了几个用户 gzh zhangsan lisi wangwu tom Jack xiaoming
现有四个奖品 六个人抽奖 srandmember key名 num 如果num是正数 则不会有重复用户 就是不会有一个人连续抽中的现象,如果num是负数 则会有重复
- srandmember k1 4 随机选出4个用户 (没有重复)
- srandmember k1 -4 有重复(lisi)
还有一种情况 :礼物多 ,用户少
- 这种情况后面跟的值必须是负数了 因为如果是正数 就不能重复 ,我们需要的就是多个礼物抽奖给少的人 肯定会出现一个人拿到多个礼物的情况
spop
场景:当我们抽奖的时候会有一种抽奖方式 就是抽中之后下次抽奖就不会再抽中你了 就是你中将了 下次抽奖你就不能参与了
此时我们就可以用到spop命令
sorted_set
sorted_set和set相似 但也有些差异 它需要带着分值
添加数据用的是zadd key名 num value
往物理内存插入的时候 它是按照分值的左小右大的规则
查看用的是 zrange key名 开始位置 结束位置
还可以和分值一块显示 zrange key名 开始位置 结束位置 wirhscores
zrangebyscore
我又往k1加了两个数据 5 gzh 和7 tom
我现在想查找分值 在3到8的数据 zrangebyscore k1 3 8
score 的意思就是分值