Redis Key使用{}原因分析

 更新时间:2023年09月27日 10:47:44   作者:AC编程  
这篇文章主要为大家介绍了Redis中Key中为什么要使用{}原因分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Redis集群介绍

Redis集群是一个提供在多个Redis间节点间共享数据的程序集,Redis集群能够实现key的分片,分片能使key均匀地分布到集群的机器上去,能保证数据的一致性。

使用Redis集群需要注意的点

从Redis单实例切换到twemproxy集群时,有些需要注意的地方。
1、不支持的方法:

KEYS、MIGRATE、SCAN等

2、支持但需特殊处理的方法:

MSET、SINTERSTORE、SUNIONSTORE、ZINTERSTORE、ZUNIONSTORE等

对于不支持的方法,在使用时需要寻找替代方案。

Redis集群的数据分片

Redis集群没有使用一致性hash,而是引入了哈希槽的概念。

Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。集群的每个节点负责一部分hash槽,举个例子,比如当前集群有3个节点,那么:

节点 A 包含 0 到 5500号哈希槽。
节点 B 包含5501 到 11000 号哈希槽。
节点 C 包含11001 到 16384号哈希槽。

这种结构很容易添加或者删除节点。比如如果我想新添加个节点D, 我需要从将节点 A、B、C中的部分槽到D上。如果我想移除节点A,需要将A中的槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可。 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态。

MSET

单实例上的MSET是一个原子性(atomic)操作,所有给定key都会在同一时间内被设置,某些给定key被更新而另一些给定key没有改变的情况,不可能发生。

而集群上虽然也支持同时设置多个key,但不再是原子性操作。会存在某些给定 key 被更新而另外一些给定key没有改变的情况。其原因是需要设置的多个key可能分配到不同的机器上。

SINTERSTORE、SUNIONSTORE、ZINTERSTORE、ZUNIONSTORE

这四个命令属于同一类型。它们的共同之处是都需要对一组key进行运算或操作,但要求这些key都被分配到相同机器上。这就是分片技术的矛盾之处:即要求key尽可能地分散到不同机器,又要求某些相关联的key分配到相同机器。

Hash Tags

解铃还需系铃人,解决方法还是从分片技术的原理上找。

分片,就是一个hash的过程:对key做md5,sha1等hash算法,根据hash值分配到不同的机器上。为了实现将key分到相同机器,就需要相同的hash值,即相同的key(改变hash算法也行,但不简单)。但key相同是不现实的,因为key都有不同的用途。例如user:user1:ids保存用户的tweets ID,user:user1:tweets保存tweet的具体内容,两个key不可能同名。

仔细观察user:user1:idsuser:user1:tweets,两个key其实有相同的地方,即user1。能不能拿这一部分去计算hash呢?

这就是Hash Tag,允许用key的部分字符串来计算hash。当一个key包含{} 的时候,就不对整个key做hash,而仅对{} 包括的字符串做hash。假设hash算法为sha1。对user:{user1}:idsuser:{user1}:tweets,其hash值都等同于sha1(user1)。

HashTag可能会使过多的key分配到同一个slot中,造成数据倾斜影响系统的吞吐量,务必谨慎使用。

以上就是Redis Key使用{}原原因分析的详细内容,更多关于Redis Key使用{}的资料请关注脚本之家其它相关文章!

相关文章

  • Windows下搭建Redis哨兵集群模式的方法步骤

    Windows下搭建Redis哨兵集群模式的方法步骤

    哨兵模式,是基于主从复制模式,主从复制的优点全都拥有,并且主从可以实现自动切换,故障转移等功能,本文主要介绍了Windows下搭建Redis哨兵集群模式的方法步骤,文中通过图文介绍的非常详细,感兴趣的小伙伴们可以参考一下,需要的朋友可以参考下
    2023-09-09
  • Redis如何批量删除指定模糊的key举例

    Redis如何批量删除指定模糊的key举例

    在实际项目中,我们可能需要根据一定的条件来删除部分key,这时候就需要用到模糊删除操作这,下面篇文章主要给大家介绍了关于Redis如何批量删除指定模糊的key的相关资料,需要的朋友可以参考下
    2024-08-08
  • Redisson分布式限流的实现原理解析

    Redisson分布式限流的实现原理解析

    这篇文章主要为大家介绍了Redisson分布式限流的实现原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • redis的hash类型操作方法

    redis的hash类型操作方法

    Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象,这篇文章主要介绍了redis的hash类型的详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • redis 亿级数据读取的实现

    redis 亿级数据读取的实现

    本文主要介绍了redis 亿级数据读取的实现,亿级数据规模下实现高效的数据读取成为了许多企业和开发者面临的重大挑战,下面就来介绍一下,感兴趣的可以了解一下
    2024-08-08
  • 浅谈Redis变慢的原因及排查方法

    浅谈Redis变慢的原因及排查方法

    本文主要介绍了浅谈Redis变慢的原因及排查方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Redis教程(十四):内存优化介绍

    Redis教程(十四):内存优化介绍

    这篇文章主要介绍了Redis教程(十四):内存优化介绍,本文讲解了特殊编码、BIT和Byte级别的操作、尽可能使用Hash等内容,需要的朋友可以参考下
    2015-05-05
  • Redis实现全局唯一Id的使用示例

    Redis实现全局唯一Id的使用示例

    全局唯一ID有多个方法可供选择,其中一种是使用Redis,本文就来介绍一下Redis实现全局唯一Id的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • windows 64位下redis安装教程

    windows 64位下redis安装教程

    这篇文章主要为大家详细介绍了windows 64位下redis安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Redis上实现分布式锁以提高性能的方案研究

    Redis上实现分布式锁以提高性能的方案研究

    这篇文章主要介绍了Redis上实现分布式锁以提高性能的方案研究,其中重点需要理解异步算法与锁的自动释放,需要的朋友可以参考下
    2015-12-12

最新评论