Redis详解(四)数据类型操作命令-集合和有序集合

第三章 Redis数据类型操作命令

4.集合类型 set

4.1 基本类型

(1)sadd

  • 语法:sadd key member [member…]
  • 作用:将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略,不会在加入
  • 返回值:加入到集合的新元素的个数。不包括被忽略的元素。
127.0.0.1:6379> sadd sql_order insert select
(integer) 2
127.0.0.1:6379> sadd sql_order insert 
(integer) 0
127.0.0.1:6379> sadd sql_order new_order
(integer) 1

(2)smembers

  • 语法:smembers key
  • 作用:获取集合key中的所有成员元素,不存在的key视为空集合。
127.0.0.1:6379> smembers sql_order
1) "select"
2) "insert"
3) "new_order"
127.0.0.1:6379> smembers sql_order1
(empty array)

(3)sismember

  • 语法:sismember key member。
  • 作用:判断member元素是否是集合key的成员。
  • 返回值:member是集合成员返回1,其他返回0。
127.0.0.1:6379> sismember sql_order select
(integer) 1
127.0.0.1:6379> sismember sql_order select1
(integer) 0

(4)scard

  • 语法:scard key
  • 作用:获取集合里面的元素个数
  • 返回值:数字,key的元素个数。其他情况返回0.
127.0.0.1:6379> scard sql_order
(integer) 3
127.0.0.1:6379> scard sql_order1
(integer) 0

(5)srem

  • 语法:screm key member [member…]
  • 作用:删除集合key中的一个或多个memeber元素,不存在的元素被忽略。
  • 返回值:数字,成功删除的元素个数,不包括被忽略的元素。
127.0.0.1:6379> srem sql_order insert 1111
(integer) 1 ## 成功删除了一个。

4.2常用命令

(1)srandmember

  • 语法:srandmember key [count]
  • 作用:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;提供了count时,
    • count正数,返回包含count个数元素的集合,集合元素各不相同。
    • count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。
  • 返回值:一个元素,多个元素的集合。
127.0.0.1:6379> smembers type
1) "char"
2) "short"
3) "boolean"
4) "double"
5) "byte"
6) "int"
7) "long"
8) "float"
127.0.0.1:6379> srandmember type
"byte"
127.0.0.1:6379> srandmember type
"double"
127.0.0.1:6379> srandmember type 4
1) "double"
2) "long"
3) "int"
4) "float"
127.0.0.1:6379> srandmember type -4
1) "byte"
2) "char"
3) "boolean"
4) "byte"

(2)spop

  • 语法:spop key [count]
  • 作用:随机从集合中删除一个元素。count是删除的元素个数。
  • 返回值:被删除的元素,key不存在或空集合返回nil。
127.0.0.1:6379> smembers type
1) "char"
2) "short"
3) "boolean"
4) "double"
5) "byte"
6) "int"
7) "long"
8) "float"
127.0.0.1:6379> spop type 3
1) "long"
2) "char"
3) "short"
127.0.0.1:6379> smembers type
1) "boolean"
2) "double"
3) "byte"
4) "int"
5) "float"

其他命令可以去redisdoc.com去看

5. 有序集合类型 zset(sorted set)

​ redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。

​ 不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。

5.1.基本命令

(1)zadd

  • 语法:zadd key score member [score member…]
  • 作用:将一个或多个member元素及其score值加入到有序集合key中,如果member存在集合中,则更新值;score可以是整数或浮点数。
  • 返回值:数字,新添加的元素个数。
# stu是 
127.0.0.1:6379> zadd stu 80 zs 65 lisi 90 jack 72 marry
(integer) 4

127.0.0.1:6379> zadd stu 80 rose
(integer) 1

## 分数也是可以更新的
127.0.0.1:6379> zadd stu 89 rose
(integer) 0

127.0.0.1:6379> zadd mycourse 60.5 html 75.69 css 90.8 java 80 spring
(integer) 4

(2)zrang(分数值从小到大显示的)

  • 语法:zrange key start stop [WITHSCORES]
  • 作用:查询有序集合,指定区间的内的元素。
    • 集合成员按score值从小到大来排序。
    • start,stop都是从0开始。0是第一个元素,1是第二个元素,依次类推。
    • 以-1表示最后一个成员。
    • -2表示倒数第二个成员。
    • WITHSCORES选项让score和value一同返回。
  • 返回值:自定义区间的成员集合。
127.0.0.1:6379> zrange stu 0 2
1) "lisi"
2) "marry"
3) "zs"

127.0.0.1:6379> zrange stu 0 2 withscores
1) "lisi"
2) "65"
3) "marry"
4) "72"
5) "zs"
6) "80"
### 显示倒数第四个到第二个
127.0.0.1:6379> zrange stu -4 -2 withscores
1) "marry"
2) "72"
3) "zs"
4) "80"
5) "rose"
6) "89"

