Redis系列 (二)数据类型


Redis是一种基于键值对(Key-Value)的NoSQL数据库
基本上就是一个接受并处理来自客户端请求的非阻塞、I/O复用的TCP服务器。
使用协议:RESP(REdis Serialization Protocol,Redis序列化协议)

  • redis-cli redis客户端工具
    可以使用redis-cli连接到redis,redis-cli默认情况会连接到127.0.0.1:6379上运行的redis实例。
1、 字符串
命令

① 使用SET命令设置一个字符串

> SET "key" "value"
ok

② 使用GET命令获取一个字符串

> GET "key"  
value  
# get一个不存在的键,会返回(nil)

③ 使用STRLEN命令返回字符串的长度

> STRLEN "key"  
(integer) 5
# 对于不存在的键,会返回0

④ 使用APPEND命令可以向一个键的字符串值末尾追加字符串

> APPEND "key" "001"  
(integer) 8  

> GET "key"  
value001
#如果key不存在,redis会先创建一个空字符串和key关联,再执行追加

⑤ 使用SETRANGE命令可以覆盖字符串值的一部分

> SETRANGE "key" 5 "110"  
(integer) 8   

> GET "key"  
value110
# redis中,字符串的偏移是从0开始

⑥ 使用EXIST命令测试键的存在性

⑦ SETNX命令,仅在键不存在时设置键的值。成功,返回1;如果键已经存在,返回0,且不覆盖原来的值。

> SETNX "testKey" "value"
(integer) 1  
# 相当于 SET 命令的NX参数
127.0.0.1:6379> SET "testKey" "value2" NX
(nil)
# SET的XX参数,仅在键存在的时候覆盖值
127.0.0.1:6379> SET "testKey" "value2" XX
OK

⑧ 使用MSET和MGET命令来一次性地设置和获取多个键的值。整个操作是原子性的。

> MSET "key1" "value1" "key2" "value2"
OK
> MGET "key2" "key2"
1) "value2"
2) "value2"
编码

Redis使用三种不同的编码方式来存储字符串对象,并根据每个字符串值自动决定所使用的编码方式:

  • int 用于能够使用64位有符号整数表示的字符串。
  • embstr 用于长度小于或等于44字节的字符串;这种类型的编码在内存使用和性能方面更有效率。
  • raw 用于长度大于44字节的字符串

可以使用OBJECT命令查看Redis值的编码

> OBJECT ENCODING "key1"
"embstr"
2、 列表

redis中列表和双向列表类似。

命令

① 使用LPUSH向列表左端插入数据

> LPUSH "listKey" "value1" "value2" "value3"
(integer) 3

② 获取列表中的所有数据

> LRANGE "listKey" 0 -1
1) "value3"
2) "value2"
3) "value1"

redis中,列表索引,从左到右是0~N-1,从右到左是-1 ~ -N
0~-1代表整个列表

③ 在列表的指定位置插入数据

> LINSERT "listKey" AFTER "value2" "newValue"
(integer) 4
> LRANGE "listKey" 0 -1
1) "value3"
2) "value2"
3) "newValue"
4) "value1"

# LINSERT key BEFORE value newValue
# 在value之前插入数据

④ 使用LINDEX获取列表指定索引位置的值

> LINDEX "listKey" 2
"newValue"

⑤ RPUSH 将元素添加到列表的右边

提示:LPUSH、RPUSH和LINSERT会返回插入后列表的长度,在向列表插入元素前,无需为一个键初始化一个空列表。也不需要删除值为空列表的键,redis会自动回收这种键。

⑥ LPUSHX、RPUSHX命令仅在列表存在元素时候,执行插入
⑦ LPOP、RPOP命令从列表中删除一个元素,从列表的左端、右端移除第一个元素,并返回移除的值

> LPOP "listKey"
"value3"

> LRANGE "listKey" 0 -1
1) "value2"
2) "newValue"
3) "value1"

#如果对不存在的键执行LPOP或RPOP时,返回(nil)

⑧ LTRIM 删除列表中除了start和end范围的所有元素

> LTRIM listKey 1 -1
OK

> LRANGE listKey 0 -1
1) "newValue"
2) "value1"

⑨ LSET 指定索引位置处元素的值

> LSET listKey 0 "oldValue"
OK

> LRANGE listKey 0 -1
1) "oldValue"
2) "value1"
阻塞列表

