加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Redis避不开的五种数据结构

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

我们看上图执行的命令知道,hset 命令也是有返回值的。如果 hset 命令设置成功,则返回 1,否则返回 0。除此之外 Redis 也为哈希类型提供了 hsetnx 命令。在前文对字符串的介绍中,我们知道 nx 命令只有当 key 不存在的时候,才能设置成功,同样的,hsetnx 命令在 field 不存在的时候,才能设置成功。

2.获取值

hget key field

Redis避不开的五种数据结构 

我们看 hget 命令和 get 有很大的不同,get 命令在获取的时候,只要写一个名字就可以了,而 hget 命令则要写两个名字,第一个名字是 key,第二个名字是 field。当然 key 或者 field 不存在时,返回的结果都是 nil。

3.删除 field

hdel key field [field ...]

Redis避不开的五种数据结构 

hdel 命令删除的时候,也会有返回值,并且这个返回就是成功删除 field 的个数。当 field 不存在时,并不会报错,而是直接返回 0。

4.计算 field 个数

hlen key

Redis避不开的五种数据结构 

hlen 命令返回的就是当前 key 中 field 的个数,如果 key 不存在,则返回 0。

5.批量设置或获取 field-value

hmget key field [field ...]

hmset key field value [field value ...]

Redis避不开的五种数据结构 

hmset 命令和 hmget 命令分别是批量设置和获取值的,hmset 命令没有什么要注意的,但 hmget 命令要特别注意,当我们获取一个不存在的 key 或者不存在的 field 时,Redis 并不会报错,而是返回 nil。并且有几个 field 不存在,则 Redis 返回几个 nil。

6.判断 field 是否存在

hexists key field

Redis避不开的五种数据结构 

当执行 hexists 命令时,如果当前 key 包括 field,则返回 1,否则返回 0。

7.获取所有 field

hkeys key

Redis避不开的五种数据结构 

8.获取所有 value

hvals key

Redis避不开的五种数据结构 

9.获取所有的 field-value

hgetall key

Redis避不开的五种数据结构 

hgetall 命令会返回当前 key 中的所有 field-value,并按照顺序依次返回。

10.计数

hincrby key field increment

hincrbyfloat key field increment

Redis避不开的五种数据结构 

hincrby 命令和 incrby 命令的使用功能基本一样,都是对值进行增量操作的,唯一不同的就是 incrby 命令的作用域是 key,而 hincrby 命令的作用域则是 field。

11.计算 value 的字符串长度

hstrlen key field

Redis避不开的五种数据结构 

hstrlen 命令返回的是当前 key 中 field 中字符串的长度,如果当前 key 中没有 field 则返回 0。

时间复杂度

内部编码

Redis 哈希类型的内部编码有两种,它们分别是:

  • ziplist(压缩列表):当哈希类型中元素个数小于 hash-max-ziplist-entries 配置(默认 512 个),同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现。
  • hashtable(哈希表):当上述条件不满足时,Redis 则会采用 hashtable 作为哈希的内部实现。

下面我们通过以下命令来演示一下 ziplist 和 hashtable 这两种内部编码。

当 field 个数比较少并且 value 也不是很大时候 Redis 哈希类型的内部编码为 ziplist:

Redis避不开的五种数据结构 

当 value 中的字节数大于 64 字节时(可以通过 hash-max-ziplist-value 设置),内部编码会由 ziplist 变成 hashtable。

Redis避不开的五种数据结构 

当 field 个数超过 512(可以通过 hash-max-ziplist-entries 参数设置),内部编码也会由 ziplist 变成 hashtable。

(编辑:云计算网_泰州站长网)

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

热点阅读