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使用{}的资料请关注脚本之家其它相关文章!

相关文章

  • Redis过期Key删除策略和内存淘汰策略的实现

    Redis过期Key删除策略和内存淘汰策略的实现

    当内存使用达到上限,就无法存储更多数据了,为了解决这个问题,Redis内部会有两套内存回收的策略,过期Key删除策略和内存淘汰策略,本文就来详细的介绍一下这两种方法,感兴趣的可以了解一下
    2024-02-02
  • 基于Redis过期事件实现订单超时取消

    基于Redis过期事件实现订单超时取消

    这篇文章主要介绍了基于Redis过期事件实现订单超时取消,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • redis并发之跳表的实现

    redis并发之跳表的实现

    跳表是一种用于实现有序集合的数据结构,本文主要介绍了redis并发之跳表的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Redis Pipeline(管道) 详解

    Redis Pipeline(管道) 详解

    Pipeline管道是 Redis 提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT) ,显著提升执行效率,这篇文章主要介绍了Redis Pipeline 详解,需要的朋友可以参考下
    2025-04-04
  • Redis分布式非公平锁的使用

    Redis分布式非公平锁的使用

    分布式锁很多人都能接触到,本文主要介绍了Redis分布式非公平锁,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Redis的主从复制机制以及主从复制的实现方法

    Redis的主从复制机制以及主从复制的实现方法

    本文介绍了Redis的主从复制机制,包括异步同步、快照同步、增量同步以及如何配置主从服务器,主从同步包括增量同步和快照同步两种方式,增量同步通过指令流实现,快照同步通过快照文件传输数据,主从复制可以提高系统的稳定性和性能,但也需要合理配置资源以避免资源浪费
    2026-02-02
  • redisson中RRateLimiter分布式限流器的使用

    redisson中RRateLimiter分布式限流器的使用

    Redisson Ratelimiter是Redisson框架中的一种限流算法,用于限制对资源的访问频率,本文主要介绍了redisson中RRateLimiter分布式限流器的使用,感兴趣的可以了解一下
    2024-06-06
  • Redis 事务与过期时间详细介绍

    Redis 事务与过期时间详细介绍

    这篇文章主要介绍了Redis 事务与过期时间详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • Redis过期键删除策略解读

    Redis过期键删除策略解读

    Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,保证数据库干净但可能影响性能,Redis默认同时使用两种策略
    2025-01-01
  • Redis中的数据过期策略详解

    Redis中的数据过期策略详解

    这篇文章主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01

最新评论