LPOP和RPOP命令有对应的阻塞版本:BLPOP和BRPOP。当列表为空的时候,阻塞版本会将客户端阻塞。需要设置超时时间,以秒为单位,表示最长等待几秒。0表示永久等待。
这个特性可以用在于生产者-消费者等任务调度场景。

编码

Redis内部使用quicklist存储列表对象,quicklist的每个节点是一个ziplist。
ziplist本身也是一个能维持数据项先后顺序的列表,而且内存是紧凑的。

一个包含2个节点的quicklist,如果每个节点的ziplist包含了2个数据项,这个列表对外表现的就是4个数据项。

  • list-max-ziplist-size 一个列表条目中一个内部节点的最大大小
  • list-compress-depth 列表压缩策略,表示quicklist两端不被压缩的节点个数。
3、哈希(hash)类型

以键值对的形式存储数据。

命令

① HMSET 设置hash字段(覆盖原有的值)

> HMSET hashKey field1 value1 field2 value2
OK

② HMGET 获取一个哈希中的多个字段对应的值

> HMGET hashKey field1 field2
1) "value1"
2) "value2"
# 不存在,返回 (nil)

③ HGET 获取一个哈希中的某个字段的值

> HMGET hashKey field1 
1) "value1"
# 不存在,返回 (nil)

④ HEXISTS 测试一个哈希中是否存在某个字段

> HEXISTS hashKey field1
(integer) 1

> HEXISTS hashKey test
(integer) 0

⑤ HGETALL 获取一个哈希中的所有字段和值

> HGETALL hashKey
1) "field1"
2) "value1"
3) "field2"
4) "value2"

⑥ HSET 设置一个字段的值(覆盖原有的值)
⑦ HDEL删除字段

> HDEL hashKey field1
(integer) 1

> HGETALL hashKey
1) "field2"
2) "value2"

HSET和HMSET在添加字段的时候,如果redis中不存在这个key,会先初始化一个空的hash,绑定到key上,再添加字段。当hash为空的时候,Redis也会自动删除hash.

⑧ HSETNX 仅在字段不存在的情况下才设置字段的值。

一个哈希最多能容纳2^23-1个字段,如果哈希字段非常多,执行HGETALL命令可能会阻塞服务器。

⑨ HSCAN 命令可以增量地获取所有字段和值。

# HSCAN key cursor [MATCH pattern] [COUNT number]  
> HSCAN hashKey 0 COUNT 5
1) "0"
2)  1) "field1"
    2) "value1"
    3) "field2"
    4) "value2"
    ...  
# 第一个1)返回的是新的游标,如果为0,说明遍历完成
# 第一个2)返回的是hash对应的数据(键和值)

注意:HSCAN命令的MATCH是匹配哈希里面的键的内容,COUNT设置了不一定有效,只有在hash里字段足够多的时候,才生效。

编码

Redis在内部使用两种编码存储哈希对象

  • ziplist 对于长度小于配置中 hash-max-ziplist-entries(默认512)选项配置的值,且所有元素的大小都小于配置中hash-max-ziplist-value(默认64字节)选项配置的值的hash,采用此编码.
  • hashtable 不适用ziplist的,默认使用此编码
4、集合(set)类型

set类型是由唯一、无序对象组成的集合(collection)。经常用于测试某个诚意是否在集合中、重复项删除和集合运算(并、交、差)。

命令

① SADD 设置集合元素

> SADD setKey value1 value2
(integer) 2

② SISMEMBER 测试一个元素是否在集合中

> SISMEMBER setKey value1
(integer) 1

> SISMEMBER setKey test
(integer) 0

③ SMEMBERS获取集合中的元素

> SMEMBERS setKey
1) "value1"
2) "value2"

④ SREM 从集合中删除元素

> SREM setKey value2
(integer) 1

> SMEMBERS setKey
1) "value1"

⑤ SCARD 获取集合中成员的数量

> SCARD setKey
(integer) 1

添加时,如果redis中不存在这个key,会先初始化一个空的集合,绑定到key上,再添加字段。当集合为空的时候,Redis也会自动删除集合.

一个集合最多可以容纳2^23-1个成员。同样,和HGETALL类似,不推荐SMEMBERS命令列出集合中的所有元素。使用SSCAN命令,遍历集合。和哈希类型里的HSCAN命令用法类似。

编码

redis内部使用两种编码方式来存储集合对象

  • intset 元素都是整数,且元素个数小于配置中set-max-intset-entries选项设置值的集合,采用此编码。节省占用空间
  • hashtable: intset不适用时的默认编码。