(3)zrevrange(分数值从大到小显示的)

  • 语法:zrevrang key start stop [WITHSCORES]
  • 作用:返回有序集key中,指定区间内的成员。其中成员的位置按score值递减(从大到小)来排列。其他同zrange命令,
  • 返回值:自定义区间的成员集合。
127.0.0.1:6379> zrevrange stu 0 -1 withscores
 1) "jack"
 2) "90"
 3) "rose"
 4) "89"
 5) "zs"
 6) "80"
 7) "marry"
 8) "72"
 9) "lisi"
10) "65"

(4)zrem

  • 语法:zrem key member [member…]
  • 作用:删除有序集合key中的一个或多个成员,不存在的成员被忽略。
127.0.0.1:6379> zrevrange stu 0 -1 withscores
 1) "jack"
 2) "90"
 3) "rose"
 4) "89"
 5) "zs"
 6) "80"
 7) "marry"
 8) "72"
 9) "lisi"
10) "65"
127.0.0.1:6379> zrem stu zs lisi
(integer) 2
127.0.0.1:6379> zrevrange stu 0 -1 withscores
1) "jack"
2) "90"
3) "rose"
4) "89"
5) "marry"
6) "72"

(5)zcard

  • 语法:zcard key
  • 作用:获取有序集key的元素成员的个数
  • 返回值:key存在返回集合元素的个数,key不存在,返回0。
127.0.0.1:6379> zcard stu
(integer) 3
127.0.0.1:6379> zcard stu1
(integer) 0

5.2 常用命令

(1)zrangebyscore (从小到大)

  • 语法:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

  • 作用:获取有序集key中,所有score值介于min和max之间(包括min和max)的成员,有序成员是按递增(从小到大)排序。

    • min,max是包括在内,使用符号(表示不包括。min,max可以使用 -inf, +inf表示最小和最大)
    • limit用来限制返回结果的数量和区间。
127.0.0.1:6379> zadd sal 2000 tom 3000 jack 3500 lisi 4000 rose 4500 john 5000 smith 6000 emma
(integer) 7
127.0.0.1:6379> zrange sal 0 -1 withscores
 1) "tom"
 2) "2000"
 3) "jack"
 4) "3000"
 5) "lisi"
 6) "3500"
 7) "rose"
 8) "4000"
 9) "john"
10) "4500"
11) "smith"
12) "5000"
13) "emma"
14) "6000"
## 获取包含2000 与4000内的人的信息
127.0.0.1:6379> zrangebyscore sal 2000 4000
1) "tom"
2) "jack"
3) "lisi"
4) "rose"
127.0.0.1:6379> zrangebyscore sal 2000 4000 withscores
1) "tom"
2) "2000"
3) "jack"
4) "3000"
5) "lisi"
6) "3500"
7) "rose"
8) "4000"

## 不包含4000的
127.0.0.1:6379> zrangebyscore sal 2000 (4000 withscores
1) "tom"
2) "2000"
3) "jack"
4) "3000"
5) "lisi"
6) "3500"

## 大于2000小于4000的
127.0.0.1:6379> zrangebyscore sal (2000 (4000 withscores

## 从最小的取到5000
127.0.0.1:6379> zrangebyscore sal -inf 5000 withscores
 1) "tom"
 2) "2000"
 3) "jack"
 4) "3000"
 5) "lisi"
 6) "3500"
 7) "rose"
 8) "4000"
 9) "john"
10) "4500"
11) "smith"
12) "5000"
## 取4000 到最大
127.0.0.1:6379> zrangebyscore sal 4000 +inf withscores
1) "rose"
2) "4000"
3) "john"
4) "4500"
5) "smith"
6) "5000"
7) "emma"
8) "6000"

127.0.0.1:6379> zrangebyscore sal 4000 +inf withscores
## 取所有
127.0.0.1:6379> zrangebyscore sal -inf +inf withscores
## 取4000一下的第一名 (从第0个开始取1个)
127.0.0.1:6379> zrangebyscore sal -inf 4000 withscores limit 0 1
1) "tom"
2) "2000"
# 取 第2个开始的后两个
127.0.0.1:6379> zrangebyscore sal -inf 4000 withscores limit 2 2
1) "lisi"
2) "3500"
3) "rose"
4) "4000"

(2)zrevrangebyscore (从大到小)

  • 语法:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
  • 作用:返回有序集key中,score值介于max和min之间(默认包括等于max或min)的所有的成员
    • 有序集成员按score值递减(从大到小)的次序排列。其他同zrangebyscore
127.0.0.1:6379> zrevrangebyscore sal +inf 4000 withscores
1) "emma"
2) "6000"
3) "smith"
4) "5000"
5) "john"
6) "4500"
7) "rose"
8) "4000"

(3)zcount

  • 语法:zcount key min max
  • 作用:返回有序集key中,score值在min和max之前(默认包括score值等于min或max)的成员数量。
127.0.0.1:6379> zcount sal 4000 5000
(integer) 3

这部分主要做排名的操作,文章阅读系统,首页的文章热度排名 用zset很方便


版权声明:本文为gao1213977085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。