Redis分片
2016-06-15 16:20
501 查看
分片是分布式存储的突出特点。
通常使用客户端分片来解决这个问题,即启动多个Redis数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读 取。这样可以实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的1/N。但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的 节点,就需要对数据进行手工迁移,同时在迁移的过程中为了保证数据的一致性,还需要将集群暂时下线。这个过程相对比较复杂。
考虑到Redis实例非常轻量特点,可以采用预分片技术(presharding)来在一定程度上避免此问题。具体来说就是在节点部署初期,就提前考虑日 后的存储规模,建立足够多的实例(如128个节点),初期数据很少,所以每个节点存储的数据也非常少,但由于节点轻量的特性,数据之外的内存开销并不大, 这使得只需要很少的服务器即可运行这些实例。日后存储规模扩大后,所要做的不过是将某些实例迁移到其他服务器上,而不需要对所有数据进行重新分片并进行集 群下线和数据迁移了。
总之,客户端分片终归是有非常多的缺点,比如维护成本高,增加、移除节点较繁烦等。
Redis集群是自动分片和高可用的首选方式。当前还不能完全用于生产环境,但是已经进入了beta阶段。 一旦Redis集群可用,以及支持Redis集群的客户端可用,Redis集群将会成为Redis分片的事实标准。
集群的特点在于拥有和单机实例同样的功能,同时在网络分区后能够提供一定的可访问性以及对主数据库故障恢复的支持。
Redis集群是查询路由和客户端分片的混合模式。
必要性
如果Redis集群的每个数据库都存储集群中的所有数据,那么集群的总数据存储量受限于可用存储内存最小的数据库节点,形成木桶效应。由于Redis中的 所有数据都基于内存存储,这一问题就尤为突出了,尤其是当使用Redis做持久化存储服务时。从容量上,单个Redis服务器的内存非常容易成为存储瓶 颈,所以需要进行数据分片。旧版本Redis的解决办法
旧版本Redis(2.4)没有提供集群的功能。通常使用客户端分片来解决这个问题,即启动多个Redis数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读 取。这样可以实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的1/N。但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的 节点,就需要对数据进行手工迁移,同时在迁移的过程中为了保证数据的一致性,还需要将集群暂时下线。这个过程相对比较复杂。
考虑到Redis实例非常轻量特点,可以采用预分片技术(presharding)来在一定程度上避免此问题。具体来说就是在节点部署初期,就提前考虑日 后的存储规模,建立足够多的实例(如128个节点),初期数据很少,所以每个节点存储的数据也非常少,但由于节点轻量的特性,数据之外的内存开销并不大, 这使得只需要很少的服务器即可运行这些实例。日后存储规模扩大后,所要做的不过是将某些实例迁移到其他服务器上,而不需要对所有数据进行重新分片并进行集 群下线和数据迁移了。
总之,客户端分片终归是有非常多的缺点,比如维护成本高,增加、移除节点较繁烦等。
新版本Redis的解决办法
Redis3.0版的一大特性就是支持集群(Cluster)功能。Redis集群是自动分片和高可用的首选方式。当前还不能完全用于生产环境,但是已经进入了beta阶段。 一旦Redis集群可用,以及支持Redis集群的客户端可用,Redis集群将会成为Redis分片的事实标准。
集群的特点在于拥有和单机实例同样的功能,同时在网络分区后能够提供一定的可访问性以及对主数据库故障恢复的支持。
Redis集群是查询路由和客户端分片的混合模式。
相关文章推荐
- NoSQL数据库-MongoDB和Redis
- Spring Cache整合Ehcache或Redis or others
- Redis 集群教程
- Redis.conf中配置全面说明
- NoSQL-Redis【2】-HDEL给我的一个惊喜
- Redis介绍 && Java客户端操作Redis
- redis+php实现微博功能(三)
- 解决保存快照失败后redis无法写入的问题( Redis is configured to save RDB snapshots)
- Redis存储Tomcat集群的Session
- 阿里云服务器上配置并使用: PHP + Redis + Mysql 从配置到使用
- Redis从基础命令到实战之字符串类型
- Reids配置文件redis.conf中文详解
- Jedis操作Redis数据库
- spring aop 做redis缓存
- 分布式消息中间件(四)——Flume+Kafka+Storm+Redis生态架构实战
- REDIS 学习(1)linux环境,以及REDIS的启动,关闭和连接,以及在不重启的情况下开启AOF
- Redis总结(一)Redis安装
- Cannot open Redis connection due invalid URI
- redis中各种数据类型对应的jedis操作命令
- window下redis安装