python Redis 操作工具类封装

ops/2024/12/27 5:29:36/

在 Python 中封装 Redis 操作工具类,可以方便地在应用程序中复用 Redis 操作,简化 Redis 操作的复杂度,并提供统一的接口。这里给出一个基本的 Redis 操作工具类封装,使用 redis-py 库,这个库是 Python 与 Redis 交互的标准库。

redispy_2">1. 安装 redis-py

首先需要安装 redis-py 库。如果你没有安装,可以通过以下命令安装:

pip install redis

2. Redis 操作工具类封装

python">import redis
from typing import Optional, Union, Anyclass RedisHelper:def __init__(self, host: str = 'localhost', port: int = 6379, db: int = 0):"""初始化 RedisHelper 类,设置 Redis 连接信息:param host: Redis 服务器主机,默认是 localhost:param port: Redis 服务器端口,默认是 6379:param db: Redis 数据库,默认是 0"""self.redis_client = redis.StrictRedis(host=host, port=port, db=db, decode_responses=True)def set(self, key: str, value: Union[str, int, float], ex: Optional[int] = None) -> bool:"""设置键值对,如果设置了 ex 参数,则键值会在过期时间后自动删除:param key: 键:param value: 值,可以是字符串、整数或浮点数:param ex: 过期时间(秒),默认不设置过期时间:return: 是否成功"""try:if ex:self.redis_client.setex(key, ex, value)else:self.redis_client.set(key, value)return Trueexcept Exception as e:print(f"Error setting key {key}: {e}")return Falsedef get(self, key: str) -> Optional[str]:"""获取指定键的值:param key: 键:return: 键对应的值,如果键不存在,则返回 None"""try:return self.redis_client.get(key)except Exception as e:print(f"Error getting key {key}: {e}")return Nonedef delete(self, key: str) -> bool:"""删除指定键:param key: 键:return: 是否成功"""try:self.redis_client.delete(key)return Trueexcept Exception as e:print(f"Error deleting key {key}: {e}")return Falsedef exists(self, key: str) -> bool:"""检查指定的键是否存在:param key: 键:return: 键是否存在"""try:return self.redis_client.exists(key)except Exception as e:print(f"Error checking existence of key {key}: {e}")return Falsedef set_multiple(self, mapping: dict, ex: Optional[int] = None) -> bool:"""批量设置多个键值对:param mapping: 键值对字典:param ex: 过期时间(秒),可选:return: 是否成功"""try:if ex:for key, value in mapping.items():self.redis_client.setex(key, ex, value)else:self.redis_client.mset(mapping)return Trueexcept Exception as e:print(f"Error setting multiple keys: {e}")return Falsedef get_multiple(self, keys: list) -> dict:"""批量获取多个键的值:param keys: 键列表:return: 键值对字典"""try:values = self.redis_client.mget(keys)return dict(zip(keys, values))except Exception as e:print(f"Error getting multiple keys: {e}")return {}def increment(self, key: str, amount: int = 1) -> Union[int, None]:"""对指定键的值进行自增:param key: 键:param amount: 增量,默认为 1:return: 增加后的值,如果操作失败,则返回 None"""try:return self.redis_client.incrby(key, amount)except Exception as e:print(f"Error incrementing key {key}: {e}")return Nonedef decrement(self, key: str, amount: int = 1) -> Union[int, None]:"""对指定键的值进行自减:param key: 键:param amount: 减量,默认为 1:return: 减少后的值,如果操作失败,则返回 None"""try:return self.redis_client.decrby(key, amount)except Exception as e:print(f"Error decrementing key {key}: {e}")return Nonedef hset(self, hash_name: str, key: str, value: Any) -> bool:"""向哈希表中设置字段值:param hash_name: 哈希表名称:param key: 字段名:param value: 字段值:return: 是否成功"""try:self.redis_client.hset(hash_name, key, value)return Trueexcept Exception as e:print(f"Error setting hash {hash_name}:{key}: {e}")return Falsedef hget(self, hash_name: str, key: str) -> Optional[Any]:"""获取哈希表中的字段值:param hash_name: 哈希表名称:param key: 字段名:return: 字段值,如果字段不存在,则返回 None"""try:return self.redis_client.hget(hash_name, key)except Exception as e:print(f"Error getting hash {hash_name}:{key}: {e}")return Nonedef hgetall(self, hash_name: str) -> dict:"""获取哈希表中的所有字段和值:param hash_name: 哈希表名称:return: 键值对字典"""try:return self.redis_client.hgetall(hash_name)except Exception as e:print(f"Error getting all hash fields for {hash_name}: {e}")return {}# 示例使用
if __name__ == '__main__':redis_helper = RedisHelper()# 设置单个键值对redis_helper.set('name', 'Alice')# 获取单个键值print(redis_helper.get('name'))# 设置多个键值对redis_helper.set_multiple({'age': 30, 'location': 'New York'})# 获取多个键值print(redis_helper.get_multiple(['name', 'age', 'location']))# 增加某个键的值redis_helper.increment('age')print(redis_helper.get('age'))# 设置哈希表redis_helper.hset('user:1000', 'name', 'Alice')print(redis_helper.hget('user:1000', 'name'))

