1. 为什么需要协同工作?

现代系统常面临这样的困境:关系型数据库(如MySQL)擅长持久化存储但性能有限,Redis内存数据库响应快但存储成本高。就像咖啡配甜点,二者协同才能发挥最佳效果。

2. 三大协同策略与C#实战

2.1 缓存加速策略

// 使用StackExchange.Redis组件
public Product GetProduct(int id)
{
    var db = ConnectionMultiplexer.Connect("localhost").GetDatabase();
    var cacheKey = $"product:{id}";
    
    // 先查Redis
    var productJson = db.StringGet(cacheKey);
    if (!productJson.IsNull) 
        return JsonConvert.DeserializeObject<Product>(productJson);

    // 缓存未命中查数据库
    using var sqlConn = new MySqlConnection("Server=localhost;Database=shop;Uid=root;");
    var product = sqlConn.QueryFirst<Product>("SELECT * FROM products WHERE id=@id", new { id });
    
    // 写入Redis并设置5分钟过期
    db.StringSet(cacheKey, JsonConvert.SerializeObject(product), TimeSpan.FromMinutes(5));
    
    return product;
}

应用场景:电商商品详情页、新闻热点内容
优点:QPS提升3-5倍,数据库压力降低80%
注意:需设置合理的TTL,避免缓存雪崩

2.2 数据同步策略

// 使用定时任务同步
public void SyncInventoryToRedis()
{
    using var sqlConn = new SqlConnection("SQL Server连接字符串");
    var inventories = sqlConn.Query<Inventory>("SELECT sku,stock FROM inventory");
    
    var redis = ConnectionMultiplexer.Connect("localhost").GetDatabase();
    var batch = redis.CreateBatch();
    
    foreach (var item in inventories)
    {
        batch.HashSetAsync("inventory:stock", item.SKU, item.Stock);
    }
    batch.Execute();
}

应用场景:库存实时更新、价格同步
缺点:存在秒级延迟,不适用强一致性场景
优化方案:结合数据库触发器+消息队列

2.3 队列与事务策略

// 订单创建事务
public void CreateOrder(Order order)
{
    using var transaction = new TransactionScope();
    try
    {
        // 1. 写入MySQL
        _orderRepository.Add(order);
        
        // 2. Redis库存预扣减
        var redis = ConnectionMultiplexer.Connect("localhost").GetDatabase();
        var remaining = redis.HashDecrement("inventory:stock", order.SKU, order.Quantity);
        if (remaining < 0) 
            throw new InsufficientStockException();
        
        transaction.Complete();
    }
    catch
    {
        // 事务回滚自动处理
    }
}

应用场景:秒杀系统、抢购活动
注意事项:需实现分布式锁保证原子性操作

3. 典型应用场景分析

  1. 电商秒杀:Redis处理瞬时高并发,MySQL记录最终订单
  2. 实时统计:Redis HyperLogLog统计UV,每日定时持久化到SQL
  3. 会话共享:用Redis存储登录态,多个服务实例共享状态

4. 技术选型对照表

Redis 传统数据库
响应速度 微秒级 毫秒级
数据容量 受内存限制 TB级存储
事务支持 简单事务 ACID完整支持
查询能力 简单K-V操作 复杂SQL查询

5. 避坑指南

  1. 缓存穿透:对空值设置短TTL
  2. 数据一致性:采用延迟双删策略
  3. 内存管理:配置maxmemory-policy
  4. 灾难恢复:定期RDB/AOF备份

总结

就像火锅需要不同食材搭配,Redis与关系型数据库的协同能创造1+1>2的效果。掌握缓存雪崩防护、异步同步机制、分布式事务处理三大核心技能,才能构建高并发、高可用的现代系统。