Redis 避不开的五种数据结构--String

Redis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几种数据结构,主要覆盖了它们各自的定义、基本用法与相关要点。

字符串类型

字符串是 Redis 中的最基础的数据结构,我们保存到 Redis 中的 key,也就是键,就是字符串结构的。除此之外,Redis 中其它数据结构也是在字符串的基础上设计的,可见字符串结构对于 Redis 是多么重要。

Redis 中的字符串结构可以保存多种数据类型,如:简单的字符串、JSON、XML、二进制等,但有一点要特别注意:在 Redis 中字符串类型的值最大只能保存 512 MB。

Redis 避不开的五种数据结构--String

命令

下面通过命令了解一下对字符串类型的操作:

1.设置值

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

Redis 避不开的五种数据结构--String

set 命令有几个非必须的选项,下面我们看一下它们的具体说明:

  • EX seconds:为键设置秒级过期时间
  • PX milliseconds:为键设置毫秒级过期时间
  • NX:键必须不存在,才可以设置成功,用于添加
  • XX:键必须存在,才可以设置成功,用于更新

Redis 避不开的五种数据结构--String

set 命令带上可选参数 NX 和 XX 在实际开发中的作用与 setnx 和 setxx 命令相同。我们知道 setnx 命令只有当 key 不存在的时候才能设置成功,换句话说,也就是同一个 key 在执行 setnx 命令时,只能成功一次,并且由于 Redis 的单线程命令处理机制,即使多个客户端同时执行 setnx 命令,也只有一个客户端执行成功。所以,基于 setnx 这种特性,setnx 命令可以作为分布式锁的一种解决方案

而 setxx 命令则可以在安全性比较高的场景中使用,因为 set 命令执行时,会执行覆盖的操作,而 setxx 在更新 key 时可以确保该 key 已经存在了,所以为了保证 key 中数据类型的正确性,可以使用 setxx 命令。

2.获取值

get key

Redis 避不开的五种数据结构--String

3.批量设置值

mset key value

Redis 避不开的五种数据结构--String

4.批量获取值

mget key

Redis 避不开的五种数据结构--String

如果有些键不存在,那么它的值将为 nil,也就是空,并且返回结果的顺序与传入时相同。

Redis 避不开的五种数据结构--String

5.计数

incr key

incr 命令用于对值做自增操作,返回的结果分为 3 种情况:

  • 如果值不是整数,那么返回的一定是错误
  • 如果值是整数,那么返回自增后的结果
  • 如果键不存在,那么就会创建此键,然后按照值为 0 自增, 就是返回 1Redis 避不开的五种数据结构--String

除了有 incr 自增命令外,Redis 中还提供了其它对数字处理的命令。例如:

decr key 自减

incrby kek increment 自增指定数字

decrby key decrement 自减指定数字

incrbyfloat key increment 自增浮点数

Redis 避不开的五种数据结构--String

6.追加值

append key value

append 命令可以向字符串尾部追加值。

Redis 避不开的五种数据结构--String

7.字符串长度

strlen key

Redis 避不开的五种数据结构--String

由于每个中文占用 3 个字节,所以 jilinwula 这个键,返回是字符串长度为 12,而不是 4。

8.设置并返回原值

getset key value

Redis 避不开的五种数据结构--String

9.设置指定位置的字符

setrange key offeset value

Redis 避不开的五种数据结构--String

10.获取部分字符串

getrange key start end

Redis 避不开的五种数据结构--String

内部编码

在 Redis 中字符串类型的内部编码有 3 种:

  • int:8 个字节的长整型
  • embstr:小于等于 39 个字节的字符串
  • raw:大于 39 个字节的字符串

Redis 避不开的五种数据结构--String