当前位置: 首页 > news >正文

如何使用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 格式。适用于训练和评估强化学习算法,提供了大量的强化学…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

LLM基础1_语言模型如何处理文本

基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

算术操作符与类型转换:从基础到精通

目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...