Redis学习(二)哈希

一、概述

我们可以将Redis中的Hash类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。

二、相关命令

1、赋值

    示例:hset hash field val

    用法:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

                如果字段已经存在于哈希表中,旧值将被覆盖。

    返回:如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。 如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。

    示例:hsetnx hash field val

    用法:如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。

               如果字段已经存在于哈希表中,操作无效。

               如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。

    返回:设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行(与hset hash field val的差异),返回 0 。

    示例:hmset hash field val

    用法:用于同时将多个 field-value (字段-值)对设置到哈希表中。

                此命令会覆盖哈希表中已存在的字段。

                如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

    返回:如果命令执行成功,返回 OK 。

    示例:hkeys hash

    用法:用于获取哈希表中的所有域(field)。

    返回:包含哈希表中所有域(field)列表。 当 key 不存在时,返回一个空列表。

127.0.0.1:6379> hmset myhash field1 1 filed2 2 filed3 3
OK
127.0.0.1:6379> hset myhash filed4 4
(integer) 1
127.0.0.1:6379> hsetnx myhash field2 66
(integer) 1
127.0.0.1:6379> hsetnx myhash filed2 666
(integer) 0
127.0.0.1:6379> hkeys myhash
1) "name"
2) "field1"
3) "filed2"
4) "filed3"
5) "filed4"
6) "field2"
127.0.0.1:6379>

2、取值

    示例:hget hash field

    用法:用于返回哈希表中指定字段的值.

    返回:返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

    示例:hmget hash field1 ..fieldn 

    用法:用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。

    返回:一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

    示例:hvals key

    用法:返回哈希表所有域(field)的值。

    返回:一个包含哈希表中所有域(field)值的列表。 当 key 不存在时,返回一个空表。

    

    示例:hexists key

    用法:用于查看哈希表的指定字段是否存在。

    返回:如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

    示例:hgetall key

    用法:用于返回哈希表中,所有的字段和值。在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。

    返回:以列表形式返回哈希表的字段及字段值。 若 key 不存在,返回空列表。

    示例:hlen hash

    用法:用于查看哈希表中字段的数量。

    返回:返回哈希表中字段的数量,如果key不存在,返回0。

    示例:hlen hash

    用法:用于查看哈希表中字段的数量。

    返回:返回哈希表中字段的数量,如果key不存在,返回0。

  

127.0.0.1:6379> hkeys myhash                    #得到的是标签值
1) "name"
2) "field1"
3) "filed2"
4) "filed3"
5) "filed4"
6) "field2"
127.0.0.1:6379> HVALS myhash                    得到标签对应的值
1) "jack"
2) "1"
3) "2"
4) "3"
5) "4"
6) "66"
127.0.0.1:6379> hget myhash name                获取哈希表对应标签的值
"jack"
127.0.0.1:6379> hmget myhash name field1        获取多个标签的值
1) "jack"
2) "1"
127.0.0.1:6379> HEXISTS myhash name
(integer) 1
127.0.0.1:6379> hgetall myhash                 得到标签值+对应的值
 1) "name"
 2) "jack"
 3) "field1"
 4) "1"
 5) "filed2"
 6) "2"
 7) "filed3"
 8) "3"
 9) "filed4"
10) "4"
11) "field2"
12) "66"
127.0.0.1:6379> hlen myhash                  统计标签个数
(integer) 6
127.0.0.1:6379>

3、运算

    示例:hincrby hash field num

    用法:用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。

    返回:incr之后,字段的值。

    示例:hincrbyfloat hash field num

    用法:用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。

    返回:incr之后,字段的值。

127.0.0.1:6379> hincrby myhash field2 -6
(integer) 60
127.0.0.1:6379> hincrby myhash field2 6
(integer) 66
127.0.0.1:6379> hincrbyfloat myhash field2 6.6
"72.599999999999994"
127.0.0.1:6379>
发布了22 篇原创文章 · 获赞 9 · 访问量 8818

猜你喜欢

转载自blog.csdn.net/ljm_c_bok/article/details/104841393