面试题答案
一键面试Redis在MySQL热点数据缓存策略中的关键作用
- 减轻数据库压力:热点数据频繁被访问,将其缓存在Redis中,大部分读请求直接从Redis获取数据,减少对MySQL的查询次数,降低MySQL负载。
- 提高响应速度:Redis基于内存存储,读写速度极快,能快速响应热点数据的读取请求,提升应用程序的性能和用户体验。
- 数据一致性维持:通过合理的缓存更新策略,在MySQL数据发生变化时及时更新Redis缓存,确保缓存数据与数据库数据的一致性。
使用Redis实现简单的MySQL热点数据缓存(以查询用户表热门用户信息为例)
- 查询流程
- 应用程序首先尝试从Redis中获取热门用户信息。
- 如果Redis中存在数据,则直接返回给应用程序。
- 如果Redis中不存在(缓存未命中),则从MySQL中查询热门用户信息。
- 将从MySQL查询到的数据存入Redis,并设置合适的过期时间,然后返回给应用程序。
- 代码示例(以Python + Flask + Redis + MySQL为例)
import redis
import pymysql
from flask import Flask
app = Flask(__name__)
r = redis.Redis(host='localhost', port=6379, db=0)
db = pymysql.connect(host='localhost', user='root', password='password', database='test')
cursor = db.cursor()
@app.route('/hot_users')
def get_hot_users():
hot_users = r.get('hot_users')
if hot_users:
return hot_users.decode('utf-8')
else:
sql = "SELECT * FROM users WHERE is_hot = 1"
try:
cursor.execute(sql)
results = cursor.fetchall()
hot_users_str = str(results)
r.setex('hot_users', 3600, hot_users_str) # 缓存1小时
return hot_users_str
except Exception as e:
print(f"Error: {e}")
return "Error occurred"
if __name__ == '__main__':
app.run(debug=True)
上述代码首先尝试从Redis获取热门用户信息,如果未命中则从MySQL查询,查询到后存入Redis并设置过期时间,下次请求可直接从Redis获取。