Python 如何使用 Redis 作为缓存
Python 如何使用 Redis 作为缓存
一、引言
在现代 Web 应用程序和数据密集型服务中,性能 和 响应速度 是至关重要的因素。而当应用需要频繁访问相同的数据时,直接从数据库获取数据会耗费大量的时间和资源。因此,缓存系统成为了提升性能的重要技术之一。缓存能够将数据暂存于内存中,从而避免反复查询数据库。
Redis 是一个开源、内存中的数据结构存储系统,它可以用作缓存系统来提高应用程序的响应速度。Redis 支持多种数据结构(如字符串、哈希、列表、集合等),并且具有高性能、持久性和简单易用的特点。在 Python 中,我们可以使用 Redis 库来轻松地将 Redis 集成到我们的应用中,来存储和检索缓存数据。
本文将通过一个通俗易懂的方式,帮助新手理解如何使用 Redis 作为缓存,并结合 Python 实现相关功能。我们将首先介绍 Redis 的基础知识和安装,然后详细讲解如何使用 Python 连接 Redis 并实现缓存。
二、什么是 Redis?
Redis 是一个基于内存的高性能键值存储系统,它支持丰富的数据类型(如字符串、哈希、列表、集合等),可以用作数据库、缓存和消息中间件。由于 Redis 运行在内存中,因此其读写速度极快,非常适合用作缓存系统。此外,Redis 提供了持久化机制,允许将数据保存到磁盘,确保数据不会因为系统重启或崩溃而丢失。
Redis 的主要特点包括:
- 高性能:由于数据存储在内存中,Redis 的读写操作非常快,适合需要快速响应的应用场景。
- 多种数据结构:支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,适合多种场景。
- 持久性:尽管 Redis 主要运行在内存中,但它支持将数据持久化到磁盘,确保数据安全。
- 分布式支持:Redis 支持主从复制、集群模式,能够很好地扩展以应对大规模的使用场景。
三、Redis 作为缓存的优势
将 Redis 用作缓存系统有以下优势:
- 提高性能:将经常访问的数据缓存到内存中,减少从数据库读取的次数,从而显著提高应用的响应速度。
- 减轻数据库压力:缓存减少了数据库的负载,避免了频繁的读操作对数据库造成的压力。
- 灵活的过期策略:Redis 支持为缓存数据设置过期时间,自动清理过期的数据,确保缓存不会无限制增长。
- 支持复杂的数据类型:相比于简单的键值对缓存,Redis 支持多种复杂的数据结构,能够缓存丰富的数据格式。
四、安装 Redis 和 Python Redis 库
在使用 Redis 之前,我们需要确保 Redis 服务器已经安装并运行在本地或远程服务器上。还需要安装 Python 的 Redis 库以便与 Redis 交互。
4.1 安装 Redis
在不同操作系统中,安装 Redis 的方法有所不同。以下是常见平台的安装方法:
在 macOS 上安装 Redis:
可以通过 Homebrew 安装 Redis:
brew install redis
启动 Redis 服务:
brew services start redis
在 Ubuntu 上安装 Redis:
使用 apt 包管理器安装 Redis:
sudo apt update
sudo apt install redis-server
启动 Redis 服务:
sudo systemctl start redis-server
在 Windows 上安装 Redis:
Redis 官方不提供 Windows 版本,但是可以通过第三方工具安装 Redis,比如使用 Memurai,或者通过 Docker 安装 Redis。
4.2 安装 Python Redis 库
Python 中与 Redis 交互最常用的库是 redis-py
,可以通过 pip
安装:
pip install redis
安装完成后,我们就可以在 Python 中使用 Redis 进行缓存操作了。
五、使用 Python 连接 Redis
5.1 创建 Redis 连接
在 Python 中,我们可以通过 redis.Redis
类来连接到 Redis 服务器。以下是基本的连接代码:
import redis# 创建 Redis 连接
r = redis.Redis(host='localhost', port=6379, db=0)# 测试连接
r.set('name', 'Alice')
print(r.get('name')) # 输出 b'Alice'
在上面的代码中,我们通过 redis.Redis
创建了一个连接到本地 Redis 服务器的客户端对象,并向 Redis 写入和读取了一个键值对。
参数说明:
host
:Redis 服务器的地址,通常是localhost
(本地)或服务器 IP 地址。port
:Redis 服务器的端口,默认是 6379。db
:Redis 提供了多个数据库(默认 16 个),db=0
表示使用第一个数据库。
5.2 使用 Redis 实现缓存
现在我们将展示如何使用 Redis 实现一个简单的缓存功能。缓存的基本思路是:首先检查数据是否在缓存中,如果存在则直接返回,否则从数据库中查询数据并将其存储到缓存中,以便下次快速访问。
以下是一个简单的缓存示例:
import redis
import time# 创建 Redis 连接
r = redis.Redis(host='localhost', port=6379, db=0)# 模拟从数据库获取数据的函数
def get_data_from_db(key):print(f"查询数据库获取 {key} 的值...")time.sleep(2) # 模拟数据库查询耗时return f"value_of_{key}"# 从缓存或数据库获取数据的函数
def get_data(key):# 尝试从缓存中获取数据cached_value = r.get(key)if cached_value:print(f"从缓存中获取 {key} 的值...")return cached_value.decode() # Redis 存储的数据是字节类型,需要解码# 缓存中没有数据,查询数据库value = get_data_from_db(key)# 将数据写入缓存,并设置过期时间为 10 秒r.setex(key, 10, value)return value# 测试缓存功能
print(get_data('user:1')) # 第一次将从数据库获取数据
print(get_data('user:1')) # 第二次将从缓存获取数据
在这个示例中:
get_data_from_db()
是一个模拟从数据库中获取数据的函数,它会延迟 2 秒来模拟真实的数据库查询操作。get_data()
函数先从 Redis 中尝试获取缓存数据,如果缓存命中则直接返回,否则从数据库获取数据并缓存,设置缓存的过期时间为 10 秒。
运行结果示例:
查询数据库获取 user:1 的值...
value_of_user:1
从缓存中获取 user:1 的值...
value_of_user:1
可以看到,第一次查询时从“数据库”获取了数据并将其缓存,第二次查询时则直接从缓存中读取数据,避免了耗时的数据库查询操作。
六、Redis 中的常用缓存操作
在实际应用中,Redis 支持多种缓存操作,下面将介绍一些常用的 Redis 操作。
6.1 设置键值对
使用 set()
方法可以将数据存储到 Redis 中,get()
方法用于获取数据:
# 设置键值对
r.set('key1', 'value1')# 获取键值对
print(r.get('key1').decode()) # 输出: value1
6.2 设置过期时间
使用 setex()
方法可以在设置数据的同时指定过期时间(单位:秒):
# 设置带有过期时间的键值对
r.setex('key2', 10, 'value2') # 键在 10 秒后过期
可以通过 ttl()
方法查询键的剩余生存时间:
print(r.ttl('key2')) # 输出剩余的过期时间
6.3 删除键
使用 delete()
方法可以删除指定的键:
r.delete('key1')
6.4 批量操作
Redis 还支持批量获取或设置键值对:
# 批量设置键值对
r.mset({'key3': 'value3', 'key4': 'value4'})# 批量获取键值对
print(r.mget(['key3', 'key4'])) # 输出: [b'value3', b'value4']
6.5 使用哈希存储缓存
Redis 支持哈希类型的数据结构,可以将对象的多个字段存储在一个哈希键中:
# 设置哈希值
r.hset('user:2', mapping={'name': 'Bob', 'age': 25})# 获取哈希值
print(r.hget('user:2', 'name').decode()) # 输出: Bob
print(r.hgetall('user:2')) # 输出所有字段和值
七、Redis 缓存策略
在实际应用中,合理设计缓存策略至关重要。以下是几种常见的缓存策略:
- LRU(Least Recently Used):最久未使用策略,当缓存空间不足时,删除最久未使用的数据。
- TTL(Time To Live):为缓存数据设置生存时间,过期后自动删除。
- 主动更新:定期刷新缓存中的数据,确保数据的及时性。
八、总结
Redis 作为缓存系统能够极大地提高应用程序的性能和响应速度。在 Python 中,使用 redis-py
库可以轻松与 Redis 交互,实现缓存功能。通过合理设计缓存策略,应用程序能够减少数据库的访问次数,降低服务器压力。
Redis 除了作为缓存之外,还可以用作数据库和消息队列。掌握 Redis 的基础使用能够帮助开发者在多种场景中提升应用的性能。在实际项目中,设计缓存策略时需要考虑数据的一致性和实时性,根据实际需求设置合适的过期时间和缓存空间。
通过本文的介绍,希望读者能够对如何在 Python 中使用 Redis 作为缓存有一个清晰的认识,并能够应用到实际开发中。
相关文章:

