前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Cluster 有哪些优势和限制?

Redis Cluster 有哪些优势和限制?

作者头像
dys
发布2019-11-20 15:10:59
4.1K0
发布2019-11-20 15:10:59
举报
文章被收录于专栏:性能与架构性能与架构

内容目录:

  1. 简述 Redis Cluster 的 slot
  2. Redis Cluster 的主要优势
  3. Redis Cluster 限制
  4. hash tag 机制

1. 概述

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

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

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

代码语言:javascript
复制
HASH_SLOT = CRC16(key) mod 16384

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

2. 优势

  • 高性能

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

  • 高可用

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

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

  • 易扩展

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

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

  • 原生

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

3. 限制

3.1 需要客户端的支持

客户端需要修改,以便支持 Redis Cluster。

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

3.2 只支持一个数据库

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

3.3 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 做事务操作。

4. Multi-Key 限制的处理

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

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

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

使用方式:

代码语言:javascript
复制
{user1000}.following 和 {user1000}.followers

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

5. 小结

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

代码语言:javascript
复制
(error) CROSSSLOT Keys in request don't hash to the same slot

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
  • 2. 优势
  • 3. 限制
    • 3.1 需要客户端的支持
      • 3.2 只支持一个数据库
        • 3.3 Multi-Key 操作受限
        • 4. Multi-Key 限制的处理
        • 5. 小结
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档