加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 海宁网 (https://www.hainingwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Redis避不开的五种数据结构

发布时间:2018-10-30 17:53:33 所属栏目:编程 来源:编辑部的故事
导读:Redis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几
副标题[/!--empirenews.page--]

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

字符串类型

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

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

Redis避不开的五种数据结构

命令

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

1.设置值

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

Redis避不开的五种数据结构

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

EX seconds:为键设置秒级过期时间

PX milliseconds:为键设置毫秒级过期时间

NX:键必须不存在,才可以设置成功,用于添加

XX:键必须存在,才可以设置成功,用于更新

Redis避不开的五种数据结构

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

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

2.获取值

get key

Redis避不开的五种数据结构

3.批量设置值

mset key value

Redis避不开的五种数据结构

4.批量获取值

mget key

Redis避不开的五种数据结构

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

Redis避不开的五种数据结构

5.计数

incr key

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

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

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

decr key 自减

incrby kek increment 自增指定数字

decrby key decrement 自减指定数字

incrbyfloat key increment 自增浮点数

Redis避不开的五种数据结构

6.追加值

append key value

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

Redis避不开的五种数据结构

7.字符串长度

strlen key

Redis避不开的五种数据结构

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

8.设置并返回原值

getset key value

Redis避不开的五种数据结构

9.设置指定位置的字符

setrange key offeset value

Redis避不开的五种数据结构

10.获取部分字符串

getrange key start end

Redis避不开的五种数据结构

时间复杂度

在 Redis 中执行任何命令时,都有相应的时间复杂度,复杂度越高也就越费时间,所以在执行 Redis 中的命令时,如果要执行的命令复杂度越高,就越要慎重。下面是字符串命令时间复杂度类型表:

内部编码

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

  • int:8 个字节的长整型
  • embstr:小于等于 39 个字节的字符串
  • raw:大于 39 个字节的字符串
Redis避不开的五种数据结构 

哈希类型

大部分语言基本都提供了哈希类型,如 Java 语言中的 Map 类型及 Python 语言中的字典类型等等。虽然语言不同,但它们基本使用都是一样的,也就是都是键值对结构的。例如:

value={{field1, value1}

通过下图可以直观感受一下字符串类型和哈希类型的区别:

Redis避不开的五种数据结构 

Redis 中哈希类型都是键值对结构的,所以要特别注意这里的 value 并不是指 Redis 中 key 的 value,而是哈希类型中的 field 所对应的 value。

命令

下面我们还是和介绍字符串类型一样,了解一下 Redis 中哈希类型的相关命令。

1.设置值

(编辑:财气旺网 - 海宁网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!