因为单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧降低,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境的使用。因而为了获取更好的Redis缓存性能及可用性,不少公司都研发了Redis缓存集群方案。现对NetFlix、Twitter、国内的豌豆荚在缓存集群方面的解决方案进行一个汇总,以供读者参考,具体内容以下:html
Dynomite是NetFlix对亚马逊分布式存储引擎Dynamo的一个开源通用实现,使用C/C++语言编写、以代理的方式实现的Redis缓存集群方案。Dynomite不只可以将基于内存的Redis和Memcached打形成分布式数据库,还支持持久化的MySQL、BerkeleyDB、LevelDB等数据库,并具备简单、高效、支持跨数据中心的数据复制等优势。Dynomite的最终目标是提供数据库存储引擎不能提供的简单、高效、跨数据中心的数据复制功能。Dynomite遵循Apache License 2.0开源协议发布,更多关于Dynomite的信息请查看NetFlix技术博客对Dynomite的介绍。git
Twemproxy是一个使用C语言编写、以代理的方式实现的、轻量级的Redis代理服务器,它经过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理,使应用程序只须要在Twemproxy上进行操做,而不用关心后面具体有多少个真实的Redis或Memcached实例,从而实现了基于Redis和Memcached的集群服务。当某个节点宕掉时,Twemproxy能够自动将它从集群中剔除,而当它恢复服务时,Twemproxy也会自动链接。因为是代理,因此Twemproxy会有微小的性能损失。根据 Redis做者的测试结果,在大多数状况下,Twemproxy的性能至关不错,同直接操做Redis相比,最多只有20%的性能损失。Twemproxy遵循Apache License 2.0开源协议发布,更多关于Twemproxy的信息请登陆其在GitHub的主页查看。github
Codis是豌豆荚使用Go和C语言开发、以代理的方式实现的一个Redis分布式集群解决方案,且彻底兼容Twemproxy。Twemproxy对于上一层的应用来讲, 链接Codis Proxy(Redis代理服务)和链接原生的Redis服务器没有明显的区别,上一层应用可以像使用单机的 Redis同样对待。Codis底层会处理请求的转发、不停机的数据迁移等工做, 全部底层的一切处理, 对于客户端来讲是透明的。总之,能够简单的认为后台链接的是一个内存无限大的Redis服务。Codis遵循MIT开源协议发布,更多关于Codis的信息请登陆其在GitHub的主页查看。redis
另外,还有一些未开源的解决方案,好比新浪、百度、淘宝、腾讯等的Redis集群方案。在Redis官方正式推出可用于生产环境的集群方案前,以上三种方案是很是值得考虑在生产环境使用的方案。数据库