Redis 中value类型 list,hash ,set

目录

 

Redis 中value类型-list

Redis 中value类型-hash

Redis 中value类型-set


  1. Redis 中value类型-list

 

List主要知识点:栈(同向命令),

                         队列(反向命令),

                         数组,

                         阻塞队列

 

扫描二维码关注公众号,回复: 12513615 查看本文章

Lpush 从左边开始添加进list队列里面,那么插入的顺序是a b c ,.. g则里面的排列顺序是g…c b a

最后插入的在索引0的位置

Lrange k1 0 -1  展示队列里面所有的元素

同理rpush 从list右边开始添加元素

 

 

Lpop k1 从左边弹出一个元素,则弹出g ,

说明 lpush 和lpop 实现了栈的数据结构:后进先出,同样,Rpush和Rpop也实现了后进先出

 

Rpop 从右边弹出 ,弹出a ,说明lpush和rpop 实现的先进先出的数据结构

总结:栈(同向命令)实现后进先出, 队列(反向命令)实现先进先出

 

list有索引:正向索引和反向索引

假设list:a b c d e f

则索引规则:

 0   1  2   3   4    5     6   正向索引

  a    b   c   d     e      f        g     list

                       -3   -2    -1    反向索引

 

通过索引拿值:

 

 

lset k1 0 w  将k1 的索引0位置的数替换为w

 

 

 

 

lrem k2 2 a  从左边开始移除两个a

其中这个num 数量如果是正数  则从左向右移除num个,如果是负数,则从右向左移除num 个,如果是0 ,则不移除

 

上面的移除完成后,如果返回了,怎样才能添加到原来的位置呢?下面红色的表示已经移除了,需要重新添加到原来的位置

  c  a  d  a  a  b  a   a   a 

值需要在c之后添加a和在d之后添加a

linsert k2 after c a

 

After 也同样有before 与之用法相反

 

 

Llen k2 统计k2 里面有多少元素

 

阻塞,单播队列 blpop

 

Blpop k1 0  在k1中拿出一个元素,如果k1 里面没有,则一直等待,阻塞

如果多个客户端都去redis里面的k1 取拿数据,如果k1里面有值了,谁最早阻塞的谁先拿,符合先进先出的原子

 

如下,我在k1里面陆续push了两个数,查看里面元素为空,因为刚把元素扔进去,就被其他的客户端执行blpop 给拿出了

客户端01

客户端02

 

客户端03

 

lrange k1 1 -2  删除索引两头的数据

 

Redis 中value类型-hash

Key:value(key:value)

 

Hset 和hget 设置hash值

 

同时设置多个值和获取多个值 hmset hmget

 

获取所有的key和获取所有的值

hkeys k1

hvals k1

 

hgetall k1  获取所有的key和values

 

HINCRBYFLOAT k1 age 0.5  对值进行计算

Redis 中value类型-set

set集合,去重,无序的,随机事件

添加数据:sadd 

查询所以数据:smembers

 

移除元素:srem

 

 

交集,并集,差集

 

SINTERSTORE dest k2 k3  给k2和k3取交集,并存入dest中

 

Sunion k2 k3  获得k2和k3的并集

 

 

取差集(k2和k3顺序不一样,结果不一样)

 

 

 

随机事件

SRANDMEMBER k2 2  从k2里面获取2个随机的成员 ,集合不改变

 

SPOP k2  从k2里面随机弹出一个元素,k2改变了

 

 

随机事件应用:

1.抽奖,有3个一等奖,2个2等奖,1个1等奖,用户有12个,随机抽取奖品,

  12个用户放入set集合里面 

随机抽取三个:8号。14号,5号中奖! ,获奖的人可以继续抽奖

 

假如抽过的人不能再参与抽奖呢?

抽过的人取抽奖池移除,就不再参加之后的抽奖了

猜你喜欢

转载自blog.csdn.net/yanfei464486/article/details/113718941