4.操作集合类型数据(set)
Redis的Set是string类型的无序不重复集合。集合类型的数据操作总的思想是通过key确定集合,key是集合标识,元素没有下标,只有直接操作业务数据和数据的个数。
4.1 集合中添加元素
语法:sadd key member [member…]
功能:将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略,不会再加入。
返回值:加入到集合的新元素的个数(不包括被忽略的元素)。
demo如下
127.0.0.1:6379> sadd set01 a a b b c c (integer) 3
4.2 获取集合中的所有元素
语法:smembers key
功能:获取集合 key 中的所有成员元素,不存在的key视为空集合。
返回值:返回指定集合的所有元素集合,不存在的key,返回空集合。
demo如下
127.0.0.1:6379> smembers set01 1) "c" 2) "b" 3) "a"
4.4 获取集合里面的元素个数
语法:scard key
功能:获取集合里面的元素个数
返回值:数字,key的元素个数。其他情况返回 0 。
demo如下
127.0.0.1:6379> scard set01 (integer) 3
4.5 移除集合中一个或多个元素
语法:srem key member [member…]
功能:移除集合中一个或多个元素,不存在的元素被忽略。
返回值:数字,成功移除的元素个数,不包括被忽略的元素。
demo如下
127.0.0.1:6379> srem set01 a (integer) 1 127.0.0.1:6379> smembers set01 1) "c" 2) "b"
4.6 随机返回集合中n个元素
语法:srandmember key[count]
功能:只提供key,随机返回集合中一个元素,元素不删除,依然在集合中;
提供了count时,count 正数, 返回包含count个数元素的集合,集合元素各不重复。count是负数,返回一个count绝对值的长度的集合,集合中元素可能会重复多次。
返回值:一个元素或者多个元素的集合
demo如下
127.0.0.1:6379> srandmember set01 "c" 127.0.0.1:6379> srandmember set01 2 1) "c" 2) "b" 127.0.0.1:6379> srandmember set01 3 1) "c" 2) "b" 127.0.0.1:6379> srandmember set01 -3 1) "b" 2) "c" 3) "b"
4.7 随机从集合中删除n个元素
语法:spop key[count]
功能:随机从集合中删除一个或count个元素。
返回值:被删除的元素,key不存在或空集合返回nil。
demo如下
127.0.0.1:6379> spop set01 "c"
4.8 元素移动
语法:smove src dest member
功能:将 member 元素从src集合移动到dest集合,member不存在,smove不执行操作,返回0,如果dest存在member,则仅从src中删除member。
返回值:成功返回 1 ,其他返回 0 。
demo如下
127.0.0.1:6379> smove set01 set02 b (integer) 1 127.0.0.1:6379> smembers set02 1) "b"
4.9集合比较
语法:sdiff key key [key…]
功能:返回指定集合的差集,以第一个集合为准进行比较,即第一个集合中有但在其它任何集合中都没有的元素组成的集合。
返回值:返回第一个集合中有而后边集合中都没有的元素组成的集合,如果第一个集合中的元素在后边集合中都有则返回空集合。
demo如下
127.0.0.1:6379> sadd set01 a b c d e f (integer) 6 127.0.0.1:6379> sadd set02 b e f (integer) 3 127.0.0.1:6379> sdiff set01 set02 1) "d" 2) "c" 3) "a"
4.10 返回指定集合的交集
语法:sinter key key [key…]
功能:返回指定集合的交集,即指定的所有集合中都有的元素组成的集合。
返回值:交集元素组成的集合,如果没有则返回空集合。
demo如下
127.0.0.1:6379> sinter set01 set02 1) "f" 2) "e" 3) "b"
4.11 返回指定集合的并集
语法:sunion key key [key…]
功能:返回指定集合的并集,即指定的所有集合元素组成的大集合,如果元素有重复,则保留一个。
返回值:返回所有集合元素组成的大集合,如果所有key都不存在,返回空集合。
demo如下
127.0.0.1:6379> sunion set01 set02 1) "f" 2) "c" 3) "d" 4) "a" 5) "e" 6) "b"
5.操作哈希类型数据(hash)
Redis的hash 是一个string类型的key和value的映射表,这里的value是一系列的键值对,hash特别适合用于存储对象。
哈希类型的数据操作总的思想是通过key和field操作value,key是数据标识,field是域,value是我们感兴趣的业务数据。
5.1 添加元素(覆盖)
语法:hset key field value [field value …]
功能:将键值对field-value设置到哈希列表key中,如果key不存在,则新建哈希列表,然后执行赋值,如果key下的field已经存在,则value值覆盖。
返回值:返回设置成功的键值对个数。
demo如下
127.0.0.1:6379> hset user id 1001 (integer) 1 127.0.0.1:6379> hset user name zhangsan age 20 (integer) 2
5.2 查找元素
语法:hget key field
功能:获取哈希表 key 中给定域 field 的值。
返回值:field域的值,如果key不存在或者field不存在返回nil。
demo如下
127.0.0.1:6379> hget user name "zhangsan"
5.3 插入多个元素
语法:hmset key field value [field value…]
功能:同时将多个 field-value (域-值)设置到哈希表 key 中,此命令会覆盖已经存在的field,hash表key不存在,创建空的hash表,再执行hmset.
返回值:设置成功返回ok,如果失败返回一个错误。
demo如下
127.0.0.1:6379> hmset user id 1001 name zhangsan age 11 OK 127.0.0.1:6379> hget user age "11"
💡 Q:hmset于hset有什么区别
As per Redis 4.0.0, HMSET is considered deprecated. Please use HSET in new code.
根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。
——redis 官网
5.4获取多个元素
语法:hmget key field [field…]
功能:获取哈希表 key 中一个或多个给定域的值
返回值:返回和field顺序对应的值,如果field不存在,返回nil。
demo如下
127.0.0.1:6379> hmget user id age name sex 1) "1001" 2) "11" 3) "zhangsan" 4) (nil) 127.0.0.1:6
5.5 获取所有元素
语法:hgetall key
功能:获取哈希表 key 中所有的域和值
返回值:以列表形式返回hash中域和域的值,key不存在,返回空hash.
demo如下
127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "name" 4) "zhangsan" 5) "age" 6) "11"
5.6 删除元素
语法:hdel key field [field…]
功能:删除哈希表 key 中的一个或多个指定域field,不存在field直接忽略。
返回值:成功删除的field的数量。
demo如下
127.0.0.1:6379> hdel user name (integer) 1 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "age" 4) "11"
5.7 返回长度
语法:hlen key
功能:获取哈希表 key 中域field的个数
返回值:数值,field的个数。key不存在返回0.
demo如下
127.0.0.1:6379> hlen user (integer) 2
5.8 查找元素
语法:hexists key field
功能:查看哈希表 key 中,给定域 field 是否存在
返回值:如果field存在,返回1,其他返回0。
demo如下
127.0.0.1:6379> hexists user id (integer) 1
5.9获取所有键
语法:hkeys key
功能:查看哈希表 key 中的所有field域列表
返回值:包含所有field的列表,key不存在返回空列表
demo如下
127.0.0.1:6379> hkeys user 1) "id" 2) "age"
5.10 获取所有值
语法:hvals key
功能:返回哈希表 中所有域的值列表
返回值:包含哈希表所有域值的列表,key不存在返回空列表。
demo如下
127.0.0.1:6379> hvals user 1) "1001" 2) "11"
5.11 值增加整数值
语法:hincrby key field int
功能:给哈希表key中的field域增加int
返回值:返回增加之后的field域的值
demo如下
127.0.0.1:6379> hget user age "11" 127.0.0.1:6379> hincrby user age 2 (integer) 13 127.0.0.1:6379> hget user age "13"
5.12 值增加小数值
语法:hincrbyfloat key field float
功能:给哈希表key中的field域增加float
返回值:返回增加之后的field域的值
demo如下
127.0.0.1:6379> hincrbyfloat user age 2.1 "15.1"
5.13 添加元素(不覆盖)
语法:hsetnx key field value
功能:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在的时候才设置,否则不设置。
返回值:设值成功返回1,其他返回0.
demo如下
127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "age" 4) "15.1" 127.0.0.1:6379> hsetnx user name lili (integer) 1 127.0.0.1:6379> hsetnx user age 11 (integer) 0 127.0.0.1:6379> hgetall user 1) "id" 2) "1001" 3) "age" 4) "15.1" 5) "name" 6) "lili"
6.操作有序集合类型(Zset)
Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。
6.1 添加元素
语法:zadd key score member [score member…]
功能:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果member存在集合中,则覆盖原来的值;score可以是整数或浮点数.
返回值:数字,新添加的元素个数.
demo如下
127.0.0.1:6379> zadd zset01 20 z1 30 z2 50 z3 40 z4 (integer) 4
6.2 查找指定区间元素(按位序,递增排序)
语法:zrange key startIndex endIndex [WITHSCORES]
功能:查询有序集合,指定区间的内的元素。集合成员按score值从小到大来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。
返回值:指定区间的成员组成的集合。
demo如下
127.0.0.1:6379> zrange zset01 0 -1 1) "z1" 2) "z2" 3) "z4" 4) "z3" 127.0.0.1:6379> zrange zset01 0 -1 WITHSCORES 1) "z1" 2) "20" 3) "z2" 4) "30" 5) "z4" 6) "40" 7) "z3" 8) "50"
6.3 查找指定区间元素(按分数,递增)
语法:zrangebyscore key min max [WITHSCORES ] [LIMIT offset count]
功能:获取有序集 key 中,所有 score 值介于 min 和 max 之间(包括min和max)的成员,有序成员是按递增(从小到大)排序;
使用符号”(“ 表示包括min但不包括max;
withscores 显示score和 value;
limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。
返回值:指定区间的集合数据
demo如下
127.0.0.1:6379> zrangebyscore zset01 0 40 WITHSCORES 1) "z1" 2) "20" 3) "z2" 4) "30" 5) "z4" 6) "40"
6.4 删除成员
语法:zrem key member [member…]
功能:删除有序集合 key 中的一个或多个成员,不存在的成员被忽略。
返回值:被成功删除的成员数量,不包括被忽略的成员。
demo如下
127.0.0.1:6379> zrem zset01 z4 (integer) 1
6.5 获取元素个数
语法:zcard key
作用:获取有序集 key 的元素成员的个数。
返回值:key存在,返回集合元素的个数; key不存在,返回0。
demo如下
127.0.0.1:6379> zcard zset01 (integer) 3
6.6 统计指定分数区间元素个数
语法:zcount key min max
功能:返回有序集 key 中, score 值在 min 和 max 之间(包括 score 值等于 min 或 max )的成员的数量。
返回值:指定有序集合中分数在指定区间内的元素数量。
demo如下
127.0.0.1:6379> zcount zset01 10 30 (integer) 2
6.7 获取元素排名(递增)
语法:zrank key member
功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从小到大顺序排列,从0开始排名,score最小的是0 。
返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。
demo如下
127.0.0.1:6379> zrank zset01 z4 (nil) 127.0.0.1:6379> zrank zset01 z3 (integer) 2
6.8 获取元素的分数
语法:zscore key member
功能:获取有序集合key中元素member的分数。
返回值:返回指定有序集合元素的分数。
demo如下
127.0.0.1:6379> zscore zset01 z3 "50"
6.9 获取元素的排名(递减)
语法:zrevrank key member
功能:获取有序集 key 中成员 member 的排名,有序集成员按 score 值从大到小顺序排列,从0开始排名,score最大的是0 。
返回值:指定元素在有序集合中的排名;如果指定元素不存在,返回nil。
demo如下
127.0.0.1:6379> zrevrank zset01 z3 (integer) 0 127.0.0.1:6379> zrevrank zset01 z2 (integer) 1
6.10 查找指定区间元素(按位序,递减)
语法:zrevrange key startIndex endIndex [WITHSCORES]
功能:查询有序集合,指定区间的内的元素。集合成员按score值从大到小来排序;startIndex和endIndex都是从0开始表示第一个元素,1表示第二个元素,以此类推; startIndex和endIndex都可以取负数,表示从后往前取,-1表示倒数第一个元素;WITHSCORES选项让score和value一同返回。
返回值:指定区间的成员组成的集合。
demo如下
127.0.0.1:6379> zrevrange zset01 0 -1 withscores 1) "z3" 2) "50" 3) "z2" 4) "30" 5) "z1" 6) "20"
6.11查找指定区间元素(按分数,递减)
语法:zrevrangebyscore key max min [WITHSCORES ] [LIMIT offset count]
功能:获取有序集 key 中,所有 score 值介于 max 和 min 之间(包括max和min)的成员,有序成员是按递减(从大到小)排序;
使用符号”(“ 表示不包括min和max;
withscores 显示score和 value;
limit用来限制返回结果的数量和区间,在结果集中从第offset个开始,取count个。
返回值:指定区间的集合数据
demo如下
127.0.0.1:6379> zrevrangebyscore zset01 100 0 withscores limit 0 2 1) "z3" 2) "50" 3) "z2" 4) "30"