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. 典型应用场景分析
- 电商秒杀:Redis处理瞬时高并发,MySQL记录最终订单
- 实时统计:Redis HyperLogLog统计UV,每日定时持久化到SQL
- 会话共享:用Redis存储登录态,多个服务实例共享状态
4. 技术选型对照表
Redis | 传统数据库 | |
---|---|---|
响应速度 | 微秒级 | 毫秒级 |
数据容量 | 受内存限制 | TB级存储 |
事务支持 | 简单事务 | ACID完整支持 |
查询能力 | 简单K-V操作 | 复杂SQL查询 |
5. 避坑指南
- 缓存穿透:对空值设置短TTL
- 数据一致性:采用延迟双删策略
- 内存管理:配置maxmemory-policy
- 灾难恢复:定期RDB/AOF备份
总结
就像火锅需要不同食材搭配,Redis与关系型数据库的协同能创造1+1>2的效果。掌握缓存雪崩防护、异步同步机制、分布式事务处理三大核心技能,才能构建高并发、高可用的现代系统。