Python 连接 Redis 进行增删改查(CRUD)操作

文章目录

  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 介绍
  • 安装 `redis-py`
  • 连接 Redis
  • 增加(Create)
  • 查询(Read)
  • 更新(Update)
  • 删除(Delete)
  • 其他常用操作
    • 检查键是否存在
    • 设置键的过期时间
    • 获取键的过期时间
    • 使用哈希类型存储数据
  • 总结
  • 完整示例
    • 代码说明:
    • 运行结果示例:
    • 总结


Python 连接 Redis 进行增删改查(CRUD)操作

介绍

Redis 是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),广泛用于缓存、会话管理、消息队列等场景。本文将介绍如何在 Python 中使用 redis-py 库连接 Redis 数据库,并进行常见的增删改查操作。

安装 redis-py

首先,需要安装 redis-py 库,这是 Python 与 Redis 交互的官方客户端。

pip install redis

连接 Redis

在进行增删改查操作前,我们首先需要连接到 Redis 服务器。假设 Redis 服务运行在本地默认端口 6379。

import redis# 连接到 Redis 服务
r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)

参数说明:

  • host:Redis 服务的主机,默认是 'localhost'
  • port:Redis 服务的端口,默认是 6379
  • db:选择使用的数据库,Redis 默认有 16 个数据库,编号从 0 到 15,默认连接的是 db=0
  • decode_responses=True:确保返回的结果是字符串,而不是字节。

增加(Create)

Redis 支持多种数据结构的操作,我们可以使用 set() 方法来设置一个键值对。

# 设置一个字符串类型的键值对
r.set('name', 'John Doe')# 设置多个键值对
r.mset({'age': 30, 'city': 'New York'})
  • set():设置一个键的值,如果该键已经存在,则会覆盖原有的值。
  • mset():批量设置多个键值对。

查询(Read)

可以通过 get() 方法来获取 Redis 中存储的值。

# 获取单个键的值
name = r.get('name')
print(f'Name: {name}')  # 输出: Name: John Doe# 获取多个键的值
values = r.mget('name', 'age', 'city')
print(values)  # 输出: ['John Doe', '30', 'New York']
  • get():获取指定键的值。
  • mget():批量获取多个键的值。

更新(Update)

Redis 的更新操作其实是通过 set() 来实现的,因为 set() 会覆盖已存在的键值对。

# 更新键 'age' 的值
r.set('age', 35)
print(r.get('age'))  # 输出: 35

删除(Delete)

如果需要删除一个键值对,可以使用 delete() 方法。

# 删除键 'city'
r.delete('city')
print(r.get('city'))  # 输出: None,因为键 'city' 已被删除
  • delete():删除指定的键,如果键不存在,什么都不做。

其他常用操作

除了基本的 CRUD 操作外,Redis 还支持一些其他有用的操作:

检查键是否存在

# 检查键 'name' 是否存在
exists = r.exists('name')
print(exists)  # 输出: True

设置键的过期时间

# 设置键 'name' 在 10 秒后过期
r.expire('name', 10)

获取键的过期时间

# 获取键 'name' 的剩余过期时间
ttl = r.ttl('name')
print(ttl)  # 输出: 剩余的秒数

使用哈希类型存储数据

Redis 还支持哈希类型,适用于存储结构化数据。可以使用 hset(), hget() 等方法操作哈希。

# 设置哈希键 'user',并存储字段 'name' 和 'age'
r.hset('user', 'name', 'John Doe')
r.hset('user', 'age', 30)# 获取哈希中的字段
name = r.hget('user', 'name')
age = r.hget('user', 'age')
print(f'Name: {name}, Age: {age}')

总结

本文展示了如何在 Python 中使用 redis-py 库连接 Redis 并进行增删改查操作。Redis 的灵活性和高效性使其成为构建高性能应用的理想选择。除了本文介绍的基本操作,Redis 还提供了许多高级功能,如事务、管道、发布订阅等,可以根据具体应用场景进一步扩展。


完整示例

展示如何使用 Python 连接 Redis,并进行增、查、改、删等操作。将使用 redis-py 库,并使用 Redis 的多种数据结构进行操作。示例将包括基本的字符串操作、哈希操作、以及如何设置键的过期时间。