5、有序集合(sorted set)类型

有序的集合,集合的每个元素都拥有一个可用于排序的权重,可以按顺序从集合中获取元素。

命令

① ZADD 集合添加元素

> ZADD zKey 1 value1 3 value3 2 value2
(integer) 3

② ZREVRANGE 按顺序获取集合元素

> ZREVRANGE zKey 0 -1
1) "value3"
2) "value2"
3) "value1"

> ZREVRANGE zKey 0 -1 WITHSCORES
1) "value3"
2) "3"
3) "value2"
4) "2"
5) "value1"
6) "1"

③ ZINCRBY 为集合元素增加权重

> ZINCRBY zKey 2 value2
"4"

> ZREVRANGE zKey 0 -1 WITHSCORES
1) "value2"
2) "4"
3) "value3"
4) "3"
5) "value1"
6) "1"

④ ZREVRANK 获取元素的位置(当前排第几,从0开始)

> ZREVRANK zKey value2
(integer) 0

⑤ ZSCORE 获取元素的权重

> ZSCORE zKey value2
"4"

⑥ ZUNIONSTORE 合并两个集合

127.0.0.1:6379> ZUNIONSTORE zkeyHehe 2 zKey zKey2
(integer) 3

127.0.0.1:6379> ZRANGE zkeyHehe 0 -1 WITHSCORES
1) "value1"
2) "2"
3) "value3"
4) "3"
5) "value2"
6) "4"
编码

Redis在内部使用两种编码方式存储有序集合对象

  • ziplist 对于长度小于配置中 zset-max-ziplist-entries选项配置的值,且所有元素的大小都小于配置中zset-max-ziplist-value选项配置的值的有序集合,采用此编码。用于节省较小集合所占用的空间
  • skiplist ziplist不适合时使用的默认编码
    skiplist 每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的
6、HypperLogLog类型

Redis中,使用HypperLogLog(HLL)来进行唯一计数。不需要获取数据集的内容,只想要数量。(比如,获取网站的访客数量)

命令

① PFADD 添加一个值到HyperLogLog

> PFADD visitor 001 002 001
(integer) 1

② 使用PFCOUNT获取不同值的数量

> PFCOUNT visitor
(integer) 2

③ PFMERGE 合并集合

> PFADD visitor2 002 003 004
(integer) 1
> PFMERGE visitorHehe visitor visitor2
OK
> PFCOUNT visitorHehe
(integer) 4
编码

HLL实际上是被当作字符串存储的。
在Redis内部,使用两种方式来存储HLL对象

  • 稀疏(Sparse) 对于长度小于配置中hll-sparse-max-bytes选项设置的值(默认3000)的HLL对象,采用此编码。稀疏表示方式的存储效率高,但可能会消耗更多CPU资源.
  • 稠密(Dense)稀疏方式不适用时的默认编码。
7、Geo类型

Redis3.2版本开始正式引入了Geo(地理位置)相关API。用于支持存储和查下地理位置相关场景中的坐标。

命令

① GEOADD 添加数据

> GEOADD geoKey 111.11 40.11 member1 122.22 30.22 member2
(integer) 2

② GEOPOS 获取指定成员坐标

> GEOPOS geoKey member1
1) 1) "111.11000150442123413"
   2) "40.10999920500099591"

③ 取货距离某个经纬度指定距离的成员

# 获取距离112.11 31.22 900km以内的地址
> GEORADIUS geoKey 112.11 31.22 990 km
1) "member2"

④ 获取两个成员之间的距离

> GEODIST geoKey member1 member2
"1491034.7409"
其他

当通过GEOADD设置坐标的时候,这些坐标会被内部转换成一个52位的GEOHASH。GEOHASH是一个被广泛接受的地理坐标编码系统。存储在GEO中的坐标和GEOPOS命令返回的坐标之间可能存在细微差别。

redis基本上就是一个接受并处理来自客户端请求的非阻塞、I/O复用的TCP服务器。
使用协议:RESP(REdis Serialization Protocol,Redis序列化协议)

  • redis-cli redis客户端工具
    可以使用redis-cli连接到redis,redis-cli默认情况会连接到127.0.0.1:6379上运行的redis实例。
一、数据类型
1、 字符串
命令

① 使用SET命令设置一个字符串

> SET "key" "value"
ok

② 使用GET命令获取一个字符串

> GET "key"  
value  
# get一个不存在的键,会返回(nil)

