redis数据类型list、hash、set、zset

redis数据类型list、hash、set、zset

list

hash

set

zset

list
可以在redis命令行自己查看帮助文档,help @list
LPUSH key value [value …] 从对象的左边开始放数据,压入数据
lpush nihao a b c d 存放的顺序是d c b a ,使用lpop key从左边弹出数据,lpop nihao 最先弹出d,最后才弹出a;

127.0.0.1:6379> lrange nihao 0 -1

1) "d"
2) "c"
3) "b"
4) "a"

rpush nihao2 a b c d e 存放的顺序是 a b c d e,使用rpop key从左边弹出数据,rpop nihao2 最先弹出e,最后才弹出a;

127.0.0.1:6379> lrange nihao2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"

小结:我们对list使用同向命令时lpush、lpop和rpush、rpop的时候,对list可以做栈的使用。我们对list使用反向命令如:lpush、rpop左边进,右边出;即先进先出,此时就是队列。

lrange key start stop查看key里的数据,redis的索引有正负索引。

127.0.0.1:6379> lrange nihao2 0 0
1) "a"
127.0.0.1:6379> lrange nihao2 0 -5
1) "a"
127.0.0.1:6379> lrange nihao2 0 -4
1) "a"
2) "b"

lindex key index 根据下标取出key里的值

127.0.0.1:6379> lindex nihao 0 取出第一个值
"d"
127.0.0.1:6379> lindex nihao -1 取出最后一个值
"a"
127.0.0.1:6379> lset nihao 1 ccc 把key为nihao的第一个索引的值修改为ccc
127.0.0.1:6379> lrange nihao 0 -1 查看nihao的值
1) "d"
2) "ccc"
3) "b"
4) "a"

小结:这种操作类似于数组,对下标(索引)进行操作,list是不会去重的。

127.0.0.1:6379> lpush key1 1 a 2 b 3 c 4 a 5 d

127.0.0.1:6379> lrange key1 0 -1
 1) "d"
 2) "5"
 3) "a"
 4) "4"
 5) "c"
 6) "3"
 7) "b"
 8) "2"
 9) "a"
10) "1"

lrem key count value 移除list中元素的个数以及值

127.0.0.1:6379> lrem key1 2 a 移除key1中2个a
127.0.0.1:6379> lrange key1 0 -1
1) "d"
2) "5"
3) "4"
4) "c"
5) "3"
6) "b"
7) "2"
8) "1"

linsert key BEFORE|AFTER pivot(元素的值) value 在list里插入一个数,一个list中有相同的值,插入数据的时候会在第一个值的地方插入。

127.0.0.1:6379> linsert key1 after 4 a
127.0.0.1:6379> linsert key1 after b a
127.0.0.1:6379> lrange key1 0 -1
 1) "d"
 2) "5"
 3) "4"
 4) "a"
 5) "c"
 6) "3"
 7) "b"
 8) "a"
 9) "2"
10) "1"

blpop key [key …] timeout 阻塞时间为0表示一直等着。多个客户端阻塞等待,谁先阻塞,当key有值的时候谁会先取到值并释放连接。

hash
help @hash 查看帮助文档

hset key field value

127.0.0.1:6379> hset people name eye
hmset key field value [field value ...]
张三的性别,身高,年龄
127.0.0.1:6379> hset zhangsan gender F
127.0.0.1:6379> hmset zhangsan age 13 height 188
127.0.0.1:6379> hmget zhangsan age height gender  获取zhangsan的属性的值
1) "13"
2) "188"
3) "F"
127.0.0.1:6379> hgetAll zhangsan 获取张三的所有属性和值
1) "gender"
2) "F"
3) "age"
4) "13"
5) "height"
6) "188"

set 存放无序但有去重
命令:sadd key member [member …] 添加数据
smembers key 查看key的所有值
srem key member [member …] 删除元素

127.0.0.1:6379> sadd key3 haha hehe haha xixi  hahah
127.0.0.1:6379> smembers key3 获取结果,发现对haha进行了去重处理。
1) "xixi"
2) "hehe"
3) "hahah"
4) "haha"
127.0.0.1:6379> srem key3 xixi haha 删除元素xixi haha
127.0.0.1:6379> smembers key3 查看结果
1) "hehe"
2) "hahah"

验证交集、并集、差集
命令:sinter key [key …] 几个key取交集,结果直接返回给客户端
sinterstore destination key [key …] 几个key取交集返回的结果存放在destination目标key中,整个过程在服务端完成,减少了磁盘的IO操作。
sunion key [key …] 几个key取并集,结果直接返回给客户端
sunionstore destination key [key …]
sdiff key [key …]取差集,具有方向性,具体看哪个key在前面

