尽管Redis分区到现在为止,so far so good,但是Redis分区有一些致命的缺点,这导致一些Redis功能在分区的环境下并不能很好地工作,我们来看看:
多键操作是不被支持的,比如我们将要批量操作的键被映射到了不同的Redis实例中。
多键的Redis事务是不被支持的。
分区的最小粒度是键,因此我们不能将关联到一个键的很大的数据集映射到不同的实例。
当应用分区的时候,数据的处理是非常复杂的,比如我们需要处理多个rdb/aof文件,将分布在不同实例的文件聚集到一起备份。
添加和删除机器是很复杂的,例如Redis集群支持几乎运行时透明的因为增加或减少机器而需要做的rebalancing,然而像客户端和代理分区这种方式是不支持这种功能的。
既然有问题,那么就需要解决方案,这个时候Pre-sharding来了
涉及多个 key 的操作通常不会被支持。 例如你不能对两个集合求交集, 因为他们可能被存储到不同的 Redis 实例(实际上这种情况也有办法, 但是不能直接使用交集指令)。
同时操作多个 key, 则不能使用 Redis 事务 .
分区使用的粒度是 key ,不能使用一个非常长的排序 key 存储一个数据集( The partitioning
granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set ) .
当使用分区的时候, 数据处理会非常复杂, 例如为了备份你必须从不同的 Redis 实例和主机同时收集 RDB / AOF 文件。
分区时动态扩容或缩容可能非常复杂。 Redis 集群在运行时增加或者删除 Redis 节点, 能
做到最大程度对用户透明地数据再平衡,但其他一些客户端分区或者代理分区方法则不支持
这种特性。 然而, 有一种预分片的技术也可以较好的解决这个问题。
收起