③ 使用STRLEN命令返回字符串的长度

> STRLEN "key"  
(integer) 5
# 对于不存在的键,会返回0

④ 使用APPEND命令可以向一个键的字符串值末尾追加字符串

> APPEND "key" "001"  
(integer) 8  

> GET "key"  
value001
#如果key不存在,redis会先创建一个空字符串和key关联,再执行追加

⑤ 使用SETRANGE命令可以覆盖字符串值的一部分

> SETRANGE "key" 5 "110"  
(integer) 8   

> GET "key"  
value110
# redis中,字符串的偏移是从0开始

⑥ 使用EXIST命令测试键的存在性

⑦ SETNX命令,仅在键不存在时设置键的值。成功,返回1;如果键已经存在,返回0,且不覆盖原来的值。

> SETNX "testKey" "value"
(integer) 1  
# 相当于 SET 命令的NX参数
127.0.0.1:6379> SET "testKey" "value2" NX
(nil)
# SET的XX参数,仅在键存在的时候覆盖值
127.0.0.1:6379> SET "testKey" "value2" XX
OK

⑧ 使用MSET和MGET命令来一次性地设置和获取多个键的值。整个操作是原子性的。

> MSET "key1" "value1" "key2" "value2"
OK
> MGET "key2" "key2"
1) "value2"
2) "value2"
编码

Redis使用三种不同的编码方式来存储字符串对象,并根据每个字符串值自动决定所使用的编码方式:

  • int 用于能够使用64位有符号整数表示的字符串。
  • embstr 用于长度小于或等于44字节的字符串;这种类型的编码在内存使用和性能方面更有效率。
  • raw 用于长度大于44字节的字符串

可以使用OBJECT命令查看Redis值的编码

> OBJECT ENCODING "key1"
"embstr"
2、 列表

redis中列表和双向列表类似。

命令

① 使用LPUSH向列表左端插入数据

> LPUSH "listKey" "value1" "value2" "value3"
(integer) 3

② 获取列表中的所有数据

> LRANGE "listKey" 0 -1
1) "value3"
2) "value2"
3) "value1"

redis中,列表索引,从左到右是0~N-1,从右到左是-1 ~ -N
0~-1代表整个列表

③ 在列表的指定位置插入数据

> LINSERT "listKey" AFTER "value2" "newValue"
(integer) 4
> LRANGE "listKey" 0 -1
1) "value3"
2) "value2"
3) "newValue"
4) "value1"

# LINSERT key BEFORE value newValue
# 在value之前插入数据

④ 使用LINDEX获取列表指定索引位置的值

> LINDEX "listKey" 2
"newValue"

⑤ RPUSH 将元素添加到列表的右边

提示:LPUSH、RPUSH和LINSERT会返回插入后列表的长度,在向列表插入元素前,无需为一个键初始化一个空列表。也不需要删除值为空列表的键,redis会自动回收这种键。

⑥ LPUSHX、RPUSHX命令仅在列表存在元素时候,执行插入
⑦ LPOP、RPOP命令从列表中删除一个元素,从列表的左端、右端移除第一个元素,并返回移除的值

> LPOP "listKey"
"value3"

> LRANGE "listKey" 0 -1
1) "value2"
2) "newValue"
3) "value1"

#如果对不存在的键执行LPOP或RPOP时,返回(nil)

⑧ LTRIM 删除列表中除了start和end范围的所有元素

> LTRIM listKey 1 -1
OK

> LRANGE listKey 0 -1
1) "newValue"
2) "value1"

⑨ LSET 指定索引位置处元素的值

> LSET listKey 0 "oldValue"
OK

> LRANGE listKey 0 -1
1) "oldValue"
2) "value1"
阻塞列表

LPOP和RPOP命令有对应的阻塞版本:BLPOP和BRPOP。当列表为空的时候,阻塞版本会将客户端阻塞。需要设置超时时间,以秒为单位,表示最长等待几秒。0表示永久等待。
这个特性可以用在于生产者-消费者等任务调度场景。

编码

Redis内部使用quicklist存储列表对象,quicklist的每个节点是一个ziplist。
ziplist本身也是一个能维持数据项先后顺序的列表,而且内存是紧凑的。

一个包含2个节点的quicklist,如果每个节点的ziplist包含了2个数据项,这个列表对外表现的就是4个数据项。

  • list-max-ziplist-size 一个列表条目中一个内部节点的最大大小
  • list-compress-depth 列表压缩策略,表示quicklist两端不被压缩的节点个数。
