百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Python使用Redis,Redis连接池的用法

mhr18 2024-11-10 09:48 25 浏览 0 评论

直接上代码:

import redis, traceback, sys
from loguru import logger

class RedisClient:
    __instance = None
    
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            return object.__new__(cls)
        return cls.__instance
    
    def __init__(self, host, port, password=None):
        try:
            # 拿到一个Redis实例的连接池,避免每次建立、释放连接的开销,节省了每次连接用的时间
            self.POLL = redis.ConnectionPool(host=host,
                                                  port=port,
                                                  decode_responses=True,
                                                  db=0,
                                                  password=password,
                                                  max_connections=100)
            logger.info(f'获取Redis连接池, Host={host}, Port={port}')
        except Exception as e:
            logger.error(f'获取Redis连接池异常, 程序退出:{str(e)},traceback={traceback.format_exc()}')
            sys.exit(0)
            
    def get_redis_client(self):
        try:            
            # 从连接池中获取一个连接实例
            redis_conn = redis.StrictRedis(connection_pool=self.POLL)
            if redis_conn.ping():
                logger.info(f'获取Redis连接实例成功')
                return redis_conn
        except Exception as e:
            logger.error(f'Redis连接异常:{str(e)},traceback={traceback.format_exc()}')

上述是封装了一个RedisClient的类,使用了

redis.ConnectionPool 连接池,

这样能做到,大概的意思即:拿到一个Redis实例的连接池,避免每次建立、释放连接的开销,节省了每次连接用的时间,文中设置了最大100个。在获取实例做连接时,使用了

redis.StrictRedis(connection_pool=self.POLL)

文中使用了loguru记录日志。

在实际使用时,如下:

from tools.redisClient import RedisClient
import sqlite3, json
from config import Redis_Host, Redis_Port, Redis_pwd

redis_obj = RedisClient(Redis_Host, Redis_Port, Redis_pwd)
 
# 保存特征值到Redis指定的name、key中
def SaveFeatsToRedis(name, key, data):
    redis_connect = redis_obj.get_redis_client()
    redis_connect.hset(
        name=name,
        key=key,
        value=json.dumps(data, ensure_ascii=False)
    )
    
if __name__ == '__main__':
    data, count = GetFeatsFromSqlite(100)
    SaveFeatsToRedis(data)
    redis_connect = redis_obj.get_redis_client()
    print('查询Redis中所有的hkey', redis_connect.keys())

导入RedisClient,调用此类中的

get_redis_client() 方法,然后就是调用get、set即可。

相关推荐

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

docker安装jdk并且部署java项目,一文看懂它部署springboot项目

1.下载jdkhttps://repo.huaweicloud.com/java/jdk/11.0.2+9/https://www.oracle.com/java/technologies/javas...

PL/SQL 杂谈(六)(pl/sql for)

承接(五)。内容书写不容易,各位友友们,如果可以,麻烦点个赞,让我有动力可以写下去。这节主要谈谈关于SQL*Plus的其他任务。SQL*Plus有大量命令,但由于文章字数有限,我们只能聊一聊那...

快速解决Win远程桌面CredSSP加密数据库修正问题!

前不久我做渗透测试时,在Win10下通过Mstsc访问服务器的3389端口时,遇到了“身份验证错误,要求的函数不受支持”这个错误。这通常是由于客户端和服务器的CredSSP加密协议不匹配导致的。(一...

报表服务器SSRS的安装和Oracle database的配置

WindowsServer2022NETFramework3.5SQLServer2022(FromServerCNQSQLDB01)SQLServerManagementStudi...

网络安全面试题-SQL注入问题总结(sql注入攻击的防护方法)

一、知识储备类1.SQL与NoSQL的区别?SQL:关系型数据库NoSQL:非关系型数据库存储方式:SQL具有特定的结构表,NoSQL存储方式灵活性能:NoSQL较优于SQL数据类型:SQL适用结构化...

运维日记|postgresql-利剑出鞘-psql出手,天下我有

小编最近看了电影《利剑出鞘》,结局中,反派错拿了一把道具刀导致报复失败,所以说,选对工具很重要。在postgresql数据库中,有这样一个工具不得不提,那就是psql,掌握好psql,那么在运维管理p...

2021款14寸MacBook Pro使用体验真实感受

购买的2021款MacBookPro是14寸的加配10核心M1Pro芯片,32g内存,512g存储。已经使用两周了,说说这段时间的使用体验。1.外观和2015款的13寸对比,他俩的大小、尺寸、重量...

渗透测试岗位面试分享,多年经验(渗透测试岗位面试分享,多年经验怎么写)

综合启明星辰多年招聘渗透测试工程师的经验,发现有很多面试者喜欢说没接触过这个没接触过那个,都没接触过为什么要来面试,录取你的理由是什么?在面试中真遇到你不懂的技术问题,千万不要说没接触过,你可以说一些...

在 Spring Boot3 中如何轻松连接并操作 SQLLite 数据库?

你是不是正在为在SpringBoot3项目里连接并操作SQLLite数据库而发愁?在实际的软件开发过程中,选择轻量级且易于部署的数据库至关重要。当面对小型项目、资源受限的环境,或是对部署便捷...

PHP开源项目ADOdb曝CVSS满分SQL注入漏洞

IT之家5月5日消息,PHP开源项目ADOdb于上周发布了v5.22.9版本,该版本主要修复一项CVSS风险评分高达10分(满分)的严重安全漏洞CVE-2025-46337...

Maven常用命令(maven用法)

一、Maven常用命令及其介绍命令描述mvnclean对项目进行清理,删除target目录下编译的内容mvncompile编译项目源代码mvntest对项目进行运行测试mvnpackage打包...

oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复

oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错...

Java单向代码执行链配合的动态代码上下文执行

Java反序列化漏洞的危害不光在于普通gadgets能够带来的命令执行,由于Java应用的使用场景以及gadgets大多都是构造出单向代码执行,一般通过利用链构造出的单向代码链能做到的能力往往有限。而...

如果可以从历史上抹去一种编程语言,你会选择哪个?

假设你获得一个程序员界的“死亡笔记”,但只能写下一种编程语言的名字,然后这门语言就会从历史中彻底抹除——没有它的发明、没有它的生态、更没有它写下的那几百万行遗产代码。你,会选择谁?是“人人喊打”的P...

取消回复欢迎 发表评论: