首页 > 数据库 >Redis连接池

Redis连接池

时间:2024-05-15 20:30:25浏览次数:22  
标签:POOL Redis redis 连接池 连接 conn

【一】Redis连接池的优点

​ Redis连接池的存在主要是为了优化Redis客户端和Redis服务器之间的连接管理,提升性能和稳定性。具体而言,Redis连接池具有以下几个优点:

  1. 提升响应速度: 由于连接池中已经存在可用的连接,客户端可以快速获取连接并执行操作,而不需要等待新的连接建立过程。这在高并发环境下尤为重要,可以显著减少请求的响应时间。
  2. 资源管理和控制: 连接池可以限制最大连接数,避免客户端过多连接导致服务器资源耗尽。通过设置连接池的最大连接数,可以防止系统因为过载而崩溃,确保系统的稳定性和可预测性。
  3. 简化连接管理: 使用连接池可以简化连接的管理。开发者无需手动管理连接的创建、复用和销毁,而是通过连接池来自动处理这些细节,从而减少代码的复杂性和维护成本。
  4. 应对瞬时高并发: 在某些场景下,系统可能会遇到瞬时的高并发请求。如果每个请求都需要创建一个新的连接,可能会导致连接耗尽或服务器压力过大。连接池可以通过预创建和管理连接,有效应对这种情况,提高系统的吞吐量。
  5. 负载均衡: 某些高级的连接池实现可以支持负载均衡,分配请求到不同的Redis实例上,以更好地利用系统资源和提高可用性。

补充

【二】原生django没有连接池概念

在django中,数据库连接池的概念并不是原生支持的。

django默认的数据库连接行为是按需创建和销毁连接,

由于使用django开发的场景的并发量要求一般都不高,所以即使没有连接池,也一样可用从容面对

但如果在高并发的环境下,就可以会导致性能问题

【三】django连接mysql如何使用连接池?

【四】python连接redis如何使用连接池

【1】创建连接池

import redis

POOL = redis.ConnectionPool(max_connections=10)

【2】从池中取链接

conn = redis.Redis(connection_pool=POOL)

# decode_responses=True就是将拿出来的数据以utf-8转码
conn = redis.Redis(connection_pool=POOL,decode_responses=True)

【3】使用链接操作数据库

# 加一条数据
conn.set(name='name', value='hqq')

【4】关闭

# 这里的close不是关闭链接,而是把链接放回链接池
conn.close()

【5】案例

使用多线程,测试连接池

如果线程数量超出连接池就会报错

import time

import redis
from threading import Thread

# 定义连接池
POOL = redis.ConnectionPool(max_connections=10)


# 定义一个函数,每个线程都将执行此函数
def redis_task(t_id):
    # 从连接池中取一个链接
    conn = redis.Redis(connection_pool=POOL)
    # 执行一些redis操作
    conn.set(name=f'thread_{t_id}', value=f'value_{t_id}')
    time.sleep(1)
    # 把链接放回连接池
    conn.close()


def main():
    # 创建线程 并添加到列表
    t_list = [Thread(target=redis_task, args=(n,)) for n in range(10)]
    # 启动所有线程
    for t in t_list:
        t.start()
    # 等待所有线程完成
    for t in t_list:
        t.join()


if __name__ == '__main__':
    main()

【五】单例模式使用连接池

python的模块导入天然是单例模式

【1】创建一个py文件 pool.py

POOL = redis.ConnectionPool(max_connections=10)

【2】使用POOL

在项目的任意位置,导入即可使用

标签:POOL,Redis,redis,连接池,连接,conn
From: https://www.cnblogs.com/Hqqqq/p/18194644

相关文章

  • redis基础
    redis介绍Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis与其他key-value缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供l......
  • python操作redis
    redis安装:https://github.com/tporadowski/redis/releases/一python操作redis1普通链接pipinstallredisimportredisconn=redis.Redis(host="localhost",port=6379,db=0,password=None)conn.set('name','lqz')con......
  • django中使用redis
    django中使用redis方式一:通用方式pool.pyimportredisPOOL=redis.ConnectionPool(max_connections=10,decode_responses=True)在哪里用,导入用即可fromutils.poolimportPOOLimportredisclassRedisView(ViewSet):deflist(self,request):conn=......
  • 后端跨域cookie问题与spring-session-data-redis
    背景1、后端统一接入了公司内部登录系统,登录后cookie信息在域名:test.net.cn下。Set-Cookie:SESSION=09a2f617-66a0-4e02-b99f-130d83900321;Domain=test.net.cn;Path=/;HttpOnly;SameSite=Lax2、当我们的系统接入到统一登录系统后,若访问域名为a.test.net.cn,则不会出现问题,因......
  • .NET 缓存:内存缓存 IMemoryCache、分布式缓存 IDistributedCache(Redis)
    .NET缓存里分了几类,主要学习内存缓存、分布式缓存一、内存缓存IMemoryCache#1、Program注入缓存builder.Services.AddMemoryCache();2、相关方法及参数Get、TryGetValue、GetOrCreate、GetOrCreateAsync、Set、Remove,关键参数是过期时间,GetOrCreate、GetOrCreateAsync是通......
  • RediSearch的简单使用与总结
    前言之前就有考虑过想要研究下RediSearch,号称高性能全文索引的功能,这几天闲来无事调研了一番。RediSearch介绍RediSearch是RedisLabs提供的一款强大且高效的搜索和全文索引引擎。它是一个基于Redis的模块,允许用户在Redis数据库中进行复杂的搜索和全文检索操作,而无需将......
  • 影响Redis的因素
    两个重要概念Redis提供了两种不同的持久化机制来保证数据的持久存储:RDB(RedisDatabase)和AOF(AppendOnlyFile)。RDB持久化RDB持久化是通过创建数据集的快照(snapshot)来工作的。在指定的时间间隔内,Redis会创建一个数据集的内存镜像,并将它写入一个磁盘上的文件中(通常是一个.r......
  • 2.Redis安装
    Redis安装Windows下安装下载地址:https://github.com/tporadowski/redis/releasesRedis支持32位和64位。这个需要根据你系统平台的实际情况选择,这里我们下载Redis-x64-xxx.zip压缩包到C盘。打开文件夹,内容如下:打开redis.windows.conf文件ctrl+f搜索maxmemory......
  • 1.Redis简介
    Redis简介Redis(RemoteDictionaryServer)是一个开源的内存数据库,遵守BSD协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。性能极高:Redis以其极高的性能而著称,能够支持每秒数十万次的读写操作24。这使得Redis成为处理高并发请求......
  • 2.集成MySQL及Redis
    连接MySQL将刚才复制的代码放在app创建后并运行文件根据警告提示复制内容根据SQLAlchemy()中的__init__()中的init_app()也可以得知没有以上内容将会警告,所以得注意代码顺序连接Redis为方便后期更换我们和Mysql一样将配置信息写入配置类通过类属性的方法使用......