3、哈希(hash)类型

以键值对的形式存储数据。

命令

① HMSET 设置hash字段(覆盖原有的值)

> HMSET hashKey field1 value1 field2 value2
OK

② HMGET 获取一个哈希中的多个字段对应的值

> HMGET hashKey field1 field2
1) "value1"
2) "value2"
# 不存在,返回 (nil)

③ HGET 获取一个哈希中的某个字段的值

> HMGET hashKey field1 
1) "value1"
# 不存在,返回 (nil)

④ HEXISTS 测试一个哈希中是否存在某个字段

> HEXISTS hashKey field1
(integer) 1

> HEXISTS hashKey test
(integer) 0

⑤ HGETALL 获取一个哈希中的所有字段和值

> HGETALL hashKey
1) "field1"
2) "value1"
3) "field2"
4) "value2"

⑥ HSET 设置一个字段的值(覆盖原有的值)
⑦ HDEL删除字段

> HDEL hashKey field1
(integer) 1

> HGETALL hashKey
1) "field2"
2) "value2"

HSET和HMSET在添加字段的时候,如果redis中不存在这个key,会先初始化一个空的hash,绑定到key上,再添加字段。当hash为空的时候,Redis也会自动删除hash.

⑧ HSETNX 仅在字段不存在的情况下才设置字段的值。

一个哈希最多能容纳2^23-1个字段,如果哈希字段非常多,执行HGETALL命令可能会阻塞服务器。

⑨ HSCAN 命令可以增量地获取所有字段和值。

# HSCAN key cursor [MATCH pattern] [COUNT number]  
> HSCAN hashKey 0 COUNT 5
1) "0"
2)  1) "field1"
    2) "value1"
    3) "field2"
    4) "value2"
    ...  
# 第一个1)返回的是新的游标,如果为0,说明遍历完成
# 第一个2)返回的是hash对应的数据(键和值)

注意:HSCAN命令的MATCH是匹配哈希里面的键的内容,COUNT设置了不一定有效,只有在hash里字段足够多的时候,才生效。

编码

Redis在内部使用两种编码存储哈希对象

  • ziplist 对于长度小于配置中 hash-max-ziplist-entries(默认512)选项配置的值,且所有元素的大小都小于配置中hash-max-ziplist-value(默认64字节)选项配置的值的hash,采用此编码.
  • hashtable 不适用ziplist的,默认使用此编码
4、集合(set)类型

set类型是由唯一、无序对象组成的集合(collection)。经常用于测试某个诚意是否在集合中、重复项删除和集合运算(并、交、差)。

命令

① SADD 设置集合元素

> SADD setKey value1 value2
(integer) 2

② SISMEMBER 测试一个元素是否在集合中

> SISMEMBER setKey value1
(integer) 1

> SISMEMBER setKey test
(integer) 0

③ SMEMBERS获取集合中的元素

> SMEMBERS setKey
1) "value1"
2) "value2"

④ SREM 从集合中删除元素

> SREM setKey value2
(integer) 1

> SMEMBERS setKey
1) "value1"

⑤ SCARD 获取集合中成员的数量

> SCARD setKey
(integer) 1

添加时,如果redis中不存在这个key,会先初始化一个空的集合,绑定到key上,再添加字段。当集合为空的时候,Redis也会自动删除集合.

一个集合最多可以容纳2^23-1个成员。同样,和HGETALL类似,不推荐SMEMBERS命令列出集合中的所有元素。使用SSCAN命令,遍历集合。和哈希类型里的HSCAN命令用法类似。

编码

redis内部使用两种编码方式来存储集合对象

  • intset 元素都是整数,且元素个数小于配置中set-max-intset-entries选项设置值的集合,采用此编码。节省占用空间
  • hashtable: intset不适用时的默认编码。
5、有序集合(sorted set)类型

有序的集合,集合的每个元素都拥有一个可用于排序的权重,可以按顺序从集合中获取元素。

命令

① ZADD 集合添加元素

> ZADD zKey 1 value1 3 value3 2 value2
(integer) 3

② ZREVRANGE 按顺序获取集合元素

> ZREVRANGE zKey 0 -1
1) "value3"
2) "value2"
3) "value1"

> ZREVRANGE zKey 0 -1 WITHSCORES
1) "value3"
2) "3"
3) "value2"
4) "2"
5) "value1"
6) "1"

