目录
-
Redis 中value类型-list
List主要知识点:栈(同向命令),
队列(反向命令),
数组,
阻塞队列
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号中奖! ,获奖的人可以继续抽奖
假如抽过的人不能再参与抽奖呢?
抽过的人取抽奖池移除,就不再参加之后的抽奖了