127.0.0.1:6379> sadd key4  1 3 2 4 5
127.0.0.1:6379> sadd key5  76 7 3 4 9 10
127.0.0.1:6379> sinter key4 key5
1) "3"
2) "4"
127.0.0.1:6379> sinterstore tar(结果存放的key) key4 key5  取交集
127.0.0.1:6379> smembers tar
1) "3"
2) "4"
127.0.0.1:6379> sunion key4 key5 取并集
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "7"
7) "9"
8) "10"
9) "76"
127.0.0.1:6379> sdiff key4 key5 取差集
1) "1"
2) "2"
3) "5"
127.0.0.1:6379> sdiff key5 key4
1) "7"
2) "9"
3) "10"
4) "76"

随机事件
srandmember key [count]
count为正数:取出一个去重的结果集,但不能超过原有key的数据集;
count为负数:取出一个重复的结果集,一定满足所需的数量
count为0:不返回
使用场景1:抽奖。假如3个奖品,集合里存用户
srandmember key 2 从集合里取两个不重复的人
srandmember key -2 从集合中取两个,可重复的

127.0.0.1:6379> sadd key6 zhangsan  lisi  wangwu  zhaoliu
127.0.0.1:6379> srandmember key6 3
1) "wangwu"
2) "zhangsan"
3) "lisi"
127.0.0.1:6379> srandmember key6 -3(抽取的人可能是1个人, 2个人,3个人)
1) "zhangsan"
2) "zhaoliu"
3) "zhangsan"

场景2:奖品多,人少 count设置为负数
场景3:奖品数小于人数
spop key [count] 取出一个
小结:无序与随机性,元素的放入多少的不同,元素的存储顺序不同

sorted_set

是一个集合,有很多元素,在排序的时候元素需要给出分值,如果分值相同则会按照名称的字典顺序排序;每个元素都有正负向索引。
zadd key [NX|XX] [CH] [INCR] score member [score member …]

127.0.0.1:6379> zadd key1 8 zhangsan 2 lisi 3 wangwu

增加一个数据集,默认的存放顺序是根据分值物理内存左边小,右边大,不随命令发生变化

127.0.0.1:6379> zrange key1 0 -1

1) "lisi"

2) "wangwu"

3) "zhangsan"

127.0.0.1:6379> zrange key1 0 -1 withscores  按照索引取值
1) "lisi"
2) "2"
3) "wangwu"
4) "3"
5) "zhangsan"
6) "8"

zrangebyscore key min max [WITHSCORES] [LIMIT offset count]按照分值去取

127.0.0.1:6379> zrangebyscore key1 2 8 取出2-8分的数据
1) "lisi"
2) "wangwu"
3) "zhangsan"

zrange key start stop 取出前几位,按照升序排序

127.0.0.1:6379> zrange key1 0 1
1) "lisi"
2) "wangwu"

zrevrange key start stop 取出前几位,按照分值进行降序排序

127.0.0.1:6379> zrevrange key1 0 1
1) "zhangsan"
2) "wangwu"
127.0.0.1:6379> zrange key1 -2 -1 还是按照升序取后两个

1) "wangwu"

2) "zhangsan"

zscore key member 获取分值

127.0.0.1:6379> zscore key1 zhangsan

"8"

zrank key member 获取排名

127.0.0.1:6379> zrank key1 wangwu

(integer) 1

zincrby key  increment member

127.0.0.1:6379> zincrby key1 1 zhangsan 对zhangsan分数加1

"9"

127.0.0.1:6379> zrange key1 0 -1 withscores

1) "lisi"

2) "2"

3) "wangwu"

4) "3"

5) "zhangsan"

6) "9"

并集、交集

zunionstore destination numkeys key [key …] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

127.0.0.1:6379> zadd key1 80 zhaoliu 60 lisi 70 wangwu

127.0.0.1:6379> zadd key2 40 zhangsan 60 sunqi 40 liuba

zunionstore unionKey 2 key1 key2 说明:2表示2个key 后面接key的名称

127.0.0.1:6379> zrange unionKey 0 -1 withscores 查看目标key结果集的权重和分值

 1) "liuba"

 2) "40"

 3) "lisi"

 4) "60"

 5) "sunqi"

 6) "60"

 7) "wangwu"

 8) "70"

 9) "zhaoliu"

10) "120"


127.0.0.1:6379> zunionstore unionKey1 2 key1 key2 weights 1 0.5

127.0.0.1:6379> zrange unionKey1 0 -1 withscores

 1) "liuba"

 2) "20"

 3) "sunqi"

 4) "30"

 5) "lisi"

 6) "60"

 7) "wangwu"

 8) "70"

 9) "zhaoliu"

10) "100"
取最大值
127.0.0.1:6379> zunionstore maxunion1 2 key1 key2 AGGREGATE max  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值