Redis的五大数据类型(二)

传送门----Redis的五大数据类型(一)

3、集合类型:set

(key:member1 member2…)value无序,元素唯一不重复

(1)sadd(添加)、smembers(查看所有元素)、sismember(判断是否存在)、scard(查看长度)、srem(移除指定元素)操作

  • 将一个或多个元素添加到指定的集合中:sadd key member1 member2

  • 获取指定集合中的所有元素:smembers key

  • 判断指定元素在指定集合中是否存在:sismember key member(存在返回1,不存在返回0)

  • 获取指定集合的长度:scard key

  • 移除指定集合中一个或者多个元素:srem key member1 member2

127.0.0.1:6379> sadd set1 aa bb cc dd
(integer) 4
127.0.0.1:6379> smembers set1
1) "bb"
2) "aa"
3) "cc"
4) "dd"
127.0.0.1:6379> sismember set1 aa
(integer) 1
127.0.0.1:6379> sismember set1 ee
(integer) 0
127.0.0.1:6379> scard set1
(integer) 4
127.0.0.1:6379> srem set1 dd
(integer) 1
127.0.0.1:6379> smembers set1
1) "bb"
2) "aa"
3) "cc"

(2)srandmember(抽随机)操作

随机获取指定集合中的n个元素:srandmember key [count]

(count不指定,默认为1;count>0:随机获取的数不重复,count<0:随机获取的数可能重复)

127.0.0.1:6379> sadd set2 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> smembers set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"

#conut=1
127.0.0.1:6379> srandmember set2 1
1) "6"

#count>0
127.0.0.1:6379> srandmember set2 3
1) "4"
2) "2"
3) "7"

#count<0
127.0.0.1:6379> srandmember set2 -4
1) "2"
2) "7"
3) "6"
4) "6"

(3)spop(随机删除元素)、smove(移动指定元素到新的集合中)操作

  • 从指定集合中随机移除一个或者多个元素:spop key [count](count不指定,默认为1)

  • 从指定集合中移动指定一个元素到另一个集合中:smove source destination member

127.0.0.1:6379> smembers set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
127.0.0.1:6379> spop set2  #随机删除1个元素,不指定参数值即删除1个
"5"
127.0.0.1:6379> spop set2 1  #随机删除1个元素
1) "7"
127.0.0.1:6379> spop set2 2  #随机删除2个元素
1) "2"
2) "6"
127.0.0.1:6379> smembers set2
1) "1"
2) "3"
3) "4"
127.0.0.1:6379> smove set2 set3 1  #移动指定set中的指定元素到新的set中
(integer) 1
127.0.0.1:6379> smembers set2  #查询原来的set集合
1) "3"
2) "4"
127.0.0.1:6379> smembers set3  #查询新的set集合,如果新的set存在,即往后加,如果不存在,则自动创建set并且加入进去
1) "1"

(4)sdiff(差集)、sinter(交集)、sunion(并集)操作

  • 返回差集(一个集合中有,其他集合没有):sdiff key1 key2

  • 返回交集(两个集合共同存在的值):sinter key1 key2

  • 返回并集(两个集合所有值):sunion key1 key2

127.0.0.1:6379> sadd set1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> sadd set2 3 4 5 6 7
(integer) 5
127.0.0.1:6379> smembers set1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> smembers set2
1) "3"
2) "4"
3) "5"
4) "6"
5) "7"
127.0.0.1:6379> sdiff set1 set2  #查询指定的set之间的差集,可以是多个set
1) "1"
2) "2"
127.0.0.1:6379> sinter set1 set2   #查询指定的set之间的交集,可以是多个set
1) "3"
2) "4"
3) "5"
127.0.0.1:6379> sunion set1 set2  #查询指定的set之间的并集,可以是多个set
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"

总结:适合实现共同好友、共同关注这一类的需求。

4、双列集合:hash

(1)hset(添加单个)、hmset(添加多个)、hget(查询单个)、hmget (批量查询指定值)、hgetall(查询所有)操作

  • 将一个键值对存储到指定集合中:hset key filed value

  • 将多个键值对存储到指定集合中:hmset key filed value

  • 获取hash表中指定的filed值:hget key filed

  • 批量获取hash表中指定的filed值:hmget key filed1 filed2

  • 获取指定hash表中的所有filed和value:hgetall key

