一、Redis集群
集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。单台服务器存在不稳定性。当节点服务宕机了,就没有可用的服务了。此外,单台服务器能够处理服务是有限的,要搭建一个可以服务大规模请求且稳定的系统必定需要使用到集群。
当我们需要提供大规模数据的读写缓存时,就需要使用Redis集群。
Redis集群的搭建可以参考这边文章:
redis集群搭建(非常详细,适合新手)
二、在python中使用Redis集群
有许多python的web后台服务需要使用到redis来作为缓存数据交换的中间件,一般使用官方的redis-python依赖包可以完成redis的一些操作,也提供了包括ConnectionPool连接池(数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。)这样的高级特性,允许用户通过创建连接池来高效的操作redis中的数据。目前网上也有很多教程阐述如何使用redis单机的连接池,但是却很少有文档阐述使用redis集群模式的连接池,其主要原因就是官方的redis-python依赖包暂时是不支持集群模式的连接的。
第三方依赖包redis-py-cluster目前是网络上关于使用python操作redis集群模式最好的一套解决方案,目前最新的版本2.1.3上面也已经有集群模式的连接池可供使用。
三、使用方法
from rediscluster import RedisCluster,ClusterBlockingConnectionPool redis_basis_conn = [{'host': '192.168.10.168', 'port': 7201}, {'host': '192.168.10.169', 'port': 7201}, {'host': '192.168.10.170', 'port': 7201}, {'host': '192.168.10.171', 'port': 7201}, {'host': '192.168.10.142', 'port': 7201}, {'host': '192.168.10.143', 'port': 7201}] redis_conn_pool = ClusterBlockingConnectionPool(startup_nodes=redis_basis_conn , decode_responses=decode_responses,max_connections=10,skip_full_coverage_check=True, password=‘’,max_connections_per_node=True) conn = RedisCluster(connection_pool=redis_conn_pool) conn.get('test001')