Redis支持五种数据类型:string(字符串)、hash(哈希)、list(列表)、set(集合)以及sorted set(有序集合)。
一、字符串
Redis 的字符串(string)类型可以是字符串(简单的字符串、复杂的字符串(例如 JSON、XML))、数字(整数、 浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过 512MB。
1、增
SET 命令用于设置给定 key 的值,如果 key 已经存储了其它值,那么 SET 就会覆盖。
语法:SET key value [ EX seconds | PX milliseconds | KEEPTTL ] [ NX | XX ]
# 不存在的key
10.0.0.81:6379> SET name xm
OK
10.0.0.81:6379> GET name
"xm"
# 已存在key
10.0.0.81:6379> SET name xh
OK
10.0.0.81:6379> GET name
"xh"
我们还可以使用EX和PX来给给定key设置过期时间。注:-1为永久生效(默认),-2为已过期。
# 使用ex设置过期时间,以秒为单位
10.0.0.81:6379> SET name xm ex 10
OK
10.0.0.81:6379> TTL name
(integer) 6
# 使用px设置过期时间,以毫秒为单位
10.0.0.81:6379> SET name xm px 1000
OK
10.0.0.81:6379> TTL name
(integer) -2
我们还可以使用 SETEX 和 PSETEX 来对指定的 key 设置值及其过期时间,同样存在即覆盖。
# Usage: SETEX key seconds value
10.0.0.81:6379> SETEX name 10 xh
OK
10.0.0.81:6379> GET name
"xh"
10.0.0.81:6379> TTL name
(integer) 6
# Usage: PSETEX key milliseconds value
10.0.0.81:6379> PSETEX name 1000 xm
OK
10.0.0.81:6379> GET name
(nil)
10.0.0.81:6379> TTL name
(integer) -2
在SET命令中,NX 表示当 key 不存在时才创建,已存在则失败,即不更新存在的成员只添加新成员。XX 表示当 key 存在时才写入,不存在则失败,即仅仅更新存在的成员,不添加新成员。
# NX用法
10.0.0.81:6379> SET a 1 NX
OK
10.0.0.81:6379> SET a 2 NX
(nil)
10.0.0.81:6379> GET a
"1"
# XX用法
10.0.0.81:6379> SET b 2 XX
(nil)
10.0.0.81:6379> SET a 2 XX
OK
10.0.0.81:6379> GET a
"2"
同样我们也可以使用 SETNX 命令在指定的 key 不存在时,为 key 设置指定的值。注意:设置成功,返回1;设置失败,返回0。
# Usage: SETNX key value
10.0.0.81:6379> SETNX a 1
(integer) 0
10.0.0.81:6379> GET a
"2"
10.0.0.81:6379> SETNX b 1
(integer) 1
10.0.0.81:6379> GET b
"1"
当我们想批量创建一个或多个 key-value 对的时候可以使用 MSET。
# Usage: MSET key value [key value ...]
10.0.0.81:6379> MSET a 1 b 2 c 3
OK
10.0.0.81:6379> MGET a b c
1) "1"
2) "2"
3) "3"
同时设置一个或多个 key-value 对,仅当所有给定 key 都不存在,对于这种情况我们可以使用 MSETNX。注意是所有,操作具有原子性,要么全部成功,要么全部失败。
# Usage: MSETNX key value [key value ...]
10.0.0.81:6379> MSETNX a 11 b 22 c 33
(integer) 0
10.0.0.81:6379> MGET a b c
1) "1"
2) "2"
3) "3"
10.0.0.81:6379> MSETNX aa 11 bb 22 cc 33
(integer) 1
10.0.0.81:6379> MGET aa bb cc
1) "11"
2) "22"
3) "33"
2、查
# Usage: GET key
10.0.0.81:6379> GET name
"xm"
# Usage: MGET key [key ...]
10.0.0.81:6379> MGET a b c
1) "1"
2) "2"
3) "3"
除了上述方式外,我们还可以从字符串的指定开始下标和结束下标截取字符串。-1表示无穷,即 0 -1为截取所有。
# Usage: GETRANGE key start end
10.0.0.81:6379> SET content "hello world"
OK
10.0.0.81:6379> GETRANGE content 0 4
"hello"
10.0.0.81:6379> GETRANGE content 0 -1
"hello world"
使用 STRLEN 返回字符串长度。
# Usage: STRLEN key
10.0.0.81:6379> STRLEN content
(integer) 11
3、改
改相关的命令除了上述提可以更改数据的命令外,我们还可以使用 SETRANGE 按下标更改数据,即从指定下标处插入数据存在则覆盖。
10.0.0.81:6379> set name xm
OK
10.0.0.81:6379> SETRANGE name 2 xm
(integer) 4
10.0.0.81:6379> get name
"xmxm"
10.0.0.81:6379> SETRANGE name 0 xh
(integer) 4
10.0.0.81:6379> get name
"xhxm"
10.0.0.81:6379> SETRANGE name 0 xhxh
(integer) 4
10.0.0.81:6379> get name
"xhxh"
改相关命令还有 GETSET 命令,它等同于 get+set,即执行此命令会先返回 get 的结果,然后将该 key 的值更改为新的值。
10.0.0.81:6379> GETSET name xg
"xm"
10.0.0.81:6379> GET name
"xg"
使用 APPEND 命令可以在字符串后面追加字符。
# Usage: APPEND key value
10.0.0.81:6379> APPEND name " is good boy"
(integer) 14
10.0.0.81:6379> get name
"xg is good boy"
4、删
# Usage: DEL key [key ...]
10.0.0.81:6379> DEL a b c
(integer) 3
10.0.0.81:6379> mget a b c
1) (nil)
2) (nil)
3) (nil)
5、计数
使用 INCR 命令对给定key进行递增。INCR 命令会将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型或字符串类型的值不为数字,那么就返回一个错误。
# Usage:INCR key
10.0.0.81:6379> INCR num
(integer) 1
10.0.0.81:6379> GET num
"1"
# 还可以指定步长进行递增
# Usage:INCRBY key increment
10.0.0.81:6379> INCRBY num 5
(integer) 6
10.0.0.81:6379> GET num
"6"
使用 DECR 命令对给定key进行递减。
# Usage:DECR key
10.0.0.81:6379> DECR num
(integer) 5
10.0.0.81:6379> GET num
"5"
# 还可以指定步长进行递减
# Usage:DECRBY key decrement
10.0.0.81:6379> DECRBY num 2
(integer) 3
10.0.0.81:6379> GET num
"3"
二、哈希
Redis 的哈希(hash)类型是一个 string 类型的 field(字段) 和 value(值) 的映射表,即一个键值对集合。hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 – 1 个键值对(40多亿)。
1、增
HSET 命令用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,那么旧值将会被覆盖。
# HSET key field value [field value ...]
10.0.0.81:6379> HSET user a 18 b 19 c 20
使用 HSETNX 仅在字段 field 不存在时设置哈希表字段的值。如果字段已经存在,操作无效。
# HSETNX key field value
10.0.0.81:6379> HSETNX student xm 18
(integer) 1
10.0.0.81:6379> HSETNX student xm 18
(integer) 0
2、查
使用 HGET 和 MHGET 获取哈希表中指定字段的值。
# HGET key field
10.0.0.81:6379> HGET user a
"18"
# HMGET key field [field ...]
10.0.0.81:6379> HMGET user a b c
1) "18"
2) "19"
3) "20"
使用查看哈希表中指定的字段是否存在。存在返回1,不存在返回0。
# HEXISTS key field
10.0.0.81:6379> HEXISTS user a
(integer) 1
10.0.0.81:6379> HEXISTS user d
(integer) 0
使用 HLEN 获取哈希表中字段的数量。
# HLEN key
10.0.0.81:6379> HLEN user
(integer) 3
使用 HLENSTR 获取哈希表中指定指定的字符长度
# HSTRLEN key field
10.0.0.81:6379> HSTRLEN user a
(integer) 2
使用 HKEYS 获取哈希表中的所有字段。
# HKEYS key
10.0.0.81:6379> HKEYS user
1) "a"
2) "b"
3) "c"
使用 HVALS 获取哈希表中所有的值。
# HVALS key
10.0.0.81:6379> HVALS user
1) "18"
2) "19"
3) "20"
使用 HGETALL 获取哈希表中的所有字段和值,在返回值里,每个字段名之后是字段的值。
# HGETALL key
10.0.0.81:6379> HGETALL user
1) "a"
2) "18"
3) "b"
4) "19"
5) "c"
6) "20"
3、删
使用 HDEL 删除删除哈希表中的一个或多个指定字段,不存在的字段将被忽略。
# HDEL key field [field ...]
10.0.0.81:6379> HDEL user a d
(integer) 1
10.0.0.81:6379> HKEYS user
1) "b"
2) "c"
使用 DEL 删除哈希表
10.0.0.81:6379> DEL user
(integer) 1
4、计数
使用 HINCRBY 对哈希表中字段的值(整数)进行递增递减。 如果哈希表不存在,会自动创建。如果字段不存在,它的值会初始化为0。increment可以为负做递减操作。
# HINCRBY key field increment
10.0.0.81:6379> HINCRBY num a 2
(integer) 2
10.0.0.81:6379> HGET num a
"2"
10.0.0.81:6379> HINCRBY num a -2
(integer) 0
10.0.0.81:6379> HGET num a
"0"
使用 HINCRBYFLOAT 对哈希表中字段字段的值(浮点)进行递增递减。
# HINCRBYFLOAT key field increment
10.0.0.81:6379> HINCRBYFLOAT num a 0.2
"0.2"
10.0.0.81:6379> HINCRBYFLOAT num a -0.2
"0"
5、设置过期时间
hash 类型没有类似字符串类型的EX和PX,想对 hash 对象做过期策略可以使用全局函数 expire。
# EXPIRE key seconds
10.0.0.81:6379> EXPIRE num 10
(integer) 1
10.0.0.81:6379> TTL num
(integer) 6
三、列表
Redis 的列表(list)类型是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 2^32 – 1 个元素。列表可以用来做消息队列。
1、增
使用 LPUSH 将一个或多个元素插入到列表头部。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,会返回一个错误。
# LPUSH key element [element ...]
10.0.0.81:6379> LPUSH num 1 2
(integer) 2
10.0.0.81:6379> LPUSH num 3
(integer) 3
10.0.0.81:6379> LRANGE num 0 -1
1) "3"
2) "2"
3) "1"
使用 LPUSHX 将一个或多个元素插入到已存在的列表头部,列表不存在时操作无效。
# LPUSHX key element [element ...]
10.0.0.81:6379> LPUSHX test 1 2 3
(integer) 0
10.0.0.81:6379> LPUSHX num 4 5
(integer) 5
10.0.0.81:6379> LRANGE num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
使用 RPUSH 将一个或多个元素插入到列表的尾部。同样 RPUSHX 命令表示为已存在的列表添加元素到尾部。
# RPUSH key element [element ...]
10.0.0.81:6379> RPUSH num 6 7
(integer) 7
10.0.0.81:6379> LRANGE num 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "6"
7) "7"
使用 LINSERT 在列表指定的元素前或者后插入元素。
# LINSERT key BEFORE|AFTER pivot element
10.0.0.81:6379> LINSERT 1 before awd 1
(integer) 0
10.0.0.81:6379> LPUSH list 1 2 3
(integer) 3
10.0.0.81:6379> LINSERT list before 1 11
(integer) 4
10.0.0.81:6379> LINSERT list after 1 0
(integer) 5
10.0.0.81:6379> LRANGE list 0 -1
1) "3"
2) "2"
3) "11"
4) "1"
5) "0"
2、查
使用 LRANGE 获取列表指定范围内的元素。
# LRANGE key start stop
10.0.0.81:6379> LRANGE list 0 1
1) "3"
2) "2"
使用 LINDEX 根据指定的 index 下标查看列表中的元素。
# LINDEX key index
10.0.0.81:6379> LINDEX list 4
"0"
使用 LLEN 获取列表长度。
# LLEN key
10.0.0.81:6379> LLEN list
(integer) 5
3、改
使用 LSET 通过索引下标修改列表元素
# LSET key index element
10.0.0.81:6379> LRANGE list 0 -1
1) "2"
2) "1"
10.0.0.81:6379> lset list 0 22
OK
10.0.0.81:6379> LRANGE list 0 -1
1) "22"
2) "1"
使用 LTRIM 对一个列表进行修剪,即让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
# LTRIM key start stop
10.0.0.81:6379> LRANGE list 0 -1
1) "55"
2) "44"
3) "33"
4) "22"
5) "1"
10.0.0.81:6379> LTRIM list 1 3
OK
10.0.0.81:6379> LRANGE list 0 -1
1) "44"
2) "33"
3) "22"
4、删
使用 LREM 移除列表中的元素。当 count 大于0时,从表头开始向表尾搜索,移除与 element 相等的元素,数量为 count。当 count 小于0时,从表尾开始向表头搜索,移除与 element 相等的元素,数量为 count 的绝对值。
# LREM key count element
10.0.0.81:6379> LRANGE list 0 -1
1) "2"
2) "3"
3) "3"
4) "2"
5) "1"
10.0.0.81:6379> LREM list 2 2
(integer) 2
10.0.0.81:6379> LREM list -1 3
(integer) 1
10.0.0.81:6379> LRANGE list 0 -1
1) "3"
2) "1"
5、消息队列相关
这部分命令和消息队列息息相关。
使用 LPOP 删除并获取列表中的第一个元素(头部或者左边),返回值为移除的元素。也可以说从左边消费列表中的元素,消费完则删除。
# LPOP key
10.0.0.81:6379> LRANGE list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
10.0.0.81:6379> LPOP list
"4"
使用 RPOP 删除并获取列表中的最后一个元素(即尾部或者右边),返回值为移除的元素。也可以说从右边消费列表中的元素,消费完则删除。
# RPOP key
10.0.0.81:6379> RPOP list
"1"
10.0.0.81:6379> LRANGE list 0 -1
1) "3"
2) "2"
使用 RPOPLPUSH 移除列表的最后一个元素,并将该元素添加到另一个列表头部并返回。
# RPOPLPUSH source destination
10.0.0.81:6379> LRANGE list1 0 -1
1) "3"
2) "2"
3) "1"
10.0.0.81:6379> LRANGE list2 0 -1
1) "33"
2) "22"
3) "11"
10.0.0.81:6379> RPOPLPUSH list1 list2
"1"
10.0.0.81:6379> LRANGE list1 0 -1
1) "3"
2) "2"
10.0.0.81:6379> LRANGE list2 0 -1
1) "1"
2) "33"
3) "22"
4) "11"
使用 BLPOP 删除并获取列表中的第一个元素,返回值为列表的 key 和第一个元素,如果列表没有元素会阻塞列表直到设置的 timeout 秒后返回为空或发现可用元素为止(会立即消费返回)。
# BLPOP key [key ...] timeout
10.0.0.81:6379> LRANGE list 0 -1
1) "3"
2) "2"
3) "1"
10.0.0.81:6379> BLPOP list 10
1) "list"
2) "3"
10.0.0.81:6379> LRANGE list 0 -1
1) "2"
2) "1"
使用 BRPOP 删除并获取列表中的最后一个元素,返回值为列表的 key 和最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可用元素为止。
# BRPOP key [key ...] timeout
10.0.0.81:6379> BRPOP list 10
1) "list"
2) "1"
10.0.0.81:6379> LRANGE list 0 -1
1) "2"
四、无序集合
Redis 的集合(set)类型是 string 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。集合中最大的成员数为 2^32 – 1 (4294967295, 每个集合可存储40多亿个成员)。
1、增
使用 SADD 将一个或多个成员添加到集合中,已经存在于集合的成员将被忽略,若集合不存在则创建集合并新增成员。
# SADD key member [member ...]
10.0.0.81:6379> SADD num1 1 2 3
(integer) 3
10.0.0.81:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
2、查
使用 SMEMBERS 获取集合中的所有成员。
# SMEMBERS key
10.0.0.81:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
使用 SCARD 获取集合的成员数。
# SCARD key
10.0.0.81:6379> SCARD num1
(integer) 3
使用 SISMEMBER 判断给定值是否是集合的成员。
10.0.0.81:6379> SISMEMBER num1 1
(integer) 1
10.0.0.81:6379> SISMEMBER num1 4
(integer) 0
使用 Srandmember 返回集合中的一个随机成员。
• 如果 count 为正数且小于集合基数,那么命令返回一个包含 count 个元素的数组且数组中的成员各不相同。如果 count 大于等于集合基数,那么返回整个集合。
• 如果 count 为负数,那么命令返回一个数组,数组中的成员可能会重复出现多次,而数组的长度为 count 的绝对值。
# SRANDMEMBER key [count]
10.0.0.81:6379> SRANDMEMBER num1 2
1) "1"
2) "3"
10.0.0.81:6379> SRANDMEMBER num1 5
1) "1"
2) "2"
3) "3"
10.0.0.81:6379> SRANDMEMBER num1 -5
1) "3"
2) "2"
3) "2"
4) "2"
5) "1"
3、移
使用 SMOVE 将指定成员从 source 集合移动到 destination 集合。注意,SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的成员,则 SMOVE 不执行任何操作,仅返回 0 。否则,成员将从 source 集合中被移除,并添加到 destination 集合(不存在会自动创建)中去。当 destination 集合已经包含指定成员时, SMOVE 命令只是简单地将 source 集合中的指定成员删除。当 source 或 destination 不是集合类型时,返回一个错误。
# SMOVE source destination member
10.0.0.81:6379> SMOVE num1 num2 1
(integer) 1
10.0.0.81:6379> SMEMBERS num1
1) "2"
2) "3"
10.0.0.81:6379> SMEMBERS num2
1) "1"
4、删
使用 SREM 移除集合中的一个或多个成员,不存在的成员会被忽略。
# SREM key member [member ...]
10.0.0.81:6379> SREM num2 1
(integer) 1
10.0.0.81:6379> SMEMBERS num2
(empty array)
使用 SPOP 移除并返回集合中的一个或多个随机成员。
# SPOP key [count]
10.0.0.81:6379> SPOP num1 2
1) "2"
2) "3"
10.0.0.81:6379> SMEMBERS num1
(empty array)
5、交集
使用 SINTER 返回所有给定集合的交集。不存在的集合被视为空集,当给定集合当中有一个空集时,结果也为空集。
# SINTER key [key ...]
10.0.0.81:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
10.0.0.81:6379> SMEMBERS num2
1) "2"
2) "3"
3) "4"
10.0.0.81:6379> SINTER num1 num2
1) "2"
2) "3"
10.0.0.81:6379> SINTER num1 num3
(empty array)
使用 SINTERSTORE 将给定的多个集合的交集保存到一个指定的集合中,如果指定的集合已经存在,则将其覆盖。
# SINTERSTORE destination key [key ...]
10.0.0.81:6379> SINTERSTORE num3 num1 num2
(integer) 2
10.0.0.81:6379> SMEMBERS num3
1) "2"
2) "3"
6、并集
使用 SUNION 返回给定集合的并集,不存在的集合被视为空集。
# SUNION key [key ...]
10.0.0.81:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
10.0.0.81:6379> SMEMBERS num2
1) "2"
2) "3"
3) "4"
10.0.0.81:6379> SUNION num1 num2
1) "1"
2) "2"
3) "3"
4) "4"
使用 SUNIONSTORE 将给定的多个集合的并集保存到一个指定的集合中,如果指定的集合已经存在,则将其覆盖。
10.0.0.81:6379> SUNIONSTORE num3 num1 num2
(integer) 4
10.0.0.81:6379> SMEMBERS num3
1) "1"
2) "2"
3) "3"
4) "4"
7、差集
使用 SDIFF 返回第一个集合与其它集合之间的差集,返回第一个集合中独有的元素,即第一个集合中有的而其他集合没有的成员。
# SDIFF key [key ...]
10.0.0.81:6379> SMEMBERS num1
1) "1"
2) "2"
3) "3"
10.0.0.81:6379> SMEMBERS num2
1) "2"
2) "3"
3) "4"
10.0.0.81:6379> SDIFF num1 num2
1) "1"
使用 SDIFFSTORE 将第一个集合与其它集合之间的差集保存到一个指定的集合中,如果指定的集合已经存在,则将其覆盖。
# SDIFFSTORE destination key [key ...]
10.0.0.81:6379> SDIFFSTORE num3 num1 num2
(integer) 1
10.0.0.81:6379> SMEMBERS num3
1) "1"
五、有序集合
Redis 的有序集合(sorted set)和集合一样也是 string 类型的集合,且不允许重复的成员。不同的是每个成员都会关联一个双精度浮点型(double) 类型的分数,有序集合正是按照这个分数以递增(从小到大)的方式进行排序的。有序集合的成员是唯一的,但分数(score)却可以重复。
1、增
使用 ZADD 将一个或多个成员及其分数值加入到有序集合当中。如果某个成员已经是有序集合的成员,那么更新这个成员的分数值,相应它们的排序位置也会随着分数变化而改变。分数值可以是整数值或双精度浮点数。
# ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
• NX:表示当key不存在时才创建,已存在则失败。不更新存在的成员。只添加新成员。
• XX:表示当key存在时才写入,不存在则失败。即仅更新存在的成员,不添加新成员。
• CH:修改返回值为发生变化的成员总数,默认是返回新添加成员的总数。
• INCR: 对成员的分数进行递增操作,返回值为成员的分数,只支持单个成员,等同于ZINCRBY命令。
10.0.0.81:6379> zadd num 1 a 2 b 3 c
(integer) 3
10.0.0.81:6379> ZRANGE num 0 -1 WITHSCORES
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
# CH
10.0.0.81:6379> zadd num 2 a 3 b 4 c
(integer) 0
10.0.0.81:6379> zadd num ch 1 a 2 b 3 c
(integer) 3
# INCR
10.0.0.81:6379> ZADD num incr 2 a
"3"
10.0.0.81:6379> ZADD num incr 2 a
"5"
2、查
使用 ZRANGE 返回有序集合中指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典规则相对排序。
# ZRANGE key start stop [WITHSCORES]
10.0.0.81:6379> ZADD num 1 a 2 b 3 c
(integer) 0
10.0.0.81:6379> ZRANGE num 0 -1
1) "a"
2) "b"
3) "c"
# [WITHSCORES] 表示返回得分
10.0.0.81:6379> ZRANGE num 0 -1 WITHSCORES
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
如果需要按分数值递减(从大到小)来排列,是可以使用 ZREVRANGE 返回有序集合中指定区间内的成员。
# ZREVRANGE key start stop [WITHSCORES]
10.0.0.81:6379> ZREVRANGE num 0 -1 WITHSCORES
1) "c"
2) "3"
3) "b"
4) "2"
5) "a"
6) "1"
使用 ZCARD 获取集合中成员的数量、使用 ZCOUNT 获取有序集合中指定分数区间的成员数量、使用 ZSCORE 返回有序集合中成员的分数值。
# ZCARD key
10.0.0.81:6379> ZCARD num
(integer) 3
# ZCOUNT key min max
10.0.0.81:6379> ZCOUNT num 1 2
(integer) 2
# ZSCORE key member
10.0.0.81:6379> ZSCORE num a
"1"
3、删
使用 ZREM 移除有序集合中的一个或多个成员,不存在的成员将被忽略。
# ZREM key member [member ...]
10.0.0.81:6379> ZREM num a b
(integer) 2
10.0.0.81:6379> ZREVRANGE num 0 -1
1) "c"
使用 ZREMRANGEBYRANK 移除有序集合中指定区间内的所有成员。
# ZREMRANGEBYRANK key start stop
10.0.0.81:6379> ZADD num1 1 a 1 b 1 c 1 d
(integer) 4
10.0.0.81:6379> ZREMRANGEBYRANK num1 0 2
(integer) 3
10.0.0.81:6379> ZREVRANGE num1 0 -1
1) "d"
4、交集
使用 ZINTERSTORE 计算给定的 numkeys 个有序集合的交集,并且把结果放到 destination 中。在给定要计算的 key 和其它参数之前,必须先给定key个数(numberkeys)。如果destination存在,就把它覆盖。
默认情况下,结果中一个元素的分数是有序集合中该元素分数之和,前提是该元素在这些有序集合中都存在。因为交集要求其成员必须是给定的每个有序集合中的成员,结果集中的每个元素的分数和输入的有序集合个数相等。
使用 WEIGHTS选 项,你可以为每个给定的有序集合指定一个乘法因子,意思就是,每个给定有序集合的所有成员的 score 值在传递给聚合函数之前都要先乘以该因子。如果WEIGHTS没有给定,默认就是1。
使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数SUM,可以将所有集合中某个成员的score值之和作为结果集中该成员的 score 值。如果使用参数 MIN 或者 MAX,结果集就是所有集合中元素最小或最大的元素。
# ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
10.0.0.81:6379> zadd num1 1 a 2 b 3 c
(integer) 3
10.0.0.81:6379> zadd num2 2 b 3 c 4 d
(integer) 3
10.0.0.81:6379> ZINTERSTORE num3 2 num1 num2
(integer) 2
10.0.0.81:6379> ZRANGE num3 0 -1 withscores
1) "b"
2) "4"
3) "c"
4) "6"
5、并集
使用 ZUNIONSTORE 计算给定的 numkeys 个有序集合的并集,并且把结果放到 destination 中。在给定要计算的 key 和其它参数之前,必须先给定key个数(numberkeys)。如果destination存在,就把它覆盖。其它合上述交集类似。
# ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
10.0.0.81:6379> ZUNIONSTORE num3 2 num1 num2
(integer) 4
10.0.0.81:6379> ZRANGE num3 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "4"
5) "d"
6) "4"
7) "c"
8) "6"
六、SCAN命令
HSCAN、SSCAN、ZSCAN 命令用法和 SCAN 基本相同。
关于SCAN命令的使用,请阅读官方文档:http://www.redis.cn/commands/scan.html
参考文档:
http://www.redis.cn/commands.html
https://www.runoob.com/redis/redis-tutorial.html