127.0.0.1:6379> hset hash1 name zhangsan
(integer) 1
127.0.0.1:6379> hmset hash1 age 18 gender female
OK
127.0.0.1:6379> hget hash1 name
"zhangsan"
127.0.0.1:6379> hmget hash1 age gender
1) "18"
2) "female"
127.0.0.1:6379> hgetall hash1
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "female"

(2)hdel(删除hash中指定的值)、hlen(获取hash的长度)、hexists(判断key是否存在)操作

  • 删除指定hash表中的一个或者多个filed:hdel key filed1 filed2

  • 获取指定hash表中所有的filed的个数:hlen key

  • 判断指定hash表中指定的filed是否存在:hexists key filed

127.0.0.1:6379> hgetall hash1
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "female"
127.0.0.1:6379> hdel hash1 age gender
(integer) 2
127.0.0.1:6379> hgetall hash1
1) "name"
2) "zhangsan"
127.0.0.1:6379> hlen hash1
(integer) 1
127.0.0.1:6379> hexists hash1 name  #存在返回1
(integer) 1
127.0.0.1:6379> hexists hash1 age  #不存在返回0
(integer) 0

(3)hkeys(获取所有key)、hvals(获取所有value)、hincrby(给值加减)、hsetnx(存在不添加)操作

  • 获取指定hash表中所有filed的列表:hkeys key

  • 获取指定hash表中所有value的值:hvals key

  • 实现指定hash指定filed的值加减:hincrby key field increment

  • 存在不添加操作:hsetnx key field value

127.0.0.1:6379> hgetall hash1
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "female"
127.0.0.1:6379> hkeys hash1
1) "name"
2) "age"
3) "gender"
127.0.0.1:6379> hvals hash1
1) "zhangsan"
2) "18"
3) "female"
127.0.0.1:6379> hincrby hash1 age 2
(integer) 20
127.0.0.1:6379> hincrby hash1 age -3
(integer) 17
127.0.0.1:6379> hsetnx hash1 high 185  #添加不存在就新增返回新增成功的数量(单个增加)
(integer) 1
127.0.0.1:6379> hsetnx hash1 name lisi  #存在则添加失败返回0
(integer) 0
127.0.0.1:6379> hgetall hash1
1) "name"
2) "zhangsan"
3) "age"
4) "17"
5) "gender"
6) "female"
7) "high"
8) "185"

总结:双列集合比字符串类型更加适合存对象。

5、有序单列集合:zset

value会根据关联的分数进行排序,不能重复

(1)zadd(添加)、zrange(查询)、zrangebyscore(排序小->大)、zrevrange(排序大->小)、zrangebyscore withscores(查询所有值包含key)操作

  • 将一个或者多个member及score加入有序集合:zadd key score1 member1 score2 member2

  • 根据指定集合获取指定区间的元素:zrange key startindex endindex

  • 将指定集合的元素从小到大排序:zrangebyscore key min max

  • 将指定集合的元素从大到小排序: zrevrange key start stop

  • 查询指定zset的所有值:zrangebyscore key min max withscores

127.0.0.1:6379> zadd zset1 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrangebyscore zset1 -inf +inf  #-inf 负无穷  +inf 正无穷
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zrevrange zset1 1 -1
1) "two"
2) "one"
127.0.0.1:6379>  zrangebyscore zset1 -inf +inf withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

(2)zrem(移除元素)、zcard(查看元素个数)、zcount(查询指定区间内的元素个数)操作

  • 删除指定集合中一个或多个指定元素:zrem key member1 member2

  • 获取集合中元素的个数:zcard key

  • 获取指定集合中在指定分数区间的元素个数:zcount key min max

127.0.0.1:6379> zadd zset1 1 v1 2 v2 3 v3 4 v4
(integer) 4
127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> zrem zset1 v3
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v4"
127.0.0.1:6379> zcard zset1
(integer) 3
127.0.0.1:6379> zcount zset1 0 20
(integer) 3
127.0.0.1:6379> zcount zset1 0 2
(integer) 2

(3)zrank (正序排名)、zrevrank(倒序排名)、zscore (获取指定集合中指定元素分数)操作

  • 获取指定元素的排名:zrank key member(排名从0开始)

  • 获取指定元素的排名:zrevrank key member (倒叙排名:从大到小)

  • 获取指定集合中的指定元素的分数:zscore key member

127.0.0.1:6379> zrank zset1 v4
(integer) 2
127.0.0.1:6379> zrevrank zset1 v4
(integer) 0
127.0.0.1:6379> zscore zset1 v4
"4"

总结:成绩表排序,工资表排序,年龄排序等需求可以用zset来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值