技术文摘
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 实现的二级缓存方法,能够有效减少数据库的查询压力,提升系统的响应速度和整体性能,为用户带来更流畅的体验,在各类项目开发中具有广泛的应用价值。
- 微信群覆盖的三种解决方法:暴力、染色、链表与并查集
- HarmonyOS 网络通信真机 Demo 演练(一):TCP 聊天室
- Python 中弱引用的神奇运用及原理剖析
- HarmonyOS 分布式应用之智能三角警示牌解析
- Mac 环境中 Playwright 程序的打包方法
- 懂写 TypeScript 但真懂 TS 编译配置吗?
- 面试官:四种无需第三方变量交换两变量值的方法
- Java 进阶:字节码解析
- Python 中 For 循环与 While 循环的使用方法
- 一日一技:大于号重定向失败原因探究
- 您对 JavaScript 异步编程了解多少?
- 共同探讨字节序的理解之道
- 掌握 CopyOnWriteArrayList 为面试增时三分钟
- 谷歌披露 2021 年热门 Chrome 开发者工具
- 五款免费或开源的助战病魔医疗软件工具