③ ZINCRBY 为集合元素增加权重

> ZINCRBY zKey 2 value2
"4"

> ZREVRANGE zKey 0 -1 WITHSCORES
1) "value2"
2) "4"
3) "value3"
4) "3"
5) "value1"
6) "1"

④ ZREVRANK 获取元素的位置(当前排第几,从0开始)

> ZREVRANK zKey value2
(integer) 0

⑤ ZSCORE 获取元素的权重

> ZSCORE zKey value2
"4"

⑥ ZUNIONSTORE 合并两个集合

127.0.0.1:6379> ZUNIONSTORE zkeyHehe 2 zKey zKey2
(integer) 3

127.0.0.1:6379> ZRANGE zkeyHehe 0 -1 WITHSCORES
1) "value1"
2) "2"
3) "value3"
4) "3"
5) "value2"
6) "4"
编码

Redis在内部使用两种编码方式存储有序集合对象

  • ziplist 对于长度小于配置中 zset-max-ziplist-entries选项配置的值,且所有元素的大小都小于配置中zset-max-ziplist-value选项配置的值的有序集合,采用此编码。用于节省较小集合所占用的空间
  • skiplist ziplist不适合时使用的默认编码
    skiplist 每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的
6、HypperLogLog类型

Redis中,使用HypperLogLog(HLL)来进行唯一计数。不需要获取数据集的内容,只想要数量。(比如,获取网站的访客数量)

命令

① PFADD 添加一个值到HyperLogLog

> PFADD visitor 001 002 001
(integer) 1

② 使用PFCOUNT获取不同值的数量

> PFCOUNT visitor
(integer) 2

③ PFMERGE 合并集合

> PFADD visitor2 002 003 004
(integer) 1
> PFMERGE visitorHehe visitor visitor2
OK
> PFCOUNT visitorHehe
(integer) 4
编码

HLL实际上是被当作字符串存储的。
在Redis内部,使用两种方式来存储HLL对象

  • 稀疏(Sparse) 对于长度小于配置中hll-sparse-max-bytes选项设置的值(默认3000)的HLL对象,采用此编码。稀疏表示方式的存储效率高,但可能会消耗更多CPU资源.
  • 稠密(Dense)稀疏方式不适用时的默认编码。
Geo类型

Redis3.2版本开始正式引入了Geo(地理位置)相关API。用于支持存储和查下地理位置相关场景中的坐标。

命令

① GEOADD 添加数据

> GEOADD geoKey 111.11 40.11 member1 122.22 30.22 member2
(integer) 2

② GEOPOS 获取指定成员坐标

> GEOPOS geoKey member1
1) 1) "111.11000150442123413"
   2) "40.10999920500099591"

③ 取货距离某个经纬度指定距离的成员

# 获取距离112.11 31.22 900km以内的地址
> GEORADIUS geoKey 112.11 31.22 990 km
1) "member2"

④ 获取两个成员之间的距离

> GEODIST geoKey member1 member2
"1491034.7409"
其他

当通过GEOADD设置坐标的时候,这些坐标会被内部转换成一个52位的GEOHASH。GEOHASH是一个被广泛接受的地理坐标编码系统。存储在GEO中的坐标和GEOPOS命令返回的坐标之间可能存在细微差别。

二、键管理
1、命令

① KEYS 获取所有的键

> KEYS *
 1) "visitor2"
 2) "listkey"
 ...

② SCAN 获取键(分页,用法同上的HSCAN和SSCAN)
③ DEL 删除一个或多个键

> DEL visitor2 listkey
(integer) 2

④ EXISTS 判断一个键是否存在

> EXISTS setKey
(integer) 1

⑤ TYPE 获取键的数据类型

> TYPE setKey
set

⑥ RENAME 重名名一个键

> RENAME setKey setKeyNew
OK

⑦ DBSIZE 获取键的个数

> DBSIZE
(integer) 14

Redis中的一个命令执行过程期间,所有服务器接收到的其他命令都必须等待被处理。
如果键过多,KEYS命令容易阻塞服务器,尽量SCAN类命令。
如果键中元素数量很大,DEL也会造成服务器阻塞。Redis4.0增加了UNLINK命令,用于删除,它是异步的,不会阻塞服务器。
RENAME 如果目标键已经存在,会将目标键删除,如上,DEL也会造成延迟。


[1] 黄鹏程,王左非 著,梅隆魁 译· Redis 4.x Cookbook中文版 : 电子工业出版社

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值