问题:现在想要做Redis集群,也就是主从复制(一主多从),常规也就是“写入操作”往主,“查询操作”往从库。
那么依据惯例,应该是(1)使用中间件的方式分发读、写操作到对应的Redis节点(2)在代码里,对读和写的操作指定对应的Redis节点(例如这种:http://blog.csdn.net/u0129790...)
但是第二种方式似乎较繁琐,想采用第一种方式,但苦于没查到对应的资料,难不成都是采用第二种方式。想询问下大家,一般是怎么做的呢?
感谢:)
人生最曼妙的风景,竟是内心的淡定与从容!
泻药,然而并没有相关经验,以下属于强答,仅供参考
既然要采取写入操作往 主库*1 ,查询操作往 从库*N 的策略。写入操作可以直接写死到对应的Redis节点。读取操作则需要一个分发的策略,如何从N里面选择出1个。
主库*1
从库*N
中间件方式,通常要求中间件服务器和Redis和PHP都有(延时、带宽)较好的连接。然后中间件服务器,无论是纯随机分配,或者根据IP分配,根据IP的Hash值分配,或者其它等等的方式,选择一个(经检验)可用的Redis节点,进行数据的获取(和检验、处理等)和转发。
纯随机分配
根据IP分配
Hash值分配
个人感觉,通常没必要用中间件,可以参考数据库的主从的思路,通常数据库连接的代码(或者连接配置),我们会分离出来单独作为一个文件,同样的,可以把Redis节点的选择分配也写到一个统一的单独的文件(问题里提到的那个博客里称之为Redis的缓存驱动)里,然后都使用这个,就好了。
泻药,然而并没有相关经验,以下属于强答,仅供参考
既然要采取写入操作往
主库*1
,查询操作往从库*N
的策略。写入操作可以直接写死到对应的Redis节点。
读取操作则需要一个分发的策略,如何从N里面选择出1个。
中间件方式,通常要求中间件服务器和Redis和PHP都有(延时、带宽)较好的连接。
然后中间件服务器,无论是
纯随机分配
,或者根据IP分配
,根据IP的Hash值分配
,或者其它等等的方式,选择一个(经检验)可用的Redis节点,进行数据的获取(和检验、处理等)和转发。个人感觉,通常没必要用中间件,可以参考数据库的主从的思路,通常数据库连接的代码(或者连接配置),我们会分离出来单独作为一个文件,同样的,可以把Redis节点的选择分配也写到一个统一的单独的文件(问题里提到的那个博客里称之为Redis的缓存驱动)里,然后都使用这个,就好了。