import redis# 连接到 Redis 服务
r = redis.StrictRedis(host='localhost', port=6379, db=0, decode_responses=True)# 1. 增加(Create)操作
# 设置字符串类型的键值对
r.set('name', 'John Doe')
r.set('age', 30)
r.set('city', 'New York')# 设置一个哈希类型的键值对
r.hset('user:1000', 'name', 'Alice')
r.hset('user:1000', 'age', 25)# 批量设置多个键值对
r.mset({'country': 'USA', 'language': 'English'})# 打印结果
print(f"Set 'name': {r.get('name')}")
print(f"Set 'age': {r.get('age')}")
print(f"Set 'city': {r.get('city')}")
print(f"Set 'country' and 'language': {r.mget('country', 'language')}")# 2. 查询(Read)操作
# 获取单个键值
print("\n--查询操作--")
name = r.get('name')
print(f"Name: {name}")# 获取多个键值
user_data = r.mget('name', 'age', 'city', 'country', 'language')
print(f"User data: {user_data}")# 获取哈希中的字段
user_name = r.hget('user:1000', 'name')
user_age = r.hget('user:1000', 'age')
print(f"User 1000 Name: {user_name}, Age: {user_age}")# 3. 更新(Update)操作
# 更新字符串类型的值
r.set('age', 35)
print(f"Updated 'age': {r.get('age')}")# 更新哈希中的字段
r.hset('user:1000', 'age', 26)
print(f"Updated 'user:1000' age: {r.hget('user:1000', 'age')}")# 4. 删除(Delete)操作
# 删除单个键
r.delete('city')
print(f"Deleted 'city', current value: {r.get('city')}")# 删除哈希中的字段
r.hdel('user:1000', 'name')
print(f"Deleted 'name' from 'user:1000', current fields: {r.hgetall('user:1000')}")# 5. 设置键的过期时间
# 设置 'country' 键在 5 秒后过期
r.expire('country', 5)
print(f"Is 'country' key expired? {r.exists('country')}")  # 初始为 True# 等待 6 秒钟,键应该过期
import time
time.sleep(6)
print(f"After waiting 6 seconds, is 'country' expired? {r.exists('country')}")  # 应该为 False# 6. 其他操作:检查键是否存在
key_exists = r.exists('name')
print(f"Does 'name' exist? {key_exists}")# 获取键的剩余生存时间
ttl = r.ttl('age')
print(f"The remaining time-to-live for 'age' is: {ttl} seconds")# 获取哈希中所有字段和值
user_data_all = r.hgetall('user:1000')
print(f"All fields in 'user:1000': {user_data_all}")# 完成
print("\n-- 完成所有操作 --")

代码说明:

  1. 连接 Redis
    使用 redis.StrictRedis() 来创建一个 Redis 连接对象,指定主机名、端口和数据库索引。这里使用了 decode_responses=True,让返回的结果是字符串而不是字节。

  2. 增(Create)操作

    • 使用 set() 设置字符串类型的键值对。
    • 使用 hset() 设置哈希类型的字段。
    • 使用 mset() 批量设置多个键值对。
  3. 查(Read)操作

    • 使用 get() 获取单个字符串类型的值。
    • 使用 mget() 批量获取多个键的值。
    • 使用 hget() 获取哈希类型的指定字段的值。
    • 使用 hgetall() 获取哈希中所有的字段及其对应的值。
  4. 改(Update)操作
    更新操作通过调用 set()hset() 来实现。Redis 会自动覆盖已有的值。

  5. 删(Delete)操作

    • 使用 delete() 删除单个键。
    • 使用 hdel() 删除哈希中的某个字段。
  6. 过期时间
    使用 expire() 设置键的过期时间,单位为秒。使用 ttl() 获取剩余的生存时间。

  7. 检查键是否存在
    使用 exists() 判断一个键是否存在。

运行结果示例:

Set 'name': John Doe
Set 'age': 30
Set 'city': New York
Set 'country' and 'language': ['USA', 'English']--查询操作--
Name: John Doe
User data: ['John Doe', '30', 'New York', 'USA', 'English']
User 1000 Name: Alice, Age: 25Updated 'age': 35
Updated 'user:1000' age: 26
Deleted 'city', current value: None
Deleted 'name' from 'user:1000', current fields: {'age': '26'}Is 'country' key expired? True
After waiting 6 seconds, is 'country' expired? False
Does 'name' exist? True
The remaining time-to-live for 'age' is: -1 seconds
All fields in 'user:1000': {'age': '26'}-- 完成所有操作 --

总结

通过这个完整的示例,我们展示了如何使用 Python 通过 redis-py 库与 Redis 进行基本的增删改查操作,并且涵盖了 Redis 中一些常用的功能,如设置过期时间和检查键是否存在。这些操作适用于缓存管理、会话存储、实时数据处理等应用场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470932.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能测试|JMeter接口与性能测试项目

前言 在软件开发和运维过程中,接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用,被广泛用于进行各种性能测试,包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

OpenGL ES 共享上下文实现多线程渲染

OpenGL ES 共享上下文时,可以共享哪些资源? 共享上下文实现多线程渲染 EGL 概念回顾 EGL 是 OpenGL ES 和本地窗口系统(Native Window System)之间的通信接口,它的主要作用: 与设备的原生窗口系统通信; 查询绘图表面的可用类型和配置; 创建绘图表面; 在OpenGL ES 和…

应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片

