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 的意思就是分值

原文地址:https://www.cnblogs.com/beizhai/p/13803371.html