当前位置:首页 > 技术分析 > 正文内容

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

ruisui882个月前 (03-10)技术分析8

直接上代码:

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即可。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2653.html

分享给朋友:

“Python使用Redis,Redis连接池的用法” 的相关文章

JavaScript数组操作:掌握常用方法,提升开发效率

JavaScript数组操作:从增删改查到高级应用本文深入解析JavaScript中常用的数组方法,包括push、unshift、pop、shift、map、filter、reverse、at 和 slice。通过详细的例子和应用场景,帮助开发者快速掌握这些方法,提升代码效率和可读性。开篇点题作为J...

Vue进阶(幺叁捌):vue路由传参的几种基本方式

1、动态路由(页面刷新数据不丢失)methods:{ insurance(id) { //直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/particulars/${id}`,...

一起学Vue:路由(vue-router)

前言学习vue-router就要先了解路由是什么?前端路由的实现原理?vue-router如何使用?等等这些问题,就是本篇要探讨的主要问题。vue-router是什么路由是什么?大概有两种说法:从路由的用途上来解释路由就是指随着浏览器地址栏的变化,展示给用户的页面也不相同。从路由的实现原理上来解释路...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...

Vue真是太好了 壹万多字的Vue知识点 超详细!

1??、Vue和其他两大框架的区别Angular 学习成本太高React 代码可读性差Vue 学习成本较低 很容易上手VUE官方: https://cn.vuejs.org/v2/guide/comparison.html?2??、Vue是什么Vue是一套用于构建用户界面的渐进式框架 "前端...

vue 开发规范

项目运行指南(#项目运行指南)开发本地环境(#开发本地环境)开发相关插件/工具(#开发相关插件工具)开发规范(#开发规范)vue(#vue)【数据流向】(#数据流向)【慎用全局注册】(#慎用全局注册)【组件名称】(#组件名称)【组件中的 CSS】(#组件中的-css)【统一标签顺序】(#统一标签顺序...