Redis系列学习笔记3 散列

散列

储存多个域值对。一个散列由多个域值对(field-value pair)组成,散列的域和值都可以是文字、整数、浮点数或者二进制数据。同一个散列里面的每个域必须是独一无二、各不相同的,而域的值则没有这一要求,换句话说,不同域的值可以是重复的。通过命令,用户可以对散列执行设置域值对、获取域的值、检查域是否存在等操作,也可以让 Redis 返回散列包含的所有域、所有值或者所有域值对。

基本操作

HSET key field value

在散列键 key 中关联给定的域值对 field 和 value 。如果域 field 之前没有关联值,那么命令返回 1 ;如果域 field 已经有关联值,那么命令用新值覆盖旧值,并返回 0 。

HGET key field

返回散列键 key 中,域 field 所关联的值。如果域 field 没有关联值,那么返回 nil 。

HSETNX key field value

如果散列键 key 中,域 field 不存在(也即是, 还没有与之相关联的值),那么关联给定的域值对 field 和 value 。如果域 field 已经有与之相关联的值,那么命令不做动作。

HEXISTS key field

查看散列键 key 中,给定域 field 是否存在:存在返回 1 ,不存在返回 0 。

HDEL key field [field …]

删除散列键 key 中的一个或多个指定域,以及那些域的值。不存在的域将被忽略。命令返回被成功删除的域值对数量。

HLEN key

返回散列键 key 包含的域值对数量。

批量操作

HMSET key field value [field value …]

在散列键 key 中关联多个域值对,相当于同时执行多个 HSET 。

HMGET key field [field …]

返回散列键 key 中,一个或多个域的值,相当于同时执行多个 HGET 。

HKEYS key

返回散列键 key 包含的所有域。

HVALS key

返回散列键 key 中,所有域的值。

HGETALL key

返回散列键 key 包含的所有域值对。

数字操作

HINCRBY key field increment

为散列键 key 中,域 field 的值加上整数增量 increment 。

HINCRBYFLOAT key field increment

为散列键 key 中,域 field 的值加上浮点数增量 increment 。

虽然 Redis 没有提供与以上两个命令相匹配的 HDECRBY 命令和 HDECRBYFLOAT 命令,但我们同样可以通过将 increment 设为负数来达到做减法的效果。

散列键和字符串键

散列操作 字符串操作
HSET SET
HGET GET
HSETNX SETNX
HDEL DEL(删除一个键,不仅限于字符串键)
HMSET MSET
HMGET MGET
HINCRBY INCRBY
HINCRBYFLOAT INCRBYFLOAT
HEXISTS EXISTS(检查一个键是否存在,不仅限于字符串键)

散列可以让我们将一些相关的信息储存在同一个地方,而不是直接分散地储存在整个数据库里面,这不仅方便了数据管理,还可以尽量避免误操作发生。

在一般情况下,保存相同数量的键值对信息,使用散列键比使用字符串键更节约内存。因为在数据库里面创建的每个键都带有数据库附加的管理信息(比如这个键的类型、最后一次被访问的时间等等),所以数据库里面的键越多,服务器在储存附加管理信息方面耗费的内存就越多,花在管理数据库键上的 CPU 也会越多。

除此之外,当散列包含的域值对数量比较少的时候,Redis 会自动使用一种占用内存非常少的数据结构来做散列的底层实现,在散列的数量比较多的时候,这一措施对减少内存有很大的帮助。

你可能感兴趣的:(Redis)