[Redis]数据类型介绍

科技资讯 投稿 22800 0 评论

[Redis]数据类型介绍

一、字符 string

字符类型
命令 含义 复杂度
set <key> <value> 设置 key value o (1
get <key> 获取 key 对应的 value 值 o (1
del <key> 删除 key o (1
setnx <key> <value> key 不存在时创建 key o (1
senxx <key> <value> key 存在时更新 key 值 o (1
incr <key> 计数加操作 o (1
decr <key> 计数减操作 o (1
mset <key> <value> <key> <value> <key> <value> 批量设置 key value o (n
mget <key> <key> <key> 批量获取 key 对应的 value 值 o (n

 

1、SET 创建字符类型的 key

SET key value [EX seconds] [PX milliseconds] [NX|XX]

可用版本: >= 1.0.0
时间复杂度: O(1

value 关联到 key 。

key 已经持有其他值, SET 就覆写旧值,无视类型。

SET 命令对一个带有生存时间(TTL)的键进行设置之后,该键原有的 TTL 将被清除。

可选参数

SET 命令的行为可以通过一系列参数来修改:

  • EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。

  • PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。

  • NX : 只在键不存在时,才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。

  • XX : 只在键已经存在时,才对键进行设置操作。

127.0.0.1:6379> set key1 value1    #设置key value 值,无论是否存在都执行
OK
127.0.0.1:6379> type key1    #查看key的数据类型
string
127.0.0.1:6379> set key2 value2 ex 3    #设置有效期为3s的key
OK
127.0.0.1:6379> set key3 value3 nx    #当key值不存在时创建key,相当于新增key
OK
127.0.0.1:6379> set key3 value3 nx
(nil
127.0.0.1:6379> set key4 value4 xx    #当key值存在时对key的值进行更新,相当于更新key
(nil
127.0.0.1:6379> set key4 value4 nx
OK
127.0.0.1:6379> set key4 value_4 xx
OK

 

2、GET 获取一个key的内容

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key3
"value3"

 

3、DEL 删除一个和多个key

127.0.0.1:6379> keys *
1 "key3"
2 "key2"
3 "key1"
127.0.0.1:6379> del key1 key2
(integer 2
127.0.0.1:6379> keys *
1 "key3"
127.0.0.1:6379> del key3
(integer 1
127.0.0.1:6379> keys *
(empty list or set
127.0.0.1:6379> 

 

4、MSET 批量创建多个key

127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3
OK

 

5、MGET 批量获取多个key

127.0.0.1:6379> mget key1 key2 key3     #获取多个key对应的value值
1 "value1"
2 "value2"
3 "value3"
127.0.0.1:6379> keys ke*    #获取ke开头的所有key
1 "key3"
2 "key2"
3 "key1"
127.0.0.1:6379> keys *    #获取所有key
1 "key3"
2 "key2"
3 "key1"

 

6、APPEND 追加内容

127.0.0.1:6379> append key1 " this is append"
(integer 21
127.0.0.1:6379> get key1
"value1 this is append"
127.0.0.1:6379> 

 

7、GETSET 设置新值并返回旧值

127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> getset key4 newdata4
"value4"
127.0.0.1:6379> get key4
"newdata4"

 

8、STRLEN 返回字符串key对应的字符数

127.0.0.1:6379> set name janzen.qiu
OK
127.0.0.1:6379> get name
"janzen.qiu"
127.0.0.1:6379> strlen name
(integer 10
127.0.0.1:6379> set addr 深圳市¸ 
OK
127.0.0.1:6379> get addr
"\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82\xb8\x82"
127.0.0.1:6379> strlen addr
(integer 11

 

9、EXISTS 判断key是否存在

127.0.0.1:6379> keys *
1 "key3"
2 "key4"
3 "name"
4 "addr"
5 "key2"
6 "key1"
127.0.0.1:6379> exists key
(integer 0
127.0.0.1:6379> exists key1 key2
(integer 2

 

10、TTL 查看key值过期时间

#TTL <key> 可以查看key剩余有效期单位为s,过期后的key会被自动删除
#-1:表示永不过期,默认key的有效期都为永不过期
#-2:表示指定key不存在
127.0.0.1:6379> ttl keytemp (integer 54 127.0.0.1:6379> ttl keytemp (integer 52 127.0.0.1:6379> ttl keytemp (integer 51 127.0.0.1:6379> ttl key1 (integer -1 127.0.0.1:6379> ttl key (integer -2 127.0.0.1:6379>

 

11、EXPIRE 重新设置key过期时间

127.0.0.1:6379> ttl keytemp
(integer 196
127.0.0.1:6379> expire keytemp 800 #expire 命令结果为重置过期时间
(integer 1
127.0.0.1:6379> ttl keytemp
(integer 799
127.0.0.1:6379> ttl keytemp
(integer 793
127.0.0.1:6379> expire keytemp 400
(integer 1
127.0.0.1:6379> ttl keytemp
(integer 399
127.0.0.1:6379> 

 

12、PERSIST 取消key值过期时间

127.0.0.1:6379> ttl keytemp
(integer 333
127.0.0.1:6379> persist keytemp
(integer 1
127.0.0.1:6379> ttl keytemp
(integer -1

 

13、INCR 数值加计算

可利用INCR命令簇(INCR、INCRBY、INCRBYFLOAT)对可转化为数值的字符类型进行加计算

INCRBY <key> <int>:对可转化为整形的字符进行增加 int,如果key不存在则初始化key为0后进行处理

127.0.0.1:6379> set num 100
OK
#递增+1 127.0.0.1:6379> incr num (integer 101 127.0.0.1:6379> incr num (integer 102
#初始化key之后递增+1 127.0.0.1:6379> incr num1 (integer 1
#数值加计算 127.0.0.1:6379> incrby num 20 (integer 122 127.0.0.1:6379> incrby num -15 (integer 107
#初始化key后,进行加计算
127.0.0.1:6379> incrby num2 24 (integer 24
#初始化key,进行浮点数加计算 127.0.0.1:6379> incrbyfloat numf 20.1 "20.1"
#浮点数加计算 127.0.0.1:6379> incrbyfloat numf 2.8 "22.9" 127.0.0.1:6379> incrbyfloat numf -3.4 "19.5" 127.0.0.1:6379> incrbyfloat numf -10 "9.5" 127.0.0.1:6379> incrbyfloat numf 20 "29.5"

 

 

14、DECR 数值减计算

DECR <key> :对可转化为整形的字符进行递减1(效果等同于 DECRBY KEY 1),如果key不存在则初始化key为0后进行处理

#初始化key,进行递减-1
127.0.0.1:6379> decr num3
(integer -1
#递减-1 127.0.0.1:6379> decr num3 (integer -2
#初始化key,进行减计算 127.0.0.1:6379> decrby num4 20 (integer -20 #减计算 127.0.0.1:6379> decrby num3 10 (integer -12 127.0.0.1:6379> decrby num3 -20 (integer 8 #不可处理浮点型内容 127.0.0.1:6379> get numf "29.5" 127.0.0.1:6379> decr numf (error ERR value is not an integer or out of range 127.0.0.1:6379> decrby numf 10 (error ERR value is not an integer or out of range

 

  

二、列表 list

列表类型本质上是一个可双向读写的的管道,头部为左侧,尾部为右侧。一个列表最多可包含 2^32-1(4294967295)个元素,0为初始下标表示第一个元素,也可使用-1 表示最后一个元素的下标,元素值可以重复。

列表特点:

    有序性
  • 元素可重复
  • 左右双向可操作

1、LPUSH RPUSH 生成列表并插入数据

LPUSH key value [value …]

可用版本: >= 1.0.0

将一个或多个值 value 插入到列表 key 的表头

value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

key 不存在,一个空列表会被创建并执行 LPUSH 操作,当 key 存在但不是列表类型时,返回一个错误。

LPUSHX key value

时间复杂度: O(1

value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。

key 不存在时, LPUSHX 命令什么也不做。

RPUSH key value [value …]

可用版本: >= 1.0.0
时间复杂度: O(1
将一个或多个值 value 插入到列表 key 的表尾(最右边。
如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。

RPUSHX key value

可用版本: >= 2.2.0
时间复杂度: O(1
将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。
和 RPUSH key value [value …] 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

127.0.0.1:6379> lpush list1 a b c d e (integer 5 127.0.0.1:6379> rpush list2 a b c d e (integer 5

 

2、LPUSH RPUSH 向列表追加数据

127.0.0.1:6379> lpush list1 f
(integer 6
#从右边添加元素,其余元素将向左移动 127.0.0.1:6379> rpush list2 f (integer 6

 

3、获取列表长度

LLEN key

可用版本: >= 1.0.0
时间复杂度: O(1

返回列表 key 的长度。

key 不存在,则 key 被解释为一个空列表,返回 0 。

key 不是列表类型,返回一个错误。

127.0.0.1:6379> llen list1 (integer 6 127.0.0.1:6379> llen list2 (integer 6

 

4、获取列表指定位置数据

LRANGE key start stop

可用版本: >= 1.0.0
时间复杂度: O(S+N, S 为偏移量 start , N 为指定区间内元素的数量。

返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

LINDEX key index

可用版本: >= 1.0.0
时间复杂度:O(N, N 为到达下标 index 过程中经过的元素数量。因此,对列表的头元素和尾元素执行 LINDEX 命令,复杂度为O(1。

key 中,下标为 index 的元素。

start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

key 不是列表类型,返回一个错误。

127.0.0.1:6379> rpush list a b c d e (integer 5
#查看单个指定位置的元素 127.0.0.1:6379> lindex list 0 "a" 127.0.0.1:6379> lindex list 1 "b" 127.0.0.1:6379> lindex list 2 "c" 127.0.0.1:6379> lindex list 3 "d" 127.0.0.1:6379> lindex list 4 "e"
#查看指定范围的元素 127.0.0.1:6379> lrange list 0 4 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> lrange list 2 4 1 "c" 2 "d" 3 "e" 127.0.0.1:6379> lrange list 0 -1 #未知列表长度时,查看所有元素 1 "a" 2 "b" 3 "c" 4 "d" 5 "e"
#起始下标位置必须位于结束下标左侧 127.0.0.1:6379> lrange list -1 0 (empty list or set 127.0.0.1:6379> lrange list -1 2 (empty list or set 127.0.0.1:6379> lrange list 2 -5 (empty list or set

 

5、修改列表指定索引值的元素

LSET key index value

可用版本: >= 1.0.0
时间复杂度:对头元素或尾元素进行 LSET 操作,复杂度为 O(1。其他情况下,为 O(N, N 为列表的长度。

将列表 key 下标为 index 的元素的值设置为 value 。

index 参数超出范围,或对一个空列表( key 不存在进行 LSET 时,返回一个错误。

127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> lset list 2 n OK 127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "n" 4 "d" 5 "e"

 

6、移除列表数据

LPOP key

可用版本: >= 1.0.0

时间复杂度: O(1

key 的头元素。

RPOP key

可用版本: >= 1.0.0

移除并返回列表 key 的尾元素。

 

127.0.0.1:6379> rpush list a b c d e (integer 5 #删除列表头元素 127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> lpop list "a" 127.0.0.1:6379> lrange list 0 -1 1 "b" 2 "c" 3 "d" 4 "e" #删除列表尾元素 127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> rpop list "e" 127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "c" 4 "d"

 

LREM key count value

可用版本: >= 1.0.0
时间复杂度: O(N, N 为列表的长度。

根据参数 count 的值,移除列表中与参数 value 相等的元素。

count 的值可以是以下几种:
    count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
    count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
    count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> lrange list 0 -1
 1 "a"
 2 "b"
 3 "c"
 4 "c"
 5 "a"
 6 "d"
 7 "e"
 8 "a"
 9 "b"
10 "a"
11 "e"
12 "c"
13 "c"
14 "c"
15 "b"
127.0.0.1:6379> lrem list -3 c    #从列表尾部开始删除3个为 c 的元素
(integer 3
127.0.0.1:6379> lrange list 0 -1
 1 "a"
 2 "b"
 3 "c"
 4 "c"
 5 "a"
 6 "d"
 7 "e"
 8 "a"
 9 "b"
10 "a"
11 "e"
12 "b"

127.0.0.1:6379> lrange list 0 -1
 1 "a"
 2 "b"
 3 "c"
 4 "c"
 5 "a"
 6 "d"
 7 "e"
 8 "a"
 9 "b"
10 "a"
11 "e"
12 "b"
127.0.0.1:6379> lrem list 2 a    #从列表头部开始删除2个为 a 的元素
(integer 2
127.0.0.1:6379> lrange list 0 -1
 1 "b"
 2 "c"
 3 "c"
 4 "d"
 5 "e"
 6 "a"
 7 "b"
 8 "a"
 9 "e"
10 "b"

127.0.0.1:6379> lrange list 0 -1
 1 "b"
 2 "c"
 3 "c"
 4 "d"
 5 "e"
 6 "a"
 7 "b"
 8 "a"
 9 "e"
10 "b"
127.0.0.1:6379> lrem list 0 b    #删除列表中所有为 b 的元素
(integer 3
127.0.0.1:6379> lrange list 0 -1
1 "c"
2 "c"
3 "d"
4 "e"
5 "a"
6 "a"
7 "e"

 

RPOPLPUSH source destination

可用版本: >= 1.2.0
时间复杂度: O(1

命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:

  • source 中的最后一个元素(尾元素弹出,并返回给客户端。

  • source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

source 和 destination , source 列表有元素 a, b, c , destination 列表有元素 x, y, z ,执行 RPOPLPUSH source destination 之后, source 列表包含元素 a, b , destination 列表包含元素 c, x, y, z ,并且元素 c 会被返回给客户端。

source 不存在,值 nil 被返回,并且不执行其他动作。

source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation操作。

# source destination 为两个不同的列表
127.0.0.1:6379> lrange list1 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> lrange list2 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> rpoplpush list1 list2 "e" 127.0.0.1:6379> lrange list1 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 127.0.0.1:6379> lrange list2 0 -1 1 "e" 2 "a" 3 "b" 4 "c" 5 "d" 6 "e"
#source destination 为同一个列表 127.0.0.1:6379> rpush list1 a b c d e (integer 5 127.0.0.1:6379> lrange list1 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> rpoplpush list1 list1 "e" 127.0.0.1:6379> lrange list1 0 -1 1 "e" 2 "a" 3 "b" 4 "c" 5 "d"
#destination 列表不存在 127.0.0.1:6379> lrange list2 0 -1 1 "e" 2 "a" 3 "b" 4 "c" 5 "d" 6 "e" 127.0.0.1:6379> EXISTS list3 (integer 0 127.0.0.1:6379> rpoplpush list2 list3 "e" 127.0.0.1:6379> lrange list2 0 -1 1 "e" 2 "a" 3 "b" 4 "c" 5 "d" 127.0.0.1:6379> lrange list3 0 -1 1 "e"

 

LTRIM key start stop

可用版本: >= 1.0.0
时间复杂度: O(N, N 为被移除的元素的数量。

对一个列表进行修剪(trim,就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

-1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

key 不是列表类型时,返回一个错误。

LPUSH log newest_log
LTRIM log 0 99

 这个例子模拟了一个日志程序,每次将最新日志 newest_log 放到 log 列表中,并且只保留最新的 100 项。注意当这样使用 LTRIM 命令时,时间复杂度是O(1,因为平均情况下,每次只有一个元素被移除。

超出范围的下标

不会引起错误。

start 下标比列表的最大下标 end ( LLEN list 减去 1 还要大,或者 start>stop , LTRIM 返回一个空列表(因为 LTRIM 已经将整个列表清空

stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end

127.0.0.1:6379> lrange list 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> ltrim list 1 3 OK 127.0.0.1:6379> lrange list 0 -1 1 "b" 2 "c" 3 "d"

#起始下标大于end
127.0.0.1:6379> lrange list 0 -1
1 "b"
2 "c"
3 "d"
4 "a"
5 "b"
6 "c"
7 "d"
8 "e"
127.0.0.1:6379> ltrim list 8 10
OK
127.0.0.1:6379> lrange list 0 -1
(empty list or set

#终止下标大于起始下标
127.0.0.1:6379> lrange list 0 -1
1 "a"
2 "b"
3 "c"
4 "d"
5 "e"
127.0.0.1:6379> ltrim list 3 0
OK
127.0.0.1:6379> lrange list 0 -1
(empty list or set

 

使用DEL命令直接删除key

127.0.0.1:6379> rpush list a b c d e
(integer 5
127.0.0.1:6379> rpush list2 a b c d e
(integer 5
127.0.0.1:6379> keys *
1 "list"
2 "list2"
127.0.0.1:6379> del list
(integer 1
127.0.0.1:6379> del lisst2
(integer 0
127.0.0.1:6379> 

 

7、指定元素前后插入新元素

LINSERT key BEFORE|AFTER pivot value

可用版本: >= 2.2.0
时间复杂度: O(N, N 为寻找 pivot 过程中经过的元素数量。

将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。

pivot 不存在于列表 key 时,不执行任何操作。

key 不存在时, key 被视为空列表,不执行任何操作。

127.0.0.1:6379> rpush list a b c d e (integer 5 127.0.0.1:6379> LRANGE list 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> linsert list before d test (integer 6 127.0.0.1:6379> LRANGE list 0 -1 1 "a" 2 "b" 3 "c" 4 "test" 5 "d" 6 "e" 127.0.0.1:6379> rpush list1 a b c d e (integer 5 127.0.0.1:6379> LRANGE list1 0 -1 1 "a" 2 "b" 3 "c" 4 "d" 5 "e" 127.0.0.1:6379> linsert list after c test (integer 7 127.0.0.1:6379> LRANGE list1 0 -1 1 "a" 2 "b" 3 "c" 4 "test" 5 "d" 6 "e" 127.0.0.1:6379>

 

三、集合 set

集合特点:

    无序性
  • 元素唯一性
  • 多集合处理

1、生成集合key

SADD key member [member …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 是被添加的元素的数量。

member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。

key 不存在,则创建一个只包含 member 元素作成员的集合

127.0.0.1:6379> sadd set1 item1 item2 item3 (integer 3 127.0.0.1:6379> type set1 set

  

2、集合追加元素

#追加集合内容是只能追加集合中不存在的元素,已存在的元素将被忽略 127.0.0.1:6379> sadd set1 item3 item4 item5 (integer 2

  

3、查看集合元素

SMEMBERS key

可用版本: >= 1.0.0
时间复杂度: O(N, N 为集合的基数。

key 中的所有成员。

127.0.0.1:6379> smembers set1 1 "item3" 2 "item2" 3 "item4" 4 "item1" 5 "item5"

 

SISMEMBER key member

可用版本: >= 1.0.0
时间复杂度: O(1

member 元素是否集合 key 的成员。

返回值

member 元素是集合的成员,返回 1 。 如果 member 元素不是集合的成员,或 key 不存在,返回 0 。

127.0.0.1:6379> smembers set1 1 "item2" 2 "item5" 3 "item1" 4 "item3" 5 "item4"
#item2元素存在于列表set1 127.0.0.1:6379> sismember set1 item2 (integer 1
#item9元素不存在与列表set1 127.0.0.1:6379> sismember set1 item9 (integer 0

 

SRANDMEMBER key [count]

可用版本: >= 1.0.0
时间复杂度: 只提供 key 参数时为 O(1 。如果提供了 count 参数,那么为 O(N,N 为返回数组的元素个数。

如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。

count 参数:

  • count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

  • count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

返回值

key 参数时,返回一个元素;如果集合为空,返回 nil 。 如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

127.0.0.1:6379> smembers set1 1 "item2" 2 "item5" 3 "item1" 4 "item3" 5 "item4"
#未输入count值,默认随机返回1个元素 127.0.0.1:6379> srandmember set1 "item4"
#count<0,返回3个元素,允许出现重复值 127.0.0.1:6379> srandmember set1 -3 1 "item4" 2 "item3" 3 "item4"
#count>0,返回3个元素,结果允许出现重复值 127.0.0.1:6379> srandmember set1 3 1 "item2" 2 "item5" 3 "item3"
#count 大于列表中的元素个数,返回当前列表 127.0.0.1:6379> srandmember set1 9 1 "item3" 2 "item2" 3 "item5" 4 "item1" 5 "item4"

 

SCARD key

可用版本: >= 1.0.0
时间复杂度: O(1

返回集合 key 的基数(集合中元素的数量。

返回值

key 不存在时,返回 0 

127.0.0.1:6379> smembers set1 1 "item2" 2 "item5" 3 "item1" 4 "item3" 5 "item4" 127.0.0.1:6379> smembers set2 1 "item2" 2 "item9" 3 "item7" 4 "item1" 5 "item6" 6 "item4" 127.0.0.1:6379> scard set1 (integer 5 127.0.0.1:6379> scard set2 (integer 6

 

SSCAN cursor [MATCH pattern] [COUNT count]

可用版本: >= 2.8.0
时间复杂度:增量式迭代命令每次执行的复杂度为 O(1,对数据集进行一次完整迭代的复杂度为 O(N,其中 N 为数据集中的元素数量。
SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements)

127.0.0.1:6379> smembers set1 1 "item5" 2 "item1" 3 "item231" 4 "item132" 5 "item3" 6 "item13" 7 "item4" 8 "item2" 9 "item121" 10 "item81" #使用sscan筛选集合内元素 127.0.0.1:6379> sscan set1 0 match item?? 1 "7" 2 1 "item81" 2 "item13" 127.0.0.1:6379> sscan set1 0 match item??? 1 "7" 2 1 "item231" 2 "item132" 3 "item121" 127.0.0.1:6379> sscan set1 0 match item??1 1 "7" 2 1 "item231" 2 "item121" 127.0.0.1:6379> sscan set1 0 match item*1 1 "7" 2 1 "item231" 2 "item121" 3 "item81" 4 "item1"

 

4、删除集合中的元素

SREM key member [member …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 为给定 member 元素的数量。

key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

127.0.0.1:6379> smembers set1 1 "item3" 2 "item2" 3 "item4" 4 "item1" 5 "item5" 127.0.0.1:6379> srem set1 item1 item2 (integer 2 127.0.0.1:6379> smembers set1 1 "item5" 2 "item3" 3 "item4" #删除不存在的元素,错误的元素会被忽略 127.0.0.1:6379> srem set1 item3 item6 item7 (integer 1 127.0.0.1:6379> smembers set1 1 "item5" 2 "item4"

 

SPOP key

可用版本: >= 1.0.0
时间复杂度: O(1

如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER key [count] 命令。

返回值

key 不存在或 key 是空集时,返回 nil 。

127.0.0.1:6379> smembers set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
6 "item4"
127.0.0.1:6379> spop set2
"item4"
127.0.0.1:6379> smembers set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
127.0.0.1:6379> spop set2
"item6"
127.0.0.1:6379> smembers set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"

 

SMOVE source destination member

可用版本: >= 1.0.0
时间复杂度: O(1

将 member 元素从 source 集合移动到 destination 集合。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

source 或 destination 不是集合类型时,返回一个错误。

返回值

member 元素被成功移除,返回 1 。 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 

127.0.0.1:6379> smembers set1
1 "item3"
2 "item2"
3 "item4"
4 "item1"
5 "item5"
127.0.0.1:6379> smembers set2
1 "item4"
2 "item1"
3 "item9"
4 "item2"
5 "item7"
6 "item6"

#destination不存在时,自动创建set3集合,并将item5添加至set3
127.0.0.1:6379> smove set1 set3 item5
(integer 1
127.0.0.1:6379> smembers set1
1 "item4"
2 "item1"
3 "item2"
4 "item3"
127.0.0.1:6379> smembers set3
1 "item5"

#item6不存在于source
127.0.0.1:6379> smove set1 set2 item6
(integer 0
127.0.0.1:6379> smembers set1
1 "item1"
2 "item2"
3 "item5"
4 "item3"
5 "item4"
127.0.0.1:6379> smembers set2
1 "item4"
2 "item1"
3 "item9"
4 "item2"
5 "item7"
6 "item6"

#将item5从set1 移动至 set2
127.0.0.1:6379> smove set1 set2 item5
(integer 1
127.0.0.1:6379> smembers set1
1 "item2"
2 "item1"
3 "item3"
4 "item4"
127.0.0.1:6379> smembers set2
1 "item1"
2 "item9"
3 "item2"
4 "item5"
5 "item7"
6 "item6"
7 "item4"

#item1 同时存在于set1 set2时,仅删除 set1 中的 item1
127.0.0.1:6379> smembers set1
1 "item2"
2 "item5"
3 "item1"
4 "item3"
5 "item4"
127.0.0.1:6379> smembers set2
1 "item9"
2 "item2"
3 "item1"
4 "item7"
5 "item6"
6 "item4"
127.0.0.1:6379> smove set1 set2 item1
(integer 1
127.0.0.1:6379> smembers set1
1 "item2"
2 "item5"
3 "item3"
4 "item4"
127.0.0.1:6379> smembers set2
1 "item9"
2 "item2"
3 "item1"
4 "item7"
5 "item6"
6 "item4"

 

5、获取集合交集

SINTER key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N * M, N 为给定集合当中基数最小的集合, M 为给定集合的个数。

返回一个集合的全部成员,该集合是所有给定集合的交集。

key 被视为空集。

127.0.0.1:6379> SMEMBERS set1
1 "item3"
2 "item2"
3 "item4"
4 "item1"
5 "item5"
127.0.0.1:6379> SMEMBERS set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
6 "item4"
127.0.0.1:6379> sinter set1 set2
1 "item2"
2 "item4"
3 "item1"

 

SINTERSTORE destination key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N * M, N 为给定集合当中基数最小的集合, M 为给定集合的个数。

这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

destination 集合已经存在,则将其覆盖。

destination 可以是 key 本身。

 

127.0.0.1:6379> SMEMBERS set1
1 "item3"
2 "item2"
3 "item4"
4 "item1"
5 "item5"
127.0.0.1:6379> SMEMBERS set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
6 "item4"

#将set1 与 set2 的交集保存到 sinter_set
127.0.0.1:6379> sinterstore sinter_set set1 set2
(integer 3
127.0.0.1:6379> SMEMBERS sinter_set
1 "item2"
2 "item4"
3 "item1"

 

6、获取集合并集

SUNION key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 是所有给定集合的成员数量之和。

返回一个集合的全部成员,该集合是所有给定集合的并集。

key 被视为空集。

127.0.0.1:6379> SMEMBERS set1
1 "item3"
2 "item2"
3 "item4"
4 "item1"
5 "item5"
127.0.0.1:6379> SMEMBERS set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
6 "item4"
127.0.0.1:6379> sunion set1 set2
1 "item9"
2 "item2"
3 "item5"
4 "item7"
5 "item1"
6 "item6"
7 "item3"
8 "item4"

 

SUNIONSTORE destination key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 是所有给定集合的成员数量之和。

这个命令类似于 SUNION key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

destination 已经存在,则将其覆盖。

destination 可以是 key 本身

127.0.0.1:6379> SMEMBERS set1 1 "item3" 2 "item2" 3 "item4" 4 "item1" 5 "item5" 127.0.0.1:6379> SMEMBERS set2 1 "item2" 2 "item9" 3 "item7" 4 "item1" 5 "item6" 6 "item4" 127.0.0.1:6379> sunionstore sunion_set set1 set2 (integer 8 127.0.0.1:6379> SMEMBERS sunion_set 1 "item9" 2 "item2" 3 "item5" 4 "item7" 5 "item1" 6 "item6" 7 "item3" 8 "item4"

 

7、获取集合差集

SDIFF key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 是所有给定集合的成员数量之和。

返回一个集合的全部成员,该集合是所有给定集合之间的差集。

key 被视为空集。

127.0.0.1:6379> SMEMBERS set2 1 "item2" 2 "item9" 3 "item7" 4 "item1" 5 "item6" 6 "item4" 127.0.0.1:6379> SMEMBERS set1 1 "item3" 2 "item2" 3 "item4" 4 "item1" 5 "item5" #set1 与 set2 的差值 127.0.0.1:6379> sdiff set1 set2 1 "item3" 2 "item5" #set2 与 set1 的差值 127.0.0.1:6379> sdiff set2 set1 1 "item6" 2 "item9" 3 "item7"

 

SDIFFSTORE destination key [key …]

可用版本: >= 1.0.0
时间复杂度: O(N, N 是所有给定集合的成员数量之和。

destination 集合,而不是简单地返回结果集。

destination 集合已经存在,则将其覆盖。

destination 可以是 key 本身

127.0.0.1:6379> SMEMBERS set1
1 "item2"
2 "item5"
3 "item1"
4 "item3"
5 "item4"
127.0.0.1:6379> SMEMBERS set2
1 "item2"
2 "item9"
3 "item7"
4 "item1"
5 "item6"
6 "item4"
#set1 与 set2 的差值结果保存到 sdiff_set1 127.0.0.1:6379> sdiffstore sdiff_set1 set1 set2 (integer 2 127.0.0.1:6379> SMEMBERS sdiff_set1 1 "item3" 2 "item5"
#set2 与 set1 的差值结果保存到 sdiff_set2 127.0.0.1:6379> sdiffstore sdiff_set2 set2 set1 (integer 3 127.0.0.1:6379> SMEMBERS sdiff_set2 1 "item6" 2 "item9" 3 "item7"

 

四、有序集合 sorted set

有序集合特点:

    有序性
  • 元素唯一性
  • 每个元素通过score进行排序
  • value不可以重复,score可以重复

1、生成有序集合

ZADD key score member [[score member] [score member] …]

可用版本: >= 1.2.0
时间复杂度: O(M*log(N, N 是有序集的基数, M 为成功添加的新成员的数量。

member 元素及其 score 值加入到有序集 key 当中。

member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

score 值可以是整数值或双精度浮点数。

key 不存在,则创建一个空的有序集并执行 ZADD 操作。

key 存在但不是有序集类型时,返回一个错误。

#添加一个元素到有序列表
127.0.0.1:6379> zadd zset1 100 centos (integer 1
#添加多个元素包含已存在的元素到有序列表 127.0.0.1:6379> zadd zset1 150 centos 160 ubuntu 170 alpine 900 windows10 (integer 3
#添加多个新元素到有序列表 127.0.0.1:6379> zadd zset1 90 windows7 198 windows11 (integer 2 127.0.0.1:6379> type zset1 zset

 

2、有序集合实现排行榜

ZRANGE key start stop [WITHSCORES]

可用版本: >= 1.2.0
时间复杂度: O(log(N+M, N 为有序集的基数,而 M 为结果集的基数。

返回有序集 key 中,指定区间内的成员。

score 值递增(从小到大来排序。

score 值的成员按字典序(lexicographical order 来排列。

start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。 另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。

WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。 客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。

#根据元素score值从小到大递增排序,并展示所有元素
127.0.0.1:6379> zrange zset1 0 -1 1 "windows7" 2 "centos" 3 "ubuntu" 4 "alpine" 5 "windows11" 6 "windows10" #根据元素score从小到大递增排序,并展示从第4位到最后一位的元素 127.0.0.1:6379> zrange zset1 3 -1 1 "alpine" 2 "windows11" 3 "windows10" #根据元素score从小到大递减排序,并展示所有元素及score信息 127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows7" 2 "90" 3 "centos" 4 "150" 5 "ubuntu" 6 "160" 7 "alpine" 8 "170" 9 "windows11" 10 "198" 11 "windows10" 12 "900" #根据元素score从小到大递增排序,并展示从第4位到最后一位的元素及score信息 127.0.0.1:6379> zrange zset1 3 -1 withscores 1 "alpine" 2 "170" 3 "windows11" 4 "198" 5 "windows10" 6 "900"

 

ZREVRANGE key start stop [WITHSCORES]

可用版本: >= 1.2.0
时间复杂度: O(log(N+M, N 为有序集的基数,而 M 为结果集的基数。

返回有序集 key 中,指定区间内的成员。

score 值递减(从大到小来排列。 具有相同 score 值的成员按字典序的逆序(reverse lexicographical order排列。

#根据score从大到小递减排序,并展示所有元素 127.0.0.1:6379> zrevrange zset1 0 -1 1 "windows10" 2 "windows11" 3 "alpine" 4 "ubuntu" 5 "centos" 6 "windows7" #根据score从大到小递减排序,并展示第2位到倒数第2位元素 127.0.0.1:6379> zrevrange zset1 1 -2 1 "windows11" 2 "alpine" 3 "ubuntu" 4 "centos" #根据score从大到小递减排序,并展示所有元素及score信息 127.0.0.1:6379> zrevrange zset1 0 -1 withscores 1 "windows10" 2 "900" 3 "windows11" 4 "198" 5 "alpine" 6 "170" 7 "ubuntu" 8 "160" 9 "centos" 10 "150" 11 "windows7" 12 "90" #根据score从大到小递减排序,并展示第2位到倒数第2位元素及score信息 127.0.0.1:6379> zrevrange zset1 1 -2 withscores 1 "windows11" 2 "198" 3 "alpine" 4 "170" 5 "ubuntu" 6 "160" 7 "centos" 8 "150"

 

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

可用版本: >= 1.0.5
时间复杂度: O(log(N+M, N 为有序集的基数, M 为被结果集的基数。

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max 的成员。有序集成员按 score 值递增(从小到大次序排列。

score 值的成员按字典序(lexicographical order来排列(该属性是有序集提供的,不需要额外的计算。

LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ,注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N 时间。

WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。 该选项自 Redis 2.0 版本起可用。

区间及无限

min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。

( 符号来使用可选的开区间 (小于或大于。

ZRANGEBYSCORE zset (1 5

返回所有符合条件 1 < score <= 5 的成员,而

ZRANGEBYSCORE zset (5 (10

则返回所有符合条件 5 < score < 10 的成员。

#将score分数在区间 150 >= score >=198 之间的元素按照从小到大递增次序排列并展示 127.0.0.1:6379> zrangebyscore zset1 150 198 1 "centos" 2 "ubuntu" 3 "alpine" 4 "windows11" #将score分数在区间 150 > score >198 之间的元素及score信息按照从小到大递增次序排列并展示 127.0.0.1:6379> zrangebyscore zset1 (150 (198 withscores 1 "ubuntu" 2 "160" 3 "alpine" 4 "170"

 

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

可用版本: >= 2.2.0
时间复杂度: O(log(N+M, N 为有序集的基数, M 为结果集的基数。

返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min 的所有的成员。有序集成员按 score 值递减(从大到小的次序排列。

score 值的成员按字典序的逆序(reverse lexicographical order 排列。

score 值递减的次序排列这一点外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 命令一样。

#展示所有score分数低于900的元素,并按照从大到小递增排序 127.0.0.1:6379> zrevrangebyscore zset1 (900 -inf 1 "windows11" 2 "alpine" 3 "ubuntu" 4 "centos" 5 "windows7" #展示所有score分数不低于170的元素及score信息,按照从大到小递增排序 127.0.0.1:6379> zrevrangebyscore zset1 +inf 170 withscores 1 "windows10" 2 "900" 3 "windows11" 4 "198" 5 "alpine" 6 "170"

 

3、获取集合个数

ZCARD key

可用版本: >= 1.2.0
时间复杂度: O(1

返回有序集 key 的基数。

127.0.0.1:6379> zrange zset1 0 -1 1 "windows7" 2 "centos" 3 "ubuntu" 4 "alpine" 5 "windows11" 6 "windows10" 127.0.0.1:6379> zcard zset1 (integer 6

 

ZCOUNT key min max

可用版本: >= 2.0.0
时间复杂度: O(log(N, N 为有序集的基数。

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max 的成员的数量。

127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows7" 2 "90" 3 "centos" 4 "150" 5 "ubuntu" 6 "160" 7 "alpine" 8 "170" 9 "windows11" 10 "198" 11 "windows10" 12 "900" 127.0.0.1:6379> zcount zset1 100 900 (integer 5 127.0.0.1:6379> zcount zset1 -inf +inf (integer 6

 

4、返回某个数值的索引

ZRANK key member

可用版本: >= 2.0.0
时间复杂度: O(log(N

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大顺序排列。

0 为底,也就是说, score 值最小的成员排名为 0

127.0.0.1:6379> zrank zset1 windows11 (integer 4 127.0.0.1:6379> zrank zset1 centos (integer 1

 

ZREVRANK key member

可用版本: >= 2.0.0
时间复杂度: O(log(N

返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小排序。

0 为底,也就是说, score 值最大的成员排名为 0 。

127.0.0.1:6379> zrevrank zset1 centos (integer 4 127.0.0.1:6379> zrevrank zset1 windows11 (integer 1

 

5、获取分数

ZSCORE key member

可用版本: >= 1.2.0
时间复杂度: O(1

返回有序集 key 中,成员 member 的 score 值。

127.0.0.1:6379> zscore zset1 centos "150" 127.0.0.1:6379> zscore zset1 windows10 "900"

 

6、增加指定元素的分数值

ZINCRBY key increment member

可用版本: >= 1.2.0
时间复杂度: O(log(N

为有序集 key 的成员 member 的 score 值加上增量 increment 。

increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。

key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member

#对指定元素的分数加
127.0.0.1:6379> zscore zset1 centos
"300"
127.0.0.1:6379> zincrby zset1 32 centos
"332"
127.0.0.1:6379> zscore zset1 centos
"332"

#对指定元素的分数减
127.0.0.1:6379> zscore zset1 centos
"332"
127.0.0.1:6379> zincrby zset1 -87 centos
"245"
127.0.0.1:6379> zscore zset1 centos
"245"

#对不存在的元素进行score分数增
127.0.0.1:6379> zrange zset1 0 -1
1 "windows7"
2 "ubuntu"
3 "alpine"
4 "windows11"
5 "centos"
6 "windows10"
127.0.0.1:6379> zincrby zset1 324 unix
"324"
127.0.0.1:6379> zrange zset1 0 -1
1 "windows7"
2 "ubuntu"
3 "alpine"
4 "windows11"
5 "centos"
6 "unix"
7 "windows10"

 

7、删除元素

ZREM key member [member …]

可用版本: >= 1.2.0
时间复杂度: O(M*log(N, N 为有序集的基数, M 为被成功移除的成员的数量。

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows7" 2 "90" 3 "ubuntu" 4 "160" 5 "alpine" 6 "170" 7 "windows11" 8 "198" 9 "centos" 10 "245" 11 "unix" 12 "324" 13 "windows10" 14 "900" 127.0.0.1:6379> zrem zset1 unix ios (integer 1 127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows7" 2 "90" 3 "ubuntu" 4 "160" 5 "alpine" 6 "170" 7 "windows11" 8 "198" 9 "centos" 10 "245" 11 "windows10" 12 "900"

 

ZREMRANGEBYRANK key start stop

可用版本: >= 2.0.0
时间复杂度: O(log(N+M, N 为有序集的基数,而 M 为被移除成员的数量。

移除有序集 key 中,指定排名(rank区间内的所有成员。

start 和 stop 指出,包含 start 和 stop 在内。

start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows7" 2 "90" 3 "ubuntu" 4 "160" 5 "alpine" 6 "170" 7 "windows11" 8 "198" 9 "centos" 10 "245" 11 "windows10" 12 "900" 127.0.0.1:6379> zremrangebyrank zset1 0 2 (integer 3 127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows11" 2 "198" 3 "centos" 4 "245" 5 "windows10" 6 "900"

 

ZREMRANGEBYSCORE key min max

可用版本: >= 1.2.0
时间复杂度: O(log(N+M, N 为有序集的基数,而 M 为被移除成员的数量。

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max 的成员。

127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows11" 2 "198" 3 "centos" 4 "245" 5 "windows10" 6 "900" 127.0.0.1:6379> zremrangebyscore zset1 -inf 300 (integer 2 127.0.0.1:6379> zrange zset1 0 -1 withscores 1 "windows10" 2 "900"

 

使用DEL删除有序集合key

127.0.0.1:6379> del zset1
(integer 1

 

五、哈希 hash

1、生成hash key

HSET hash field value

可用版本: >= 2.0.0
时间复杂度: O(1

将哈希表 hash 中域 field 的值设置为 value 。

HSET 操作。

field 已经存在于哈希表中,那么它的旧值将被新值 value 覆盖。

127.0.0.1:6379> hset hash2 id 1 name janzen age 18 sex man number 159159 (integer 5 127.0.0.1:6379> type hash2 hash

 

HSETNX hash field value

可用版本: >= 2.0.0
时间复杂度: O(1

当且仅当域 field 尚未存在于哈希表的情况下,将它的值设置为 value 。

如果哈希表 hash 不存在,那么一个新的哈希表将被创建并执行 HSETNX 命令。

返回值

HSETNX 命令在设置成功时返回 1 ,在给定域已经存在而放弃执行设置操作时返回 0

127.0.0.1:6379> exists hash3
(integer 0
#hash 不存在
127.0.0.1:6379> hsetnx hash3 id 2
(integer 1

#同时修改多个参数
127.0.0.1:6379> hsetnx hash3 id 2 name qiu
(error ERR wrong number of arguments for 'hsetnx' command
#field 不存在 127.0.0.1:6379> hsetnx hash3 name qiu (integer 1 #field已存在 127.0.0.1:6379> hsetnx hash3 id 3 (integer 0 127.0.0.1:6379>

 

2、获取hash key 对应字段的值

HGET hash field

可用版本: >= 2.0.0
时间复杂度: O(1

返回哈希表中给定域的值。

127.0.0.1:6379> hget hash2 id "1" 127.0.0.1:6379> hget hash2 name "janzen" 127.0.0.1:6379> hget hash2 age "18" 127.0.0.1:6379> hget hash3 id "2" 127.0.0.1:6379> hget hash3 name "qiu"

 

3、删除一个hash key的对应字段

HDEL key field [field …]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

127.0.0.1:6379> hdel hash3 id (integer 1 127.0.0.1:6379> hdel hash3 id name (integer 1

 

4、批量设置hash key 的多个filed和value

HMSET key field value [field value …]

同时将多个 field-value (域-值对设置到哈希表 key 中。

如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作

127.0.0.1:6379> hmset hash3 id 2 name qiu age 20 sex man number 970203 OK

 

5、获取hash中指定字段的值

HMGET key field [field …]

返回哈希表 key 中,一个或多个给定域的值。

nil 值。

key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。

127.0.0.1:6379> hmget hash3 id name number 1 "2" 2 "qiu" 3 "970203" 127.0.0.1:6379> hmget hash2 id name number 1 "1" 2 "janzen" 3 "159159"

 

6、获取hash中的所有字段名field

HKEYS key

返回哈希表 key 中的所有field

127.0.0.1:6379> hkeys hash2 1 "id" 2 "name" 3 "age" 4 "sex" 5 "number" 127.0.0.1:6379> hkeys hash3 1 "id" 2 "name" 3 "age" 4 "sex" 5 "number"

 

7、获取指定hash所有的value

HVALS key

返回哈希表 key 中所有field的值。

127.0.0.1:6379> hvals hash2 1 "1" 2 "janzen" 3 "18" 4 "man" 5 "159159" 127.0.0.1:6379> hvals hash3 1 "2" 2 "qiu" 3 "20" 4 "man" 5 "970203"

 

8、获取指定hash的所有field和value值

HGETALL key

返回哈希表 key 中,所有的域和值。

127.0.0.1:6379> hgetall hash2 1 "id" 2 "1" 3 "name" 4 "janzen" 5 "age" 6 "18" 7 "sex" 8 "man" 9 "number" 10 "159159" 127.0.0.1:6379> hgetall hash3 1 "id" 2 "2" 3 "name" 4 "qiu" 5 "age" 6 "20" 7 "sex" 8 "man" 9 "number" 10 "970203"

 

9、删除hash

HDEL key field [field …]

删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。

127.0.0.1:6379> hgetall hash3 1 "id" 2 "2" 3 "name" 4 "qiu" 5 "age" 6 "20" 7 "sex" 8 "man" 9 "number" 10 "970203" 127.0.0.1:6379> hdel hash3 id (integer 1 127.0.0.1:6379> hgetall hash3 1 "name" 2 "qiu" 3 "age" 4 "20" 5 "sex" 6 "man" 7 "number" 8 "970203" 127.0.0.1:6379> hdel hash3 name age addr (integer 2 127.0.0.1:6379> hgetall hash3 1 "sex" 2 "man" 3 "number" 4 "970203"

 

使用DEL删除hash key

127.0.0.1:6379> hgetall hash3 1 "sex" 2 "man" 3 "number" 4 "970203" 127.0.0.1:6379> del hash3 (integer 1 127.0.0.1:6379> hgetall hash3 (empty list or set 127.0.0.1:6379> exists hash3 (integer 0 127.0.0.1:6379>

 

编程笔记 » [Redis]数据类型介绍

赞同 (122) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