关于车规级芯片(Automotive Grade Chip),车规级芯片是专门用于汽车行业的芯片,具有高可靠性、高稳定性和低功耗等特点,以满足汽车电子系统的严格要求。这些芯片通常用于车载电子控制单元(ECU)和…

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别,可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网: ​安装 WSL 前提 以下基于windows 111专业版进行配置,windows 10应该也是可以…

豆瓣均分9:不容错过的9本大模型入门宝藏书籍,非常详细收藏我这一篇就够了

在这个大模型风起云涌的时代,技术的边界被不断拓宽,AI的力量正以前所未有的方式重塑我们的世界。如果你渴望站在技术的浪尖,深入了解增强现实(AR)、机器学习(ML)与强化学习(RL&#…

OCR识别铁路电子客票

随着中国铁路客运领域进入全面数字化时代,国家税务总局、财政部和国铁集团于2024年10月18日联合发布公告,自2024年11月1日起,推广使用“电子发票(铁路电子客票)”。这一举措不仅为旅客出行提供了极大的便利&#xff0c…

【学习】Fine-tuning知识汇总

Fine-tuning 微调(Fine-tuning)是一种迁移学习的方法,用于在一个预训练模型的基础上,通过在特定任务的数据上进行有监督训练,来适应该任务的要求并提高模型性能。微调利用了预训练模型在大规模通用数据上学习到的语言…

qt QKeySequence详解

1、概述 QKeySequence 是 Qt 框架中的一个类,用于表示和处理键盘快捷键序列。它提供了一种方便的方式来解析、存储和比较键盘快捷键,这些快捷键通常用于触发应用程序中的特定操作或命令。QKeySequence 支持多种格式的快捷键表示,包括单个按键…

【MySQL】约束

4. 约束 4.1 概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。 4.2 约束…

css:盒子模型

目录 盒子模型 边框(border) 内边距(padding) 外边距(margin) 盒子模型,浮动,定位 把一只大象塞进冰箱里需要三步:打开冰箱门,把大象塞进去,…

【最新版】Stable Diffusion4.9(AI绘画)下载及安装教程(附软件安装包)!

NO.1 软件下载 软件名称:Stable Diffusion4.9(SD)软件语言:中文软件大小:9.6G系统要求:Windows10或更高,64位操作系统 NO.2 软件介绍 Stable Diffusion Stable Diffusion是一款前沿AI绘画工…

微服务(二)

目录 1.网关路由 1.1.认识网关 1.2.快速入门 1.2.1.引入依赖 1.2.2.启动类 1.2.3.配置路由 1.3.路由过滤 2.网关登录校验 2.1.鉴权思路分析 2.2.网关过滤器 2.3.自定义过滤器 2.3.1.自定义GatewayFilter 2.3.2.自定义GlobalFilter 2.4.登录校验 2.4.1.JWT工具 …

uniCloud云对象调用第三方接口,根据IP获取用户归属地的免费API接口,亲测可用

需求 在2022年5月初,网络上各大平台上,都开始展示用户IP属地,在某音、某手等小视频平台以及各主流网站应用中,都展示IP归属地,如下图所示: 解决办法 收费文档的肯定有很多,基本你百度搜“归…

基于标签相关性的多标签学习

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

C++中的栈(Stack)和堆(Heap)

在C中,堆(heap)和栈(stack)是两种用于存储数据的内存区域。理解它们的原理和区别,对于优化代码性能和确保代码的安全性至关重要。以下是对C中堆栈的详细解析,包括它们的分配方式、优缺点、应用场…

搭建Python2和Python3虚拟环境

搭建Python3虚拟环境 1. 更新pip2. 搭建Python3虚拟环境第一步:安装python虚拟化工具第二步: 创建虚拟环境 3. 搭建Python2虚拟环境第一步:安装虚拟环境模块第二步:创建虚拟环境 4. workon命令管理虚拟机第一步:安装扩…

文件夹被占用了无法删除怎么办?强制粉碎文件夹你可以这样操作

在日常使用电脑的过程中,我们可能会遇到一些难以删除的文件夹,这不仅影响了我们的工作效率,还可能隐藏着潜在的安全风险。本文简鹿办公将向您介绍为什么某些文件夹无法直接删除,以及如何利用360安全卫士极速版等工具彻底粉碎这些顽…

Python 随笔

转移字符 \a 用于触发系统蜂鸣器(要在shell上才行) print里面用 括起来的内容位置是 """ """括起来啥样,输出啥样 任何值都可以当作i条件: 是直接把两…

某app最新版 vmp算法分析一

本系列预计3篇 某app使用了一种X开头的HTTP 签名。该应用程序对服务器的请求在其标头中有6个x签名。该应用程序通常使用此签名来确保数据的安全性和完整性。代号花露水. 6个x签名都来自古希腊神话中的某个神. 分别是蛇发女妖(G),柯罗诺斯(K,时间之神),拉顿(L),阿尔戈斯(A),赫…