Redis学习(二)哈希

本文介绍了Redis中的哈希类型,将其视为String Key-Value的映射容器,适合存储值对象信息。文章详细讲解了哈希的赋值、取值及运算相关命令,包括hset、hsetnx、hmset、hget、hmget、hvals、hexists、hgetall、hlen、hincrby和hincrbyfloat等,涵盖了哈希表的创建、更新、查询和数值运算等操作。
摘要由CSDN通过智能技术生成

一、概述

我们可以将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>

 

一致性哈希算法是一种用于缓存或分布式系统中的数据分布策略。它通过将数据和节点都映射到一个虚拟的哈希环上,来解决增删节点时的数据迁移问题。具体来说,redis一致性哈希可以通过以下步骤实现: 1. 将所有的节点和数据映射到一个哈希环上。这个哈希环可以是一个0-2^32-1的整数空间,每个节点和数据都通过哈希函数映射到环上的一个点。 2. 当一个数据需要被存储或者查询时,通过计算该数据的哈希,找到离这个哈希最近的节点。这个节点就是负责处理该数据的节点。 3. 当增加或删除节点时,只有受影响的节点和数据需要重新映射。其他节点和数据的位置不受影响。 Redis一致性哈希算法的主要优点包括: 1. 容错性:当节点宕机时,只有宕机节点和其周围的数据需要重新映射,其他节点和数据不受影响。 2. 可扩展性:当增加节点时,只有受影响的节点和数据需要重新映射,其他节点和数据不受影响。 3. 平衡性:通过使用虚拟节点,可以解决数据倾斜的问题,即数据在节点之间分布不均匀的情况。 然而,Redis一致性哈希算法也有一些缺点。当增删节点时,需要重新计算受影<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis 一致性哈希](https://blog.csdn.net/m0_54921756/article/details/125987939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值