技术文摘
MySQL 与 Redis 实现二级缓存方法及代码示例
2025-01-15 03:23:57 小编
在当今的软件开发中,缓存技术对于提升系统性能至关重要。二级缓存作为一种有效的缓存策略,结合 MySQL 与 Redis 能够发挥出强大的功效。
MySQL 作为关系型数据库,数据存储持久且完整,但查询速度在高并发场景下可能受限。Redis 则是高性能的非关系型内存数据库,读写速度极快,适用于缓存热点数据。将两者结合实现二级缓存,可以充分利用它们的优势。
首先是一级缓存 Redis。当系统接收到请求时,优先从 Redis 中查询数据。如果数据存在,直接返回,大大减少了响应时间。若 Redis 中没有命中数据,则进入二级缓存 MySQL。从 MySQL 数据库中查询数据,查询到之后,将数据同时存入 Redis 中,以便后续请求能够快速获取。
下面来看具体的代码示例。以 Python 语言为例,使用 Flask 框架结合 pymysql 与 redis 库来实现。
from flask import Flask
import pymysql
import redis
app = Flask(__name__)
redis_client = redis.Redis(host='localhost', port=6379, db=0)
mysql_conn = pymysql.connect(host='localhost', user='root', password='password', database='test')
def get_data_from_redis(key):
data = redis_client.get(key)
if data:
return data.decode('utf-8')
return None
def get_data_from_mysql(key):
cursor = mysql_conn.cursor()
query = "SELECT data FROM your_table WHERE key = %s"
cursor.execute(query, (key,))
result = cursor.fetchone()
if result:
return result[0]
return None
def set_data_to_redis(key, value):
redis_client.set(key, value)
@app.route('/data/<key>')
def get_data(key):
data = get_data_from_redis(key)
if not data:
data = get_data_from_mysql(key)
if data:
set_data_to_redis(key, data)
return data
if __name__ == '__main__':
app.run(debug=True)
在上述代码中,定义了从 Redis 和 MySQL 获取数据以及将数据存入 Redis 的函数。在 get_data 函数里,先尝试从 Redis 取数据,未命中则从 MySQL 取,然后将数据存入 Redis。
通过这种 MySQL 与 Redis 实现的二级缓存方法,能够有效减少数据库的查询压力,提升系统的响应速度和整体性能,为用户带来更流畅的体验,在各类项目开发中具有广泛的应用价值。
- 基于 SPI 的强化插件框架设计
- 为何给 JVM 分配内存越大性能反而越差?
- Memlab:开源框架助力分析 JavaScript 堆与查找内存泄漏 少 黑客下午茶 原创
- 11 个 C++ 代码片段解决日常编程难题
- ConcurrentDictionary 字典操作并非完全线程安全?
- PyTorch 里卷积的工作原理
- 从零学 Java:编程语言与软件
- Python 四舍五入的两种方法,你掌握了吗?
- 2022 - 2023 应用开发的十大趋势
- CloudWeGo-Volo 对 Rust 语言的探索实践:Go 与 Rust 的抉择
- PyAutoGUI:轻松实现图片上传
- 聊天文件过多应如何处理
- V8 怎样执行 JavaScript 代码?
- 12 个必备 Python 函数整理,值得收藏
- 《深度解析 Redux:构建任务管理平台》