wordpress 如何回到初始,宁波seo外包,站长工具seo综合查询方法,哪家网络公司做网站好目录 Redis 缓存 (Caching)
目的
核心逻辑 存储形式总结
典型场景
Redis 分布式锁 (Distributed Lock)
目的
核心作用
核心逻辑
典型场景
核心区别总结 Redis 缓存 (Caching)
在Redis中#xff0c;数据是以键值对的形式存储的#xff0c;其中键总是字符串类型…目录 Redis 缓存 (Caching)
目的
核心逻辑 存储形式总结
典型场景
Redis 分布式锁 (Distributed Lock)
目的
核心作用
核心逻辑
典型场景
核心区别总结 Redis 缓存 (Caching)
在Redis中数据是以键值对的形式存储的其中键总是字符串类型而值可以是多种数据类型。
目的
加速数据访问减少对慢速数据源如数据库的频繁查询提升系统性能和吞吐量。
核心逻辑 读操作 应用优先从 Redis 读取数据。 若 Redis 中无数据缓存未命中则查询数据库并将结果写入 Redis。 写操作 更新数据库后同步或异步更新/失效 Redis 中的缓存如 DEL key 或 SET key new_value。
存储形式总结
数据类型底层实现最大元素数特点StringSDS 动态字符串512 MB支持文本/二进制数据Hash 哈希表或 ziplist 2³²-1 个字段高效存储对象属性List双向链表/ziplist2³²-1 个元素保持插入顺序Set哈希表或 intset2³²-1 个元素自动去重Sorted Set跳表 哈希表2³²-1 个元素按分数排序GeospatialSorted Set同 Sorted Set支持地理坐标计算Streamrax 树理论无上限支持消费者组BitmapString2³² 位超高效布尔存储HyperLogLog专用结构理论无上限固定12KB内存存储巨大基数
// 设置过期时间
db.KeyExpire(temp_data, TimeSpan.FromMinutes(30));// 滑动过期
db.StringSet(session:1001, data, TimeSpan.FromMinutes(20), when: When.Always);
典型场景 高频读取的热点数据如商品信息、用户资料 减轻数据库压力 加速 API 响应
Redis 分布式锁 (Distributed Lock)
目的
协调分布式系统中多个进程/服务的并发操作确保同一时刻只有一个客户端能执行关键逻辑如资源修改避免数据竞争。
核心作用
Redis 分布式锁用于解决分布式系统中的并发冲突问题主要作用包括 资源互斥访问 确保多个服务实例/进程同时操作共享资源如数据库、文件时同一时刻只有一个客户端能执行关键代码。 例避免库存超卖、重复支付、文件覆盖等问题。 协调分布式任务 保证定时任务、批处理操作在集群环境中只被执行一次。 防止并发副作用 避免多个请求同时修改同一数据导致状态不一致
核心逻辑 加锁 客户端尝试在 Redis 中创建一个唯一键如 lock:order_123通过原子操作如 SET key random_value NX PX 30000确保互斥性。 执行业务逻辑 只有成功获得锁的客户端才能执行后续操作如扣减库存。 解锁 完成后删除该键需通过 Lua 脚本验证值避免误删其他客户端的锁。
典型场景 分布式系统下的资源互斥访问如订单支付、库存扣减 防止重复任务调度如定时任务只在一个节点执行
// 示例使用 Redlock 或 StackExchange.Redis 锁
var redisLock _redis.AcquireLock(lock:order_123, TimeSpan.FromSeconds(30));
try
{if (redisLock.IsAcquired){// 执行业务逻辑如扣减库存_stockService.ReduceStock(productId, 1);}
}
finally
{redisLock?.Release(); // 释放锁
}
类库中用到的包是RedLockNet
//锁信息集合
var trayBarcodeLockInfos new ListIRedLock();
try{//获取锁var lockInfo await _redLockLead.AcquireLockAsync(moveTrayBalance.TrayBarcode);_ !lockInfo.IsAcquired ? throw new BusinessException(message: _localizer[_TrayBarcodeRequestExist, moveTrayBalance.TrayBarcode]) : false;trayBarcodeLockInfos.Add(lockInfo); //获取锁成功 将锁加入集合中//执行业务逻辑··········}catch (BusinessException ex){}
finally{//释放锁foreach (var lockInfo in trayBarcodeLockInfos){await _redLockLead.ReleaseLockAsync(lockInfo);}}
AcquireLockAsync() 获取锁 获取不到返回失败
IsAcquired() 代表是否获取锁成功
/// summary
/// 获取锁(获取不到立即返回失败)
/// /summary
/// param namelockKey/param
/// returns/returns
public virtual async TaskIRedLock AcquireLockAsync(string lockKey)
{var redLock await _factoryProvider.RedLockFactoryInstance.CreateLockAsync(lockKey, _defaultKeyExpiry);return redLock;
}
/// summary
/// 获取锁(阻塞直到获取锁成功或者1h后仍获取不到返回失败)
/// /summary
/// param namelockKey/param
/// returns/returns
public virtual async TaskIRedLock AcquireLockUntilSuccessAsync(string lockKey)
{var redLock await _factoryProvider.RedLockFactoryInstance.CreateLockAsync(lockKey, _defaultKeyExpiry, _wait, _retry);return redLock;
}public async TaskIRedLock CreateLockAsync(string resource, TimeSpan expiryTime, TimeSpan waitTime, TimeSpan retryTime, CancellationToken? cancellationToken null)
{return await RedLock.CreateAsync(loggerFactory.CreateLoggerRedLock(), redisCaches, resource, expiryTime, waitTime, retryTime, configuration.RetryConfiguration, cancellationToken ?? CancellationToken.None).ConfigureAwait(continueOnCapturedContext: false);
}
默认为每10秒尝试一次在尝试了一小时后还获取不到锁的话就返回失败
/// summary
/// 释放锁
/// /summary
/// param nameredLock/param
/// returns/returns
public virtual async Task ReleaseLockAsync(IRedLock redLock)
{await redLock.DisposeAsync();
}
核心区别总结
特性Redis 缓存Redis 分布式锁核心目标提升读取性能降低数据库压力解决分布式系统并发冲突数据性质存储业务数据如用户信息存储锁状态临时性、非业务数据读写模式高频读、低频写短期占用、立即释放生命周期可长期存在有过期时间临时存在任务结束即释放关键命令GET/SET/DEL/EXPIRESET NX PX/EVALLua 解锁数据一致性需处理缓存与数据库一致性如双写策略需确保锁的互斥性和安全性如 Redlock 锁是协调机制不存储业务数据缓存是数据副本两者不可互换。 缓存仅加速数据读取无法控制并发写操作如超卖问题仍需分布式锁或数据库事务。
实际系统中二者常结合使用 读场景用 Redis 缓存加速数据访问。 写场景用 Redis 分布式锁保护共享资源确保数据一致性。
适用场景不适用场景库存扣减/秒杀系统高频短操作锁开销 业务开销分布式任务调度强一致性要求极高的金融交易防止重复提交单机应用用 Monitor 即可跨服务共享资源协调读多写少场景用乐观锁更优