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

embedded/2024/11/15 3:08:12/

文章目录

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


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

介绍

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

redispy_10">安装 redis-py

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

pip install redis

连接 Redis

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

python">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() 方法来设置一个键值对。

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

查询(Read)

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

python"># 获取单个键的值
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() 会覆盖已存在的键值对。

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

删除(Delete)

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

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

其他常用操作

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

检查键是否存在

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

设置键的过期时间

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

获取键的过期时间

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

使用哈希类型存储数据

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

python"># 设置哈希键 '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 的多种数据结构进行操作。示例将包括基本的字符串操作、哈希操作、以及如何设置键的过期时间。

python">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.ppmy.cn/embedded/137654.html

相关文章

Cent OS-7的Apache服务配置

WWW是什么? WWW(World Wide Web,万维网)是一个全球性的信息空间,其中的文档和其他资源通过URL标识,并通过HTTP或其他协议访问。万维网是互联网的一个重要组成部分,但它并不是互联网的全部。互联…

kafka和Flume的整合

目录 一、Kafka作为Source 【数据进入到kafka中,抽取出来】 1、在我的flume的conf文件夹下,有个myconf文件夹: 2、 创建一个flume脚本文件: kafka-memory-logger.conf 3、测试 二、kafka作为Sink 【数据从别的地方抽取到kafka里…

WordPress HTTPS 配置问题解决方案

问题描述: 由于删除缓存插件并进行升级处理后,WordPress 网站出现了 HTTPS 不兼容问题,导致后台无法登录,首页样式错乱,图片无法显示等问题。经过一番折腾,最终解决了该问题。以下是解决方法和步骤。 问题…

Python——飞机大战

以下是一个简单的用Python编写的飞机大战游戏的源代码: import pygame import random# 初始化游戏 pygame.init()# 设置游戏窗口的尺寸 screen_width 480 screen_height 640 screen pygame.display.set_mode((screen_width, screen_height))# 设置游戏标题 pyga…

蓝队知识浅谈(中)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:蓝队基础之网络七层杀伤链_哔哩哔哩_bilibili 本文主要分享一些蓝队相关的知识。 一、网络杀伤链 网络杀伤链(Cyber Kill Chain&…

恒创科技:什么是 RAID 3 ? RAID 3、4 和5之间有什么区别?

RAID 是一种存储数据以提高性能并减少数据丢失的特定技术。您可以根据自己的需求选择多种 RAID 类型。RAID 3 是列表中比较有效的类型之一。本文将重点介绍这种特定的 RAID 技术,并比较 RAID 3、4 和 5。 RAID 3 的定义 RAID 3 是一种特定的磁盘配置,用于…

UE5遇到问题记录

问题描述: 在让敌人自动追踪玩家的时候一开始运行就会播放攻击的动画 解决方法: 这样是因为敌人一开始就检测到自己了,所以触发动画。 方式一:加一个条件 方式二:改一下碰撞预设

花了36元给我的个人博客上了一道防御

前言 双11活动薅了个羊毛,1折的价格买了一年的EdgeOne,正好可以为我的个人博客站点保驾护航。本文就来看看个人博客接入EdgeOne后的效果,如果也想薅羊毛的,赶紧去双11活动页面,不要错过这次机会。 EdgeOne 介绍 先简…