`

Redis3.0集群方案分析

 
阅读更多

在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过。现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底把我欺骗了。

    

等到我把Redis3.0客户端库hiredis编译好集成到公司系统,访问其中一台Redis3.0服务器居然返回"MOVED 2318 10.12.8.156

:6379",这才了解到访问其他Redis3.0服务器的Key需要二次定位,这就是Redis3.0所谓的ASK 转向/MOVED 转向机制,这绝对

是一个大坑,网上既然没有人说出来,如果我不站出来,会有人继续掉进这个大坑。

    

     Redis最初的使命是用高效的内存取代复杂繁重的数据库,如果从缓存服务器获取一个Key要经过二次定位,访问时间是原来单机

缓存服务器的两倍,那样我们还不如直接用数据库呢。

 

     鉴于Redis3.0所谓的ASK 转向/MOVED 转向机制,网上推出了JAVA版的Redis3.0客户端库jedis、C++版的Redis3.0客户端

库ACL,他们都支持根据Redis服务器居返回"MOVED"信息进行二次定位数据访问,而且还有在主备切换的情况下访问备机的功能,

正常情况下Redis3.0集群要部署3台主机和3台备机,这样客户端就要同时维持这6台服务器的长连接,像我们公司的系统有上百个

进程,一个线程就要维持6台缓存服务器的长连接,一个进程拥有多个线程,总的算起来差不多上千个缓存服务器的长连接,这无异

于饮鸩止渴。

    

     最理想的方案就是Redis3.0 Cluster加入集群代理功能,实现客户端通过任何一台缓存服务器一次性定位所有的Key,当然这要等待

antirez发力,短期看似乎不大可能;客户端优化方案就是加入计算Key的哈希槽值的逻辑,加载服务器端的哈希槽存储逻辑,来实现一次

性定位访问缓存服务器,这样做的缺陷还是避免不了多台缓存服务器的长连接,同时一旦缓存服务器发生数据迁移和主备切换的情况,客

户端就得变更哈希槽存储逻辑。

 

    俗话说,自力更生,丰衣足食。我们为何不自己开发一个Redis缓存集群代理服务器系统,取名为RedisClusterProxy,多牛B啊!

系统构思:系统并发接收客户端请求,计算Key的哈希槽值,加载服务器端的哈希槽存储逻辑,转发到对应的缓存服务器,并将缓存服

务器的返回值回传给客户端,这样客户端只要访问集群代理系统,实现一次性定位访问,效率与单台缓存服务器相差无几,协议还是采

用Redis3.0客户端和服务端的通信协议,这样不用对Redis3.0的客户端和服务器源码做任何改动,另外将服务器端的哈希槽存储逻辑

定时动态加载到系统,一旦缓存服务器发生数据迁移和主备切换的情况就不会发生访问定位不准确的问题,就算antirez将集群代理功能

加入Redis3.0,我们的客户端系统也不用做任何更改。

 

     RedisClusterProxy(http://download.csdn.net/detail/g55395162/8844927)系统初步开发花了一个星期时间,相关功能和框架已经实现,可以编译测试,后续进一步优化。

 

 上面连接为试用版,正式版解决了试用版的所有BUG,稳定性和并发性能更高,并实现缓存服务器主备切换同步更新连接,采用多进程,分布式部署,什么Codis,twemproxy等都可以比下去,有需要的可以联系我13640963760。

分享到:
评论

相关推荐

    redis 3.0 集群指南

    ### Redis 3.0 集群指南 #### 一、Redis 3.0 的安装与配置 **安装步骤:** 在安装 Redis 3.0 之前,首先确保已安装了必要的依赖包,如 cpp、binutils、glibc 等。通过 `yum` 命令安装这些依赖: ```bash yum -y ...

    redis 3.0 win7 32位x86

    虽然Redis 3.0不支持集群功能,但在更高版本中,Redis引入了集群方案,允许在多台服务器之间分散数据,提高可用性和容量。若需要扩展,可以考虑升级到更高版本或使用哨兵(Sentinel)系统实现高可用性。 综上所述,...

    Redis3.0集群与应用.zip

    总的来说,Redis 3.0集群与应用教程将帮助你深入理解如何利用Redis集群来构建可扩展、高可用的应用系统,无论你是开发者还是运维人员,都能从中受益。通过学习这个教程,你可以掌握如何设置和优化Redis集群,以及...

    Windows下Redis3.0 编译过后的exe

    1. **Cluster支持**:Redis 3.0引入了Cluster功能,这是一个分布式解决方案,允许用户将多个Redis实例组成一个集群,提供数据分片和故障转移。在Windows下测试这一特性,可以帮助开发者了解如何在多节点环境中部署和...

    redis3.0 demo

    通过这个“redis3.0 demo”,我们可以学习如何配置和使用Redis集群,如何编写和执行LUA脚本,以及如何利用其他新特性来优化应用性能。同时,它也将演示如何处理复制、连接管理和安全性等核心问题。通过实践,你可以...

    redis3.0 server+client

    - **Redis Cluster**:自包含的分片解决方案,提供数据分区和容错能力。 7. **安全性**: - **访问控制**:通过requirepass配置密码保护,限制非法访问。 - **SSL连接**:启用SSL加密通信,保障数据传输安全。 ...

    redis-3.0.503_x64.rar|redis-3.0.503_x64.rar

    总的来说,Redis 3.0.503_x64是一个强大且易用的数据存储解决方案,适用于需要高速读写、分布式存储以及缓存功能的场景。无论是开发人员还是运维人员,掌握Redis的使用都将极大地提升工作效率和系统性能。通过下载并...

    《Redis设计和实现 黄建宏著》配套 Redis 3.0 中文注释版源码

    8. 集群模式:虽然集群功能在Redis 3.0之前就已经引入,但在这个版本中进一步完善,提供了更稳定的分布式解决方案。 现在,有了黄建宏先生的中文注释版源码,我们可以更加清晰地了解每个函数的作用,以及它们如何...

    redis3.0 tar包

    在这个"redis3.0 tar包"中,我们主要关注的是Redis 3.0.0的RC2版本,这是一个候选发布版,意味着它在正式版发布前已经过一定的测试,但可能仍存在一些小问题。 **安装Redis 3.0.0 RC2** 1. **下载与解压**:首先,...

    带有详细注释的 Redis 3.0 代码.zip

    `sentinel.conf` 是 Redis Sentinel 的配置文件,Sentinel 是 Redis 的高可用性解决方案。它监控主服务器,如果检测到主服务器失效,会自动进行故障转移,将从服务器提升为主服务器,确保服务的连续性。配置文件中的...

    Redis3.0 windows客户端

    由于官方不再提供Windows版本,开发者们通过重新编译Redis的源码,使其能在Windows环境下运行,从而诞生了“Redis3.0 windows客户端”。这个客户端包含了适用于32位(x86)和64位(x64)系统的版本,以满足不同硬件需求...

    Redis集群方案.docx

    Redis 集群方案是为了应对单实例Redis在处理大规模数据时面临的存储瓶颈,尤其是在像新浪微博这样的大型应用中,单实例无法满足超过TB级的数据存储需求。Redis 3.0及之后的版本开始支持官方的集群功能,但在那之前,...

    Redis 3.0.051 64位安装包

    1. **Cluster支持**:3.0版本引入了官方的分布式解决方案Redis Cluster,可以自动处理数据分区和故障转移。 2. **HyperLogLog**:新增了HyperLogLog数据类型,用于估算大规模集合的唯一元素数量,节省空间。 3. **...

    Redis 64位 3.0.501

    总的来说,“Redis 64位 3.0.501”提供了一个强大且高效的键值存储解决方案,适合在64位环境下运行,并且具备了集群扩展、高速读写、数据持久化等核心功能。无论是开发人员还是运维人员,都需要熟悉这些知识点,以便...

    redis-3.0.zip

    在Redis 3.0版本中,它已经具备了丰富的功能和特性,使其成为许多大型互联网公司的首选数据库解决方案。下面将详细介绍Redis 3.0中的关键知识点。 1. **数据类型**: Redis 支持五种基本数据类型:字符串(Strings)...

    Redis-x64-3.0.504windows集群已经配置好的版本

    然而,"Redis-x64-3.0.504windows集群已经配置好的版本"提供了一个便捷的解决方案,特别适合那些希望快速搭建Redis集群而又不想花费太多时间在配置上的用户。 该压缩包包含的内容如下: 1. **Redis on Windows....

    redis-3.0-annotated-unstable.zip

    9. **集群**:Redis 3.0 引入了 Redis Cluster,提供了一种分布式解决方案,支持数据自动分片和故障转移。 压缩包中的文件名"redis-3.0-annotated-unstable"表明这个版本可能包含了源代码的注释,这对于开发者深入...

Global site tag (gtag.js) - Google Analytics