zoukankan      html  css  js  c++  java
  • 1 分钟带你读懂 Redis 集群的优劣势,从此技术选型不再坑!

    概述

    Redis Cluster 是 Redis 原生的数据分片实现,可以自动在多个节点上分布数据,不需要依赖任何外部的工具。

    Redis Cluster 中所有 key 会被分派到 16384 个 slot(hash 槽)中,这些 slot 又会被指派到多个 Redis 节点上。

     

    一个 key 会映射到某个 slot,算法:

    HASH_SLOT = CRC16(key) mod 16384

    这个 slot 的机制会给我们带来一点麻烦,后面会讲到。

     

    优势

    1. 高性能
    • Redis Cluster 的性能与单节点部署是同级别的。

    1. 高可用
    • Redis Cluster 支持标准的 master-replica 配置来保障高可用和高可靠。

    • Redis Cluster 也实现了一个类似 Raft 的共识方式,来保障整个集群的可用性。

    1. 易扩展
    • 向 Redis Cluster 中添加新节点,或者移除节点,都是透明的,不需要停机。

    • 水平、垂直方向都非常容易扩展。

    1. 原生
    • 部署 Redis Cluster 不需要其他的代理或者工具,而且 Redis Cluster 和单机 Redis 几乎完全兼容。

     

    限制

    1. 需要客户端的支持
    • 客户端需要修改,以便支持 Redis Cluster。

    • 虽然 Redis Cluster 已经发布有几年时间了,但仍然有些客户端是不支持的,所以需要到 Redis 官网上去查询一下。

    1. 只支持一个数据库
    • 不像单机 Redis,Redis Cluster 只支持一个数据库(database 0),select 命令就不能用了,但实际也很少有人使用多数据库,所以这个限制并没什么影响。

    1. Multi-Key 操作受限

    Multi-Key(多 key)是什么意思?某些情况是多 key 的操作,例如:

    • SUNION,这类命令会操作多个 key

    • 事务,会在一个事务中操作多个 key

    • LUA 脚本,也会操作多个 key

    这类情况都需要特别注意,因为:Redis Cluster 要求,只有这些 key 都在同一个 slot 时才能执行。例如,有 2 个 key,key1 和 key2。

    • key1 是映射到 5500 这个 slot 上,存储在 Node A。

    • key2 是映射到 5501 这个 slot 上,存储在 Node B。

    那么就不能对 key1 和 key2 做事务操作。

     

    Multi-Key 限制的处理

    对于多 key 场景,需要做好数据空间的设计,Redis Cluster 提供了一个 hash tag 的机制,可以让我们把一组 key 映射到同一个 slot。

    例如:user1000.following 这个 key 保存用户 user1000 关注的用户;user1000.followers 保存用户 user1000 的粉丝。

    这两个 key 有一个共同的部分 user1000,可以指定对这个共同的部分做 slot 映射计算,这样他们就可以在同一个槽中了。

    使用方式:

    {user1000}.following 和 {user1000}.followers

    就是把共同的部分使用 { } 包起来,计算 slot 值时,如果发现了花括号,就会只对其中的部分进行计算。

     

    小结

    Multi-Key 这一点是 Redis Cluster 对于我们日常使用中最大的限制,一定要注意,如果多 key 不在同一个 slot 中就会报错,例如:

    (error) CROSSSLOT Keys in request don't hash to the same slot

    需要使用 hash tag 设计好 key 的空间。

  • 相关阅读:
    工厂对象模式简介
    (转)HelloWorld CMake CMake中构建静态库与动态库及其使用
    C和C++混合编程
    Google glog 使用
    VS2013 越来越慢
    shell 的语法
    (十二)命令模式详解(故事版)
    (十一)外观模式详解(Service第三者插足,让action与dao分手)
    (十)装饰器模式详解(与IO不解的情缘)
    (九)模板方法模式详解(包含与类加载器不得不说的故事)
  • 原文地址:https://www.cnblogs.com/evenchen/p/11940019.html
Copyright © 2011-2022 走看看