Python 如何使用 Redis 作为缓存
Python 如何使用 Redis 作为缓存 一、引言 在现代 Web 应用程序和数据密集型服务中,性能 和 响应速度 是至关重要的因素。而当应用需要频繁访问相同的数据时,直接从数据库获取数据会耗费大量的时间和资源。因此,缓存系统成为了提升性能的重…...

Python知识点:基于Python工具,如何使用Mediapipe进行人体姿态估计
开篇,先说一个好消息,截止到2025年1月1日前,翻到文末找到我,赠送定制版的开题报告和任务书,先到先得!过期不候! 基于Python的Mediapipe人体姿态估计技术详解 在计算机视觉领域,人体…...

数据结构进阶:二叉搜索树_C++
目录 前言: 一、二叉搜索树 1.1二叉搜索树概念 2.2 二叉搜索树操作 1. 二叉搜索树的插入 1.1、插入过程 1.2、代码实现 2、二叉树的删除 2.1、结点删除情况 2.2、替换删除法 1、替换思路 2、代码实现: 3、二叉搜索树的查找 3.1、查找规则 …...

uni-app之旅-day04-商品列表
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言6. 商品列表6.0 创建 goodslist 分支6.1 定义请求参数对象6.2 获取商品列表数据6.3 渲染商品列表结构6.4 把商品 item 项封装为自定义组件在 goods_detail 组件…...

