如何使用Python库连接Redis
1、redis-py 库封装一个 Redis 工具类可以帮助我们简化 Redis 的操作并提高代码的复用性和可维护性。
- 安装
redis
pip install redis
import redis
import logginglogging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)class RedisUtils:def __init__(self, host='localhost', port=6379, db=0, decode_responses=True,password=None):"""初始化 Redis 连接:param host: Redis 主机,默认为 localhost:param port: Redis 端口,默认为 6379:param db: Redis 数据库,默认为 0:param decode_responses: 如果为 True,则自动解码 Redis 返回的字节串为字符串:param password: Redis密码(如果设置了密码)"""self.host = hostself.port = portself.db = dbself.decode_responses = decode_responses# 创建 Redis 连接实例self.redis = redis.StrictRedis(host=self.host,port=self.port, db=self.db, decode_responses=self.decode_responses,password=password)def set(self, key, value, ex=None, px=None, nx=False, xx=False):"""设置 Redis 键值对:param key: 键:param value: 值:param ex: 键值对过期时间(秒):param px: 键值对过期时间(毫秒):param nx: 只在键不存在时设置:param xx: 只在键存在时设置:return: 执行结果(True 或 False)"""try:result = self.redis.set(key, value, ex=ex, px=px, nx=nx, xx=xx)logger.info(f"Set key '{key}' with value '{value}'")return resultexcept Exception as e:logger.error(f"Error setting key '{key}': {e}")return Nonedef get(self, key):"""获取 Redis 键的值:param key: 键:return: 值(如果不存在则返回 None)"""try:value = self.redis.get(key)logger.info(f"Get key '{key}' with value '{value}'")return valueexcept Exception as e:logger.error(f"Error getting key '{key}': {e}")return Nonedef delete(self, key):"""删除 Redis 键:param key: 键:return: 删除结果(删除的键的数量)"""try:result = self.redis.delete(key)logger.info(f"Deleted key '{key}'")return resultexcept Exception as e:logger.error(f"Error deleting key '{key}': {e}")return Nonedef exists(self, key):"""判断 Redis 键是否存在:param key: 键:return: 是否存在(True 或 False)"""try:exists = self.redis.exists(key)logger.info(f"Key '{key}' exists: {exists}")return existsexcept Exception as e:logger.error(f"Error checking existence of key '{key}': {e}")return Falsedef hset(self, name, key, value):"""设置哈希表中的字段:param name: 哈希表名:param key: 字段名:param value: 字段值:return: 执行结果"""try:result = self.redis.hset(name, key, value)logger.info(f"Set hash '{name}' field '{key}' with value '{value}'")return resultexcept Exception as e:logger.error(f"Error setting hash '{name}' field '{key}': {e}")return Nonedef hget(self, name, key):"""获取哈希表中的字段:param name: 哈希表名:param key: 字段名:return: 字段值"""try:value = self.redis.hget(name, key)logger.info(f"Get hash '{name}' field '{key}' with value '{value}'")return valueexcept Exception as e:logger.error(f"Error getting hash '{name}' field '{key}': {e}")return Nonedef lpush(self, name, *values):"""向 Redis 列表左侧插入元素:param name: 列表名:param values: 要插入的值:return: 执行结果(列表长度)"""try:result = self.redis.lpush(name, *values)logger.info(f"LPush to list '{name}' values {values}")return resultexcept Exception as e:logger.error(f"Error pushing to list '{name}': {e}")return Nonedef lrange(self, name, start, end):"""获取 Redis 列表中的元素:param name: 列表名:param start: 起始索引:param end: 结束索引:return: 列表元素"""try:values = self.redis.lrange(name, start, end)logger.info(f"LRANGE from list '{name}' from index {start} to {end} with values {values}")return valuesexcept Exception as e:logger.error(f"Error getting range from list '{name}': {e}")return Nonedef sadd(self, name, *values):"""向 Redis 集合添加元素:param name: 集合名:param values: 要添加的值:return: 添加的元素数量"""try:result = self.redis.sadd(name, *values)logger.info(f"SAdd to set '{name}' values {values}")return resultexcept Exception as e:logger.error(f"Error adding to set '{name}': {e}")return Nonedef smembers(self, name):"""获取 Redis 集合中的所有元素:param name: 集合名:return: 集合中的元素"""try:values = self.redis.smembers(name)logger.info(f"SMEMBERS from set '{name}' with values {values}")return valuesexcept Exception as e:logger.error(f"Error getting members from set '{name}': {e}")return Nonedef close(self):"""关闭 Redis 连接"""try:self.redis.close()logger.info("Redis connection closed.")except Exception as e:logger.error(f"Error closing Redis connection: {e}")
2、redis-py-cluster 是一个 Python 库,它允许你使用 Redis 集群
- 安装
redis-py-cluster
pip install redis-py-cluster
from rediscluster import RedisCluster
import logging# 设置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)class RedisClusterUtils:def __init__(self, startup_nodes, decode_responses=True,password=None):"""初始化 Redis 集群连接:param startup_nodes: Redis 集群的初始节点列表:param decode_responses: 如果为 True,自动解码 Redis 返回的字节串为字符串"""self.startup_nodes = startup_nodesself.decode_responses = decode_responsesself.password = passwordtry:# 初始化 Redis 集群客户端self.redis = RedisCluster(startup_nodes=startup_nodes, decode_responses=decode_responses,password=password)logger.info("Connected to Redis cluster successfully.")except Exception as e:logger.error(f"Error connecting to Redis cluster: {e}")raisedef set(self, key, value, ex=None, px=None, nx=False, xx=False):"""设置 Redis 键值:param key: 键:param value: 值:param ex: 设置过期时间(秒):param px: 设置过期时间(毫秒):param nx: 只在键不存在时设置:param xx: 只在键存在时设置:return: 执行结果"""try:result = self.redis.set(key, value, ex=ex, px=px, nx=nx, xx=xx)logger.info(f"Set key '{key}' with value '{value}'")return resultexcept Exception as e:logger.error(f"Error setting key '{key}': {e}")return Nonedef get(self, key):"""获取 Redis 键的值:param key: 键:return: 值"""try:value = self.redis.get(key)logger.info(f"Get key '{key}' with value '{value}'")return valueexcept Exception as e:logger.error(f"Error getting key '{key}': {e}")return Nonedef delete(self, key):"""删除 Redis 键:param key: 键:return: 删除操作的结果"""try:result = self.redis.delete(key)logger.info(f"Deleted key '{key}'")return resultexcept Exception as e:logger.error(f"Error deleting key '{key}': {e}")return Nonedef hset(self, name, key, value):"""设置哈希表字段:param name: 哈希表名:param key: 字段:param value: 值:return: 执行结果"""try:result = self.redis.hset(name, key, value)logger.info(f"Set hash '{name}' field '{key}' with value '{value}'")return resultexcept Exception as e:logger.error(f"Error setting hash '{name}' field '{key}': {e}")return Nonedef hget(self, name, key):"""获取哈希表字段的值:param name: 哈希表名:param key: 字段:return: 字段值"""try:value = self.redis.hget(name, key)logger.info(f"Get hash '{name}' field '{key}' with value '{value}'")return valueexcept Exception as e:logger.error(f"Error getting hash '{name}' field '{key}': {e}")return Nonedef lpush(self, name, *values):"""向列表左侧插入数据:param name: 列表名:param values: 要插入的值:return: 执行结果"""try:result = self.redis.lpush(name, *values)logger.info(f"LPush to list '{name}' values {values}")return resultexcept Exception as e:logger.error(f"Error pushing to list '{name}': {e}")return Nonedef lrange(self, name, start, end):"""获取列表中的元素:param name: 列表名:param start: 起始索引:param end: 结束索引:return: 列表元素"""try:values = self.redis.lrange(name, start, end)logger.info(f"LRANGE from list '{name}' from index {start} to {end} with values {values}")return valuesexcept Exception as e:logger.error(f"Error getting range from list '{name}': {e}")return Nonedef pipeline(self):"""创建 Redis 管道操作:return: 管道对象"""return self.redis.pipeline()def scan(self, cursor=0, match=None, count=None):"""使用 SCAN 命令遍历 Redis 键:param cursor: 游标:param match: 匹配模式:param count: 每次扫描的数量:return: (游标, 键列表)"""try:cursor, keys = self.redis.scan(cursor, match=match, count=count)logger.info(f"SCAN with cursor {cursor}, found keys {keys}")return cursor, keysexcept Exception as e:logger.error(f"Error scanning keys: {e}")return cursor, []def close(self):"""关闭 Redis 连接"""try:self.redis.close()logger.info("Redis connection closed.")except Exception as e:logger.error(f"Error closing Redis connection: {e}")相关文章:
如何使用Python库连接Redis
1、redis-py 库封装一个 Redis 工具类可以帮助我们简化 Redis 的操作并提高代码的复用性和可维护性。 安装redis pip install redisimport redis import logginglogging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__)class RedisUtils:def __init__(s…...
Vant UI +Golang(gin) 上传文件
前端基本用法:点击查看 实现代码: const afterRead (file) > {console.log(file);//set content-type to multipart/form-dataconst formData new FormData();formData.append("file", file.file);request.POST("/api/v1/users/up…...
【Unity高级】如何实现粒子系统的间歇式喷射
先看下要最终实现的效果: 代码如下: using UnityEngine; using System.Collections;public class ParticleBurstController : MonoBehaviour {private ParticleSystem _particleSystem; // 获取粒子系统public float burstDuration 2f; // 每次…...
通过linux命令获取自选股票价格及大盘涨跌幅
技术发展与数据获取需求 互联网与金融数据融合:随着互联网的普及和金融市场的数字化发展,金融数据的获取和分析变得更加便捷和重要。投资者希望能够及时、准确地获取股票价格和市场指数等信息,以便做出合理的投资决策。Linux 作为一种强大的操作系统,为数据获取和处理提供…...
透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
本篇的实例基于Maven IDE (VS Code) 运行 在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…...
vue3字典数据的显示问题(使用hooks解决)
我们在使用 element-plus的时候,经常会使用一些字典数据, 在搜索框的时候,字典数数要使用 el-select el-option 来显示,当在table表格的时候,我们通常记录的是 字典数据的id , 又要把它改变成 字典数据的 name 属性 因…...
Elasticsearch 单节点安全配置与用户认证
Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节…...
二分查找(带图详解)
优选算法系列 文章目录 优选算法系列前言一、二分查找的思想二、算法使用小总结 三、代码实现四、二分查找拓展4.1、查找第一次出现的target小总结 4.2、target最后出现的位置小总结 五、代码总结 前言 在这篇博客中,我会给大家分享二分查找及其扩展。 这是链接-&…...
【Git】:标签管理
目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…...
物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉
0. 要实现的效果 让树莓派可以识别身边的一些物品,比如电脑,鼠标,键盘,杯子,行李箱,双肩包,床,椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...
单片机软件工程师前景分析
单片机软件工程师的前景在2024年看起来是积极的。随着物联网(IoT)、自动化、智能设备等领域的快速发展,对于能够开发基于单片机(MCU)如STM32、ARM、51等嵌入式系统的软件工程师需求持续增长。这些工程师负责设计和实现…...
在Java中几种常用数据压缩算法的实现及其优劣势
在Java中几种常用数据压缩算法的实现及其优劣势 背景:项目需要引入Redis作为缓存组件,需要考虑到Redis的内存占用(机器内存越大,成本越高),因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...
Word——如何打出 符号中的 1、2、3等带圆圈的序号
一、方式1 1.1:点击 插入-符号 1.2:字体 选择 Wingdings 或者 Wingdings 2 二、方式2 带1的圈:输入 2460,然后按 AItX 带2的圈:输入 2461,然后按 AItX 带3的圈:输入 2462,然后按 …...
操作系统之进程与线程
进程 定义: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。 组成: 包括程序代码、程序处理的数据、程序计数器、一组寄存器的值以及系统资源(如打开的文件)等。 …...
代码随想录算法训练营打卡第35天:背包问题
前言 zaccheo打卡代码随想录第35天 由于这段时间工作太忙了(加上我的懒病犯了)导致迟打卡了好几天555555.。。。 今天的主要是动态规划中的背包问题,这个真的是蛮难理解的,我把我自己强行按在椅子上半个小时一点一点的看卡哥文章…...
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…...
vscode(一)安装(ubuntu20.04)
1、更新软件包列表 sudo apt update2、安装依赖包 sudo apt install software-properties-common apt-transport-https wget3、导入Microsoft GPG密钥 wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -4、向系统添加VSCode存储库 sudo…...
利用永恒之蓝对win7进行键盘记录
打开kali中的msfconsole 找到永恒之蓝,设置靶机ip,后可以exploit,也可以run 连接成功 查看进程,选择监听靶机win7上的cmd.exe进程 当前进程不是1484,需要迁移到1484 cmd.exe,进程迁移 键盘监听,…...
万字长文解读深度学习——dVAE(DALL·E的核心部件)
🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总 万字长…...
RL仿真库pybullet
1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口,主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型,例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法,提供了大量的强化学…...
终极指南:3分钟实现Figma完整中文界面本地化
终极指南:3分钟实现Figma完整中文界面本地化 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN FigmaCN是一款专为中文设计师打造的浏览器插件,通过3800条人工校验的…...
2026年最新出炉!汉中装修公司口碑排行榜大揭秘来了!
装修是一件大事,关乎着未来生活的品质和舒适度。在汉中,众多装修公司让人眼花缭乱,如何选择一家靠谱的装修公司成为了许多业主的难题。今天,我们就来揭秘2026年汉中装修公司口碑排行榜,重点推荐汉中恒丰装饰࿰…...
VTK三维模型导出实战:STL、OBJ与PLY格式的性能对比与应用场景解析
1. 三维模型导出格式概述 第一次接触三维模型导出时,我被各种文件格式搞得晕头转向。STL、OBJ、PLY这些格式到底有什么区别?为什么有的文件特别大,有的又特别小?经过几个项目的实战,我终于摸清了门道。三维模型导出本质…...
七牛云CDN加速+HTTPS配置全攻略(阿里云域名解析实战)
七牛云CDN加速HTTPS配置全攻略(阿里云域名解析实战) 当你的网站访问速度开始影响用户体验,或是浏览器频繁弹出"不安全"警告时,CDN加速和HTTPS配置就成了刚需。七牛云作为国内领先的云服务商,提供了从存储到…...
腾讯云/阿里云服务器上,用娃娃一键端30分钟搞定DNF私服(附端口安全组避坑指南)
腾讯云/阿里云30分钟极速部署DNF私服全攻略:从安全组配置到五国启动 最近在游戏开发者社区里,不少朋友都在讨论如何在云服务器上快速搭建DNF私服体验服。作为一名长期混迹于各类游戏私服搭建的老玩家,我发现大多数教程要么过于专业化…...
YOLOv8推理慢?CPU深度优化技巧让速度提升2倍
YOLOv8推理慢?CPU深度优化技巧让速度提升2倍 你是不是也遇到过这种情况?部署了YOLOv8模型,功能强大,检测精准,但一到实际推理就卡得不行,CPU占用率飙升,处理一张图片要等好几秒。尤其是在没有G…...
LIBERO Benchmark自定义任务避坑指南:手把手教你从零构建厨房场景的BDDL文件
LIBERO Benchmark厨房任务BDDL实战:从场景拆解到避坑全流程 当你第一次打开LIBERO Benchmark的文档,面对那些复杂的项目结构和晦涩的术语时,是否感到无从下手?本文将以一个具体的厨房场景任务为例——"打开橱柜放入杯子&quo…...
Jupyter Notebook内核崩溃?别急着重装!试试这个Anaconda环境修复方案
Jupyter Notebook内核崩溃?别急着重装!Anaconda环境修复全指南 当你正专注地编写代码,突然看到"内核似乎挂掉了,它很快将自动重启"的提示,那种挫败感我深有体会。作为数据科学工作者,Jupyter Not…...
Stash缓存机制终极指南:5个配置技巧大幅提升媒体访问速度
Stash缓存机制终极指南:5个配置技巧大幅提升媒体访问速度 【免费下载链接】stash An organizer for your porn, written in Go. Documentation: https://docs.stashapp.cc 项目地址: https://gitcode.com/gh_mirrors/st/stash Stash是一款用Go语言开发的媒体…...
Nomic-Embed-Text-V2-MoE部署排错指南:解决403 Forbidden等常见API访问错误
Nomic-Embed-Text-V2-MoE部署排错指南:解决403 Forbidden等常见API访问错误 部署一个新的模型服务,就像给家里添置一台新电器,插上电、打开开关,本以为就能顺利运转,结果却发现指示灯不亮,或者干脆跳闸了。…...
