Redis避不开的五种数据结构
副标题[/!--empirenews.page--]
Redis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几种数据结构,主要覆盖了它们各自的定义、基本用法与相关要点。 字符串类型字符串是 Redis 中的最基础的数据结构,我们保存到 Redis 中的 key,也就是键,就是字符串结构的。除此之外,Redis 中其它数据结构也是在字符串的基础上设计的,可见字符串结构对于 Redis 是多么重要。 Redis 中的字符串结构可以保存多种数据类型,如:简单的字符串、JSON、XML、二进制等,但有一点要特别注意:在 Redis 中字符串类型的值最大只能保存 512 MB。 ![]() 命令 下面通过命令了解一下对字符串类型的操作: 1.设置值 set key value [EX seconds] [PX milliseconds] [NX|XX] ![]() set 命令有几个非必须的选项,下面我们看一下它们的具体说明: EX seconds:为键设置秒级过期时间 PX milliseconds:为键设置毫秒级过期时间 NX:键必须不存在,才可以设置成功,用于添加 XX:键必须存在,才可以设置成功,用于更新 ![]() set 命令带上可选参数 NX 和 XX 在实际开发中的作用与 setnx 和 setxx 命令相同。我们知道 setnx 命令只有当 key 不存在的时候才能设置成功,换句话说,也就是同一个 key 在执行 setnx 命令时,只能成功一次,并且由于 Redis 的单线程命令处理机制,即使多个客户端同时执行 setnx 命令,也只有一个客户端执行成功。所以,基于 setnx 这种特性,setnx 命令可以作为分布式锁的一种解决方案。 而 setxx 命令则可以在安全性比较高的场景中使用,因为 set 命令执行时,会执行覆盖的操作,而 setxx 在更新 key 时可以确保该 key 已经存在了,所以为了保证 key 中数据类型的正确性,可以使用 setxx 命令。 2.获取值 get key ![]() 3.批量设置值 mset key value ![]() 4.批量获取值 mget key ![]() 如果有些键不存在,那么它的值将为 nil,也就是空,并且返回结果的顺序与传入时相同。 ![]() 5.计数 incr key incr 命令用于对值做自增操作,返回的结果分为 3 种情况:
![]() 除了有 incr 自增命令外,Redis 中还提供了其它对数字处理的命令。例如: decr key 自减 incrby kek increment 自增指定数字 decrby key decrement 自减指定数字 incrbyfloat key increment 自增浮点数 ![]() 6.追加值 append key value append 命令可以向字符串尾部追加值。 ![]() 7.字符串长度 strlen key ![]() 由于每个中文占用 3 个字节,所以 jilinwula 这个键,返回是字符串长度为 12,而不是 4。 8.设置并返回原值 getset key value ![]() 9.设置指定位置的字符 setrange key offeset value ![]() 10.获取部分字符串 getrange key start end ![]() 时间复杂度 在 Redis 中执行任何命令时,都有相应的时间复杂度,复杂度越高也就越费时间,所以在执行 Redis 中的命令时,如果要执行的命令复杂度越高,就越要慎重。下面是字符串命令时间复杂度类型表: 内部编码 在 Redis 中字符串类型的内部编码有 3 种:
![]() 哈希类型大部分语言基本都提供了哈希类型,如 Java 语言中的 Map 类型及 Python 语言中的字典类型等等。虽然语言不同,但它们基本使用都是一样的,也就是都是键值对结构的。例如: value={{field1, value1} 通过下图可以直观感受一下字符串类型和哈希类型的区别: ![]() Redis 中哈希类型都是键值对结构的,所以要特别注意这里的 value 并不是指 Redis 中 key 的 value,而是哈希类型中的 field 所对应的 value。 命令 下面我们还是和介绍字符串类型一样,了解一下 Redis 中哈希类型的相关命令。 1.设置值 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |