Redis系列-4.哈希(Hash)结构

「 分布式技术 」一致性哈希算法(Hash)详解 在分布式系统中,数据的存储和访问是很重要的问题。为了提高系统的可用性和扩展性,常常需要将数据分布到不同的节点上,而且这些节点也可能会动态地加入或离开集群。一致性哈希算法就是一种常用的解决方案,它可以解决节点的动态变化和负载均衡的问题。本文将深入探讨一致性哈希算法的底层原理,包括其基本思想、关键步骤以及优缺点等,同时结合实际场景进行举例说明。一致性哈希算法是一种用于分布式系统中的数据分片和负载均衡的算法。它将整个哈希空间划分为一个环,并且每个节点在这个环上都有一个对应的位置。 阅读详情

#Redis系列-4.哈希(Hash)结构
文章中可能有地方描述偏差,欢迎留言指证


##1.基本
hash是第二种redis结构,在编程语言中非常常见。在redis里,哈希又是另一种键值对结构。redis本身就是key-value型,哈希结构相当于在value里又套了一层kv型数据。哈希和C#里的字典,java里的map结构是一样的。

假如输入命令 hset testKey testField testValue(效果如图)
在这里插入图片描述

##2.常用命令
下面所有描述里 {}都是必需参数,<>是可选参数

####设置值
hset {key} {field} {value}
key:键名
field:哈希结构中的键名
value:哈希结构中的键名对应的值

注意,这里只能设置一条。如果要设置多条,用 hmset命令 hset {key} {field} {value} [{field} {value}…]

####获取值
hget {key} {field}
如果不存在,会返回nil。
这里第一个key是找到这个哈希结构的数据,第二个参数field是取里面对应的值。
当返回nil时,是里面的这一个值不存在,而不是这个哈希结构数据不存在

批量获取用hmget
这里写图片描述

获取和设置如下图
这里写图片描述

####统计field个数
hlen {key}

####判断field是否存在
hexists {key} {field}
这里判断的是哈希中存不存在,而不是判断这一整条哈希数据存在。如果要判断这一整条数据是否存在,用exists

####遍历哈希结构
遍历键
hkeys {key}
这里写图片描述

遍历值
hvals {key}
这里写图片描述

遍历键和值
hgetall {key}
这里写图片描述

使用时,这个命令会遍历所有的,当数据量大时会阻塞redis。redis是单线程程序,只要阻塞就会一直卡住,所以在线上环境不要使用。

3.不常用命令

####自增、自减
hincrby {key} {field}
hincrbyfloat {key} {field}
和上一节讲的incrby incrbyfloat一样,只是这里的作用在哈希数据的值上面。

4.内部编码

有两种:
ziplist:
内部更加紧凑。
当键的个数小于hash-max-ziplist-entries(默认512)的配置时
同时所有值小于hash-max-ziplist-value(默认64)的配置时
才会使用ziplist
hashtable:
当不能使用ziplist时,就会使用这个结构,因为不满足上面两个条件时,ziplist的读写效率会降低。而hashtable的读写时间复杂度为O(1)。

5.适合场景

1.存对象信息

但使用hash存对象的信息时要注意避免在ziplist和hashtable之间进行转换。hashtabl会消耗更多的内存。

Redis一致性哈希算法和哈希槽区别 一致性哈希算法和哈希槽(Hash Slot)都是在分布式系统中用于数据分片和节点映射的技术,主要应用于像 Redis 集群这样需要将数据分散存储在多个节点的场景。一致性哈希是在哈希取余算法基础之上优化的,分布式缓存数据变动和映射问题,某个机器宕机了,分母数量改变了,自然取余数不对了。用于解决分布式缓存系统中的数据选择节点存储问题和数据选择节点读取问题以及在增删节点后减少数据缓存的消失范畴,防止雪崩的发生。 阅读详情

相关推荐

Redis第九讲 RedisHash数据结构Dict字典哈希算法与hash存储过程

Redis第九讲 RedisHash数据结构Dict字典哈希算法Redis第九讲 RedisHash数据结构Dict字典哈希算法Redis第九讲 RedisHash数据结构Dict字典哈希算法

程序员路同学 1406

Redis五大基本类型-Hash

Hash Hashredis的存储方式是 key-map(<key,value>)的形式 ,hash的命令使用与string基本相同,把string的命令加上h就可以了 添加与查看 127.0.0.1:6379> hset myhash key1 hello # 在myhash中添加有个keykey1,value为 hello的字段 (integer) 1 127.0.0.1:6379> hget myhash key1 # 查看值 "hello" 127.0.0.1:6379&

起名好难呀! 167

实战演练 | ABAQUS显式动力学分析在金属切削仿真中的应用

本文详细介绍了如何利用ABAQUS显式动力学分析进行金属切削过程的二维仿真。通过从零开始的完整流程,包括几何建模、材料本构与失效定义、网格划分、接触设置、边界条件施加,到结果后处理与切削力提取,为工程师和研究人员提供了实用的仿真方法,以优化刀具设计和加工工艺。

purple的博客 897

Redis数据类型(hash 类型)

Redis数据类型(hash 类型)hash 类型及操作① 概述② 相关命令列表③ 命令示例 hash 类型及操作 ① 概述 我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么 该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。 ② 相关命令列表 点击这里 点击这里 点击这里 点击这里

JohnnyG2000的博客 1931

Redission作为分布式锁使用与原理

比如:如果上锁成功了,还没释放呢,服务宕机了,这把锁将永驻,服务起来后再去抢占锁的时候发现已经有锁了,无法抢占,但是这把锁又永远得不到释放,死锁了。 所以记得要用setnx设置过期时间,或者set+expire放到lua里进行设置。为什么需要续期?假设锁设置了3s,但是业务代码执行了4s还没执行完,那锁过期了,其他线程在请求接口的时候又加上了锁(redis里又setnx值了),这时候不就并发执行了吗?相当于还是线程不安全!

qq_37436172的博客 2055

redission使用的那些坑-hash结构

故障现象: 应用隔2-3天就回导致一次CPU飙到600%+(容器,宿主8核),随后宕机。 排查过程: 首先明确CPU飙升原因 第一步: top -Hp 查看占用CPU进程 发现13~20线程占用大量CPU资源 第二步: jstack 查看实际占用cpu的进程(与top命令中线程关系nid(hex)=pid(dec)) 发现CPU占用...

qq_37892675的博客 4394

Redis数据结构Hash类型全面解析

Redis,作为一个开源的、内存中的数据结构存储系统,以其出色的性能和灵活的数据类型,广泛应用于缓存、消息队列、发布订阅系统等多种场景。在 Redis 的五种基本数据类型中,Hash 类型是一种非常重要的数据类型。它可以存储键值对的集合,且能够用小于1毫秒的时间复杂度进行添加、删除、更新和查找操作,因此在实际应用中有着广泛的用途。 在接下来的文章中,我将详细介绍 RedisHash 类型,包括它的内部实现、主要特性、常用命令以及应用场景。无论你是刚接触 Redis 的新手,还是已经有一定经验的开发者

栗筝i的博客 1万+