代码说明

  1. 初始化连接:在 __init__ 中,我们通过 redis.StrictRedis 初始化 Redis 连接,可以根据需要传递不同的 Redis 服务器信息。
  2. 基本操作封装
    • setget 分别用于设置和获取键值。
    • delete 用于删除指定的键。
    • exists 用于检查键是否存在。
  3. 批量操作:提供了 set_multipleget_multiple 方法来处理批量的 Redis 操作。
  4. 自增和自减:封装了 incrementdecrement 方法来处理数字类型的键值的增减。
  5. 哈希表操作:通过 hset, hget, 和 hgetall 封装了对 Redis 哈希表的操作。

通过这种封装,代码中的 Redis 操作会更加简洁,且提供了统一的接口,方便日后的维护和扩展。


http://www.ppmy.cn/ops/144781.html

相关文章

Python 爱心代码实现动态爱心图案展示

引言 在 Python 中,我们可以利用 tkinter 库来创建有趣的图形界面,本文将为大家分享一段使用 tkinter 库绘制动态爱心图案的代码,并详细介绍其实现逻辑与运行方法。 一、代码功能概述 这段 Python 代码借助 tkinter 库创建了一个窗口&…

【华为OD-E卷-开心消消乐 100分(python、java、c++、js、c)】

【华为OD-E卷-开心消消乐 100分(python、java、c、js、c)】 题目 给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1。矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0&#…

Meta如何用极致技术实现接近完美的缓存一致性?

0 导言 缓存是一种强大的技术,广泛应用于计算机系统的各个方面,从缓存等硬件到操作系统、网络浏览器,尤其是后端开发。对于 Meta 这样的公司来说,缓存是非常重要的,因为它可以帮助他们减少延迟、扩展繁重的工作负载并…

[创业之路-204]:《华为战略管理法-DSTE实战体系》- 5-平衡记分卡绩效管理

目录 一、平衡计分卡概述 1、平衡计分卡的基本概念 2、平衡计分卡的发展阶段 3、平衡计分卡在华为的应用 4、平衡计分卡的优缺点 五、财务(股东)、顾客(用户)、内部运营(内部)及学习与发展&#xff0…

打造高效租赁小程序让交易更便捷

内容概要 在如今节奏飞快的商业世界里,租赁小程序如同一只聪明的小狐狸,迅速突围而出,成为商家与消费者之间的桥梁。它不仅简化了交易流程,还在某种程度上将传统租赁模式带入了互联网时代。越来越多的企业意识到,这种…

玩转OCR | 探索腾讯云智能结构化识别新境界

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

Java复习|图形用户界面AWT、Swing----银行客户管理系统【校课版】【1】

校课总结,部分,未完待续...... 背景了解 Java的AWT和Swing的现状 AWT(Abstract Window Toolkit) AWT是Java中最早期的图形用户界面(GUI)工具包,它直接与操作系统提供的图形函数进行交互&a…

企业数字化转型中的“烟囱效应”:从小烟囱到大烟囱的折中之道

在当今快速发展的数字化时代,越来越多的企业面临着数字化转型的压力。数字化转型不仅是技术上的革命,也是管理和运营模式的变革。然而,在这一过程中,许多企业深陷“烟囱效应”困境,尤其是在供应链管理和信息系统建设方…