单元测试的定义
概念 单元测试是对软件中的最小可测试单元进行检查和验证的过程。在面向对象编程中,最小可测试单元通常是一个方法或者一个类。它的目的是隔离各个部分的代码,确保每个单元都能按预期工作,从而提高软件的质量和可维护性。重要性 发现早期错误…...

C语言从头学66—学习头文件 <stdio.h>(二)
关于可变参数,我们曾经在《C语言从头学27》中接触过,下面学习能够接收可变参数作为 参数的几个函数。 一、printf函数的能够接收可变参数的变体函数: 1、函数vprintf() 功能:按照给定格式,将可变参数中的内容输…...

python静默活体检测接口集成-人脸识别API-人脸认证
静默活体检测是一种不需要用户主动配合(如眨眼、点头等)的活体检测技术,通常通过摄像头采集用户的人脸图像,结合计算机视觉与AI算法来判断用户是否为真人。这项技术被广泛应用于身份验证、金融交易安全、智能门禁等领域。 确定接口…...

Ubuntu安装nvidia显卡驱动
一、安装依赖 1、更新 sudo apt update sudo apt upgrade -y 2、基础工具 sudo apt install -y build-essential cmake 图形界面相关 sudo apt install -y lightdm 注:在弹出对话框选择"lightdm" 下载nvidia驱动: 进入如下网址:http…...

