`

关于Redis的Python客户端的连接池问题

 
阅读更多
关于Redis的Python客户端的连接池问题



在一次分享中提到了Redis的长短链接的问题,引发了对redis-py的连接池机制的讨论。


通过源码发现,每创建一个Redis实例都会构造出一个ConnectionPool,每一次访问redis都会从这个连接池得到一个连接,访问完成之后,会把该连接放回连接池,下面是发送命令访问redis的execute_command方法实现:


Python代码  收藏代码
352     #### COMMAND EXECUTION AND PROTOCOL PARSING #### 
 
353     def execute_command(self, *args, **options): 
 
354         "Execute a command and return a parsed response" 
 
355         pool = self.connection_pool 
 
356         command_name = args[0] 
 
357         connection = pool.get_connection(command_name, **options) 
 
358         try: 
 
359             connection.send_command(*args) 
 
360             return self.parse_response(connection, command_name, **options) 
 
361         except ConnectionError: 
 
362             connection.disconnect() 
 
363             connection.send_command(*args) 
 
364             return self.parse_response(connection, command_name, **options) 
 
365         finally: 
 
366             pool.release(connection) 

当然,也可以构造一个ConnectionPool,在创建Redis实例时,可以将该ConnectionPool传入,那么后续的操作会从给定的ConnectionPool获得连接。

redis-py的作者在文档中也有详细说明:

Connection Pools

Behind the scenes, redis-py uses a connection pool to manage connections to a Redis server. By default, each Redis instance you create will in turn create its own connection pool. You can override this behavior and use an existing connection pool by passing an already created connection pool instance to the connection_pool argument of the Redis class. You may choose to do this in order to implement client side sharding or have finer grain control of how connections are managed.

>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
>>> r = redis.Redis(connection_pool=pool)


关于redis-server的最大客户端数量问题

redis的文档这样说:

# Set the max number of connected clients at the same time. By default there
# is no limit, and it's up to the number of file descriptors the Redis process
# is able to open. The special value '0' means no limits.
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 128

1) redis默认没有设置最大的连接客户端数量,这个数量取决于redis进程能够打开的文件句柄数量。

2) 可以手工配置最大的连接池数量。
分享到:
评论

相关推荐

    一个简单的支持多个db的redis连接池

    一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一个简单的支持多个db的redis连接池一...

    redis客户端,连接查看redis数据库

    - **连接池**:为了优化性能,通常会使用连接池来复用连接,避免频繁创建和关闭连接。 - **心跳检测**:客户端和服务器之间定期发送心跳包,确保连接活跃,及时发现网络中断。 6. **安全与性能** - **SSL/TLS...

    Python-redispyRedis的Python客户端

    **Python-redis-py:Redis的Python客户端** `redis-py`是Python社区广泛使用的Redis数据库的客户端库,它提供了一种简单而高效的方式来与Redis数据存储进行交互。Redis是一种高性能的键值对数据存储系统,常用于...

    Python-ssdbya又一个ssdb的Python客户端用来替代Redis的NoSQL数据库

    **Python SSDBYA:SSDB的Python客户端** Python SSDBYA是针对SSDB数据库的Python接口,它旨在作为Redis的NoSQL数据库替代品。SSDB(Simple Scalable Database)是一款高性能、可扩展的键值存储系统,适用于大量数据...

    redis客户端和服务端

    这可能是一个包含 Redis 连接池实现的 Java 库,如 JedisPool,它简化了 Redis 客户端连接管理,提供了连接池的配置和管理功能。使用这个库,开发者可以方便地在 Java 应用中集成 Redis,并有效管理 Redis 连接。 ...

    Redis客户端连接支持版本2.8+

    2. **PyRedis(Python客户端)**:Python的PyRedis也进行了相应升级,支持连接池和命令管道,同时增加了对Redis 2.8新特性的兼容性,让Python开发者也能享受到这些性能提升。 3. **其他客户端**:诸如Node.js的...

    Redis客户端及服务器

    3. 连接池:为了提高性能,客户端通常会使用连接池来管理多个连接,避免频繁的建立和关闭连接。 4. 发布/订阅:Redis客户端支持发布订阅模式,允许客户端订阅特定频道,当有消息发布到该频道时,所有订阅者都会收到...

    Python-aredis一个高效和用户友好的异步Redis客户端

    - **连接池管理**:自动维护连接池,优化资源使用,避免频繁建立和关闭连接的开销。 - **自动重连**:在连接断开时,`aredis` 可以自动尝试重新连接到 Redis 服务器。 - **批量操作**:支持批处理命令,提高执行效率...

    python的redis数据库连接与使用

    可以直接建立一个连接池,然后作为参数传递给 Redis,实现多个 Redis 实例共享一个连接池。 操作 String 操作 String 是 Redis 中的一种基本操作。Redis 中的 String 在内存中按照一个 name 对应一个 value 来存储...

    redis连接客户端

    - 编程语言客户端:几乎所有的主流编程语言(如 Python、Java、Node.js、C#、Go 等)都有对应的 Redis 客户端库,这些库提供了一套 API 来实现与 Redis 的连接、数据操作等功能。 2. **连接方式**: - 直接连接:...

    Redis的Python客户端redis-py安装使用说明文档

    Redis的Python客户端`redis-py`是一个用于与Redis数据库交互的Python库,它提供了丰富的功能,使得在Python中操作Redis变得简单易行。本篇文档将详细介绍`redis-py`的安装、基本使用、API参考及一些详细说明。 1. *...

    redis服务器

    5. **Python客户端**:如Redisco,它提供了简单的Python接口,如`r.set('key', 'value')`用于设置键值对,`r.get('key')`用于获取键的值。此外,Redisco还支持pipeline(批量命令执行)、连接池管理等功能,提高性能...

    redis客户端redis客户端

    - **连接超时**:配置客户端连接服务器的超时时间,避免因网络问题导致的阻塞。 - **重试策略**:在连接失败时,客户端可能有重试机制,如 Exponential Backoff。 - **命令缓冲**:客户端可以先将命令放入缓冲区...

    Python-txRedis基于Twisted的Redis客户端

    Python-txRedis是针对Twisted框架的一个高效、异步的Redis客户端库,它允许你在Twisted事件循环中无缝地操作Redis服务器。这个库是为了解决在非阻塞环境中进行数据库交互的需求,使得你的Python应用在处理大量并发...

    redis服务端与客户端.zip

    - **连接池**:为了优化性能,客户端通常会使用连接池管理与Redis服务器的连接,避免频繁创建和关闭连接。 - **事务**:Redis支持事务,客户端可以发送一组命令,然后一次性执行,保证命令的原子性。 - **发布/...

    redis客户端 RedisClient

    有些客户端库支持连接池,可以复用已建立的连接,提高性能。 5. **异常处理**:在使用RedisClient时,可能会遇到网络问题、服务器错误等异常情况,因此需要编写适当的错误处理代码。 除了基本的键值操作,...

    RedisClientre redis客户端

    RedisClient 是一个用于连接和操作 Redis 数据库的客户端库,它是许多编程语言中常见的实现,例如在 Python、Java、Node.js、C# 和其他语言中都有对应的版本。这个客户端库为开发者提供了方便的 API,使得与 Redis ...

    Python-pydis用Python3克隆一个redis性能更佳优越

    1. **Python的并发编程**:为了提高性能,`pydis`可能使用了Python的异步I/O模型,如`asyncio`库,实现非阻塞的网络通信,允许在同一时间处理多个客户端连接。 2. **数据结构实现**:Redis以其高效的数据结构著称,...

Global site tag (gtag.js) - Google Analytics