Redis数据结构-Hash哈希

ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认为512个),同时所有值小于hash-max-ziplist-value配置(默认为64个字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀,但是读写元素比较慢。几乎所有的主流编程语言都提供了哈希(Hash)类型,它们的叫法可能是哈希,字典,关联数组,映射。优点:简单,直观,灵活。

2301_76928097的博客 1670

redisHash哈希

redis数据结构hash介绍。

终为nullptr 2869

一致性哈希算法与哈希

本文主要介绍了一致性哈希算法的基本原理、容错性和可扩展性、数据倾斜等问题。在此基础上又简单阐述了redis cluster中哈希槽的概念及实现。

若千年后 2484

07. 算法之一致性哈希算法介绍

哈希算法在程序开发中的很多地方都能看到他的身影,但是哈希有他的局限性,比如如果两个key哈希到同一个位置的时候,怎么处理优化。本节我们介绍一下常规处理方式。

wlyang666的博客 3157

说一说Redis中如何使用一致性哈希算法

Redis一致性哈希算法解析:从传统哈希到分布式优化 本文系统性地介绍了Redis中一致性哈希算法的原理与实现。首先通过传统哈希算法在节点扩容时的痛点引入问题,详细讲解了一致性哈希的环状结构设计及其平滑扩容优势。随后剖析了Redis Cluster采用的16384槽位变种实现,以及虚拟节点技术如何解决数据分布不均问题。文章还对比了一致性哈希的优缺点,并通过社交平台缓存案例展示了实际应用场景。最后总结了渐进式扩容等最佳实践,为构建高可用Redis集群提供了实用指导。

从不水文,坚持创作,加油 1306

安全系列之——主流 Hash 散列算法介绍和使用

信安类的专业一般接触到的都是 cryptographic hash, 比如 MD5, SHA 系列, SM3。non-cryptographic hash 指的是未解决原像问题、第二原像(弱碰撞)和强碰撞的 hash 函数。追求效率的应用中通常使用的是 non-cryptographic hash, 因为它们更快。在 Redis, Memcached, Cassandra, HBase, Lucene 都使用了 Murmurhash(一种 non-cryptographic hash)

云满笔记 2333

Redis数据结构之——hash

Redis数据结构之——hash

weixin_46935110的博客 1万+

Redisson实现分布式锁原理

Redisson实现分布式锁原理 一、高效分布式锁 当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,这里我认为以下几点是必须要考虑的。 1、互斥 在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。 2、防止死锁 在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统

程序猿进阶 2978

Redishash数据结构

wu

qq_44632658的博客 3645

RedisHash类型

如果使用hash的方式表示UserInfo,就可以使用field表示对象的每个属性(数据表的每个列),此时就可以非常方便的修改/获取任何一个属性的值了。如果使用String(JSON)的格式来表示UserInfo,万一只想获取其中某个field,或者修改某个field就需要把整个JSON都读出来,解析成对象,操作完field后,再重新转成JSON字符串,再写回去。虽然,ziplist付出的代价是进行读写元素时,速度较慢,但是,如果元素个数比较少,慢的就不太明显,除非元素个数太多了,才会比较明显。

wk200411的博客 1551

redis架构

.redis竞品对比 存储 数据结构 持久化 集群可用性 网络模型 线程模型 redis 支持value是string,list,hash,set,zset 是 主从,redis cluster无中心分布式集群 非阻塞IO 单线程 无锁 memcache 只支持string 否 需要自行开发 基于twemproxy做 主从集群 非阻

zhaozhenzuo的专栏 5850

RedisHash解析

Redis Hash是一种高效的键值对集合,适合存储对象属性。其底层采用ziplist(小数据量)和hashtable(大数据量)两种编码方式,根据元素数量和值大小自动切换。Redis提供丰富的Hash操作命令,包括基本读写(HSET/HGET)、批量操作(HMSET/HMGET)、数字运算(HINCRBY)等。与存储多个String键相比,Hash具有更高内存效率、原子性操作和更好的数据局部性,特别适合用户信息、商品数据等结构化数据的存储场景。

2301_81016208的博客 1257

PostgreSQL 核心原理:大字段(大对象)是如何被压缩和存储的(TOAST存储机制)

PostgreSQL通过TOAST机制高效处理大字段存储问题,解决单行超过8KB页大小限制的挑战。TOAST采用透明分片、按需加载和自动压缩策略,支持TEXT、JSONB等变长类型,无需用户干预。其核心包括四种存储策略(plain/external/main/extended),自动将大字段分片存入专用TOAST表,主表仅保留指针。读取时按需解压拼接,支持部分加载优化。TOAST表结构包含chunk_id、序列号和分片数据,配合内置PGLZ压缩算法,平衡存储效率与访问性能。该机制使PostgreSQL能稳定

数据知道的博客 2559

电动车目标检测数据集.zip

电动车目标检测数据集.zip

上一篇: Redis系列-2.全局命令和数据结构
下一篇: Redis系列-5.列表(List)结构
长空X
博客等级 码龄17年 80粉丝 29原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值