vulnhub-Web Developer 1靶机
vulnhub:Web Developer: 1 ~ VulnHub 导入靶机,放在kali同网段,扫描 靶机在192.168.114.129,扫描端口 有网站服务,访问 没什么东西,扫目录 真不少,访问一下,也只是一些普通的Wordpr…...

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo
安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo 安全帽头盔检测数据集介绍 数据集名称 安全帽头盔检测数据集 (Safety Helmet and Person Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型(包括YOLOv5、YOLOv6、YOLOv7…...

保姆级教程 | Adobe Illustrator调整颜色透明度
背景 由于课题需要,现需要在Adobe Illustrator里修改部分色块的颜色及透明度 步骤 1. 打开Adobe Illustrator软件,打开或创建一个AI文件: 2. 绘制一个色块: 3. 单击需要调整透明度的对象将其选中 4. 调整颜色的透明度…...

深入解读DeepSort目标跟踪算法:从状态预测到运动模型
在目标跟踪领域中,DeepSort(Deep Simple Online and Realtime Tracking)是一种广泛应用且高效的跟踪算法,它结合了深度学习与经典目标跟踪方法,为视觉跟踪任务提供了强大的解决方案。本文将深入探讨DeepSort中的关键概…...

24-10-2-读书笔记(二十二)-《契诃夫文集》(一)上([俄] 契诃夫 [译] 汝龙)啊!真想生活。
文章目录 《契诃夫文集》(一)上([俄] 契诃夫 [译] 汝龙 )早期生活——塔甘罗格(人物家庭简介)学生时期——莫斯科(写作与学习)流浪时期——哈萨林(游历与流浪)…...

【2024】前端学习笔记14-JavaScript常用数据类型-变量常量
学习笔记 1.JavaScript常用数据类型1.1.Number(数字)1.2.String(字符串)1.3.Boolean(布尔值)1.4.Null(空值)1.5.Undefined(未定义)1.6.Object(对象…...

Leecode热题100-48.旋转图像
给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出…...

重学SpringBoot3-集成Redis(二)之注解驱动
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(二)之注解驱动 1. 为什么选择 Redis 作为缓存?2. 如何在 Spring Boot 中启用 Redis 缓存?2.1 …...

【React】入门Day04 —— 项目搭建及登录与表单校验、token 管理、路由鉴权实现
项目搭建 创建项目 # 使用npx创建项目 npx create-react-app my-react-app # 进入项目目录 cd my-react-app # 创建项目目录结构 mkdir -p src/{apis,assets,components,pages,store,utils} touch src/{App.js,index.css,index.js} 使用npx create-react-app创建项目࿰…...

CMake 属性之目录属性
【写在前面】 CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置。 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为。 通过目录…...

ChatGPT:引领人工智能新潮流!
一、ChatGPT 是什么? 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型,拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时,ChatGPT 还能进行对话式交互,…...

【银河麒麟高级服务器操作系统】安全配置基线相关分析全过程及解决方案
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 【机型】物理机或虚机 【…...

用Python实现图片转ASCII艺术:图像处理与字符艺术的完美结合
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 ASCII艺术是一种通过字符来表现图像的艺术形式,最早用于早期计算机显示器,它仅支持字符显示。如今,尽管图像分辨率和显示技术得到了极大的提升,ASCII艺术作为一种复古而别具一格的图像表现形式,仍然受到许多…...

大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

Redis-缓存过期淘汰策略
缓存淘汰策略 生产上redis内存设置为多少 设置为最大内存的 3/4 redis 会占用物理机多少内存 默认大小是 0,64 位系统下表示不限制内存大小,32位系统表示 3G 如何设置修改redis内存大小 config get maxmemory 查看修改方式 配置文件 单位是字节 2.…...

如何设置LED电子显示屏的屏幕参数?
LED电子显示屏因其高亮度、低能耗和长寿命等优点,在广告、信息显示等领域得到了广泛应用。正确设置屏幕参数对于确保显示屏的最佳性能至关重要。以下是LED电子显示屏设置屏幕参数的步骤: 1. 确定屏幕参数 在开始设置之前,需要了解显示屏的基本…...

Spring Boot Starter Parent介绍
引言 spring-boot-starter-parent 是一个特殊的项目,为基于 Spring Boot 的应用程序提供默认配置和默认依赖。 在本 Spring Boot 教程中,我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供…...

【含开题报告+文档+PPT+源码】基于SpringBoot乡村助农益农平台的设计与实现
开题报告 近年来,随着社会经济的快速发展和人民生活水平的提高,人们对优质农产品的需求越来越高。然而,传统的农产品销售管理模式存在一些问题。首先,农产品供应链信息不透明,导致生产者难以了解市场需求和价格变动趋…...

数据中心运维挑战:性能监控的困境与智能化解决方案的探寻
随着数字化进程的加速,数据中心已成为企业信息架构的核心支撑,其运维管理的复杂度和重要性也随之提升。运维团队需应对设备老化、资源分配失衡、性能波动等多重难题,以确保数据中心持续高效运行。 其中,性能监控作为运维管理的关键…...

基于SSM的民宿管理系统【附源码】
基于SSM的民宿管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1用户信息管理 5.2 房东信息管理…...

显卡 3090 vs v100
1.3090 Date: 2020 AmperePielines/ Cuda cores: 10496 2.V100 Date: 2018 VoltaPielines/ Cuda cores: 5129 3.结构 & Core比较: v100优点: v100功耗小v100较快的双精度(fp64)和混合精度(fp16fp32)pcie版的NVLink与2080ti完全一致 v100缺点: 不支持整数格式计算&…...

怎么在单片机裸机程序中移植EasyLogger?
1、介绍 EasyLogger 是一款超轻量级、高性能的C日志库,非常适合对资源敏感的软件项目。例如:IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但…...