我是Redis,请看我和mysql是如何交互的吧~

1. 数据查询:先找我 Redis

过程描述:当有数据请求时,程序首先会找我(Redis)查询。因为我是在内存中工作的,查询速度非常快。如果我有数据,就直接返回,避免查询 MySQL。如果我没有缓存数据,程序会继续去 MySQL 获取,并将结果存储在我的缓存里,以便下次加速查询。

python 复制代码
import redis
import mysql.connector

# 连接 Redis
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)

# 连接 MySQL
mysql_conn = mysql.connector.connect(
    host="localhost",
    user="your_mysql_user",
    password="your_mysql_password",
    database="your_database"
)
mysql_cursor = mysql_conn.cursor()

# 我是 Redis,先来看看数据在不在我的内存里
def get_user_data(user_id):
    # 我会根据用户ID生成一个缓存key
    cache_key = f"user:{user_id}"
    
    # 1. 先从我的缓存里(Redis)找数据
    cached_data = redis_client.get(cache_key)
    
    if cached_data:
        print("Cache hit, data from Redis")
        return cached_data  # 如果数据在我这里,就直接返回
    
    # 2. 如果数据不在我这儿,那就要请 MySQL 出场了
    print("Cache miss, data from MySQL")
    mysql_cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
    user_data = mysql_cursor.fetchone()
    
    if user_data:
        # 3. 我会把 MySQL 的数据记在我这儿,以备下次有人找
        redis_client.set(cache_key, user_data)
    
    return user_data

2. 数据更新:保持 Redis 和 MySQL 的同步

过程描述:当用户更新数据时,程序会先将数据写入 MySQL 数据库。为了保证数据的一致性,更新 MySQL 后,程序还会通知我(Redis),我会清理或更新缓存,确保下次查询时不会返回旧数据。

python 复制代码
# 用户更新数据的时候,我需要保持和 MySQL 数据一致
def update_user_data(user_id, new_data):
    # 1. 首先将新数据写入 MySQL
    mysql_cursor.execute(
        "UPDATE users SET name = %s, age = %s WHERE id = %s",
        (new_data['name'], new_data['age'], user_id)
    )
    mysql_conn.commit()
    
    # 2. 数据写入 MySQL后,我得清掉旧缓存或更新缓存
    cache_key = f"user:{user_id}"
    redis_client.delete(cache_key)  # 清除旧的缓存,以确保下一次数据更新正确
    
    # 我可以选择直接更新缓存,而不是删除缓存
    # redis_client.set(cache_key, new_data)

3. Redis 和 MySQL 的协作流程:加速读写操作

过程描述 :通过这种方式,我(Redis)和 MySQL 实现了良好的合作。当用户发起读请求 时,程序优先从我这里获取缓存的数据;如果缓存未命中,才去 MySQL 查询,并将结果缓存起来。而在写请求时,程序会先更新 MySQL,然后更新或清理我的缓存,保证数据的一致性和系统的高效运作。

相关推荐
Kaede69 分钟前
MySQL中如何使用命令行修改root密码
android·mysql·adb
f***14771 小时前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器
胖咕噜的稞达鸭1 小时前
算法入门:滑动窗口--->找到字符串中所有的字母异位词,串联所有的子串,最小覆盖子串
数据库·redis·算法
vx_vxbs662 小时前
【SSM电动车智能充电服务平台】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·spring cloud·小程序·php·idea
m***92382 小时前
docker中配置redis
redis·docker·容器
f***01933 小时前
【MySQL】JDBC的连接
数据库·mysql
5***T4483 小时前
开启mysql的binlog日志
数据库·mysql
秋邱3 小时前
价值升维!公益赋能 + 绿色技术 + 终身学习,构建可持续教育 AI 生态
网络·数据库·人工智能·redis·python·学习·docker
前端木偶人之神3 小时前
mysql基础学习
mysql
Three~stone3 小时前
Matlab2025b的安装教程(附安装包和密钥破解文件)
学习·mysql·持续部署