我是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,然后更新或清理我的缓存,保证数据的一致性和系统的高效运作。

相关推荐
无敌的牛4 小时前
redis学习过程
数据库·redis·学习
北顾笙9805 小时前
MySQL-day2
数据库·mysql
元岳数字人小元6 小时前
AI 数字人开发公司浅谈 虚拟数字人打造景区新服务
人工智能·人机交互·交互
程序猿乐锅6 小时前
【MySQL | 第八篇】MySQL 视图
数据库·mysql
swordbob7 小时前
Redis 3 大问题 + 5 大扩展问题
redis
AOwhisky9 小时前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
就叫_这个吧9 小时前
IDEA Mybatis xml文件,实现sql语句联想,自动填入补充
xml·mysql·intellij-idea·mybatis
AOwhisky9 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
北顾笙98011 小时前
MYSQL-day03
数据库·sql·mysql
MXsoft61811 小时前
**断网续传与本地缓存:弱网环境下的监控数据保障方案**
运维·缓存·自动化