当前位置: 首页 > news >正文

广东顺德网站建设在线买房网站建设 方案

广东顺德网站建设,在线买房网站建设 方案,国外引擎搜索,网站建设后应该干什么目录 Redis 缓存 (Caching) 目的 核心逻辑 存储形式总结 典型场景 Redis 分布式锁 (Distributed Lock) 目的 核心作用 核心逻辑 典型场景 核心区别总结 Redis 缓存 (Caching) 在Redis中,数据是以键值对的形式存储的,其中键总是字符串类型&…

目录

Redis 缓存 (Caching)

目的

核心逻辑

         存储形式总结

典型场景

Redis 分布式锁 (Distributed Lock)

目的

核心作用

核心逻辑

典型场景

核心区别总结


Redis 缓存 (Caching)

在Redis中,数据是以键值对的形式存储的,其中键总是字符串类型,而值可以是多种数据类型。

目的

加速数据访问,减少对慢速数据源(如数据库)的频繁查询,提升系统性能和吞吐量。

核心逻辑
  1. 读操作

    • 应用优先从 Redis 读取数据。

    • 若 Redis 中无数据(缓存未命中),则查询数据库,并将结果写入 Redis。

  2. 写操作

    • 更新数据库后,同步或异步更新/失效 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 分布式锁用于解决分布式系统中的并发冲突问题,主要作用包括:

  1. 资源互斥访问
    确保多个服务实例/进程同时操作共享资源(如数据库、文件)时,同一时刻只有一个客户端能执行关键代码。

    例:避免库存超卖、重复支付、文件覆盖等问题。

  2. 协调分布式任务
    保证定时任务、批处理操作在集群环境中只被执行一次。

  3. 防止并发副作用
    避免多个请求同时修改同一数据导致状态不一致

核心逻辑
  1. 加锁

    • 客户端尝试在 Redis 中创建一个唯一键(如 lock:order_123),通过原子操作(如 SET key random_value NX PX 30000)确保互斥性。

  2. 执行业务逻辑

    • 只有成功获得锁的客户端才能执行后续操作(如扣减库存)。

  3. 解锁

    • 完成后删除该键(需通过 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 List<IRedLock>(); 
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 name="lockKey"></param>
/// <returns></returns>
public virtual async Task<IRedLock> AcquireLockAsync(string lockKey)
{var redLock = await _factoryProvider.RedLockFactoryInstance.CreateLockAsync(lockKey, _defaultKeyExpiry);return redLock;
}
/// <summary>
/// 获取锁(阻塞直到获取锁成功或者1h后仍获取不到,返回失败)
/// </summary>
/// <param name="lockKey"></param>
/// <returns></returns>
public virtual async Task<IRedLock> AcquireLockUntilSuccessAsync(string lockKey)
{var redLock = await _factoryProvider.RedLockFactoryInstance.CreateLockAsync(lockKey, _defaultKeyExpiry, _wait, _retry);return redLock;
}public async Task<IRedLock> CreateLockAsync(string resource, TimeSpan expiryTime, TimeSpan waitTime, TimeSpan retryTime, CancellationToken? cancellationToken = null)
{return await RedLock.CreateAsync(loggerFactory.CreateLogger<RedLock>(), redisCaches, resource, expiryTime, waitTime, retryTime, configuration.RetryConfiguration, cancellationToken ?? CancellationToken.None).ConfigureAwait(continueOnCapturedContext: false);
}

默认为每10秒尝试一次,在尝试了一小时后还获取不到锁的话,就返回失败

/// <summary>
/// 释放锁
/// </summary>
/// <param name="redLock"></param>
/// <returns></returns>
public virtual async Task ReleaseLockAsync(IRedLock redLock)
{await redLock.DisposeAsync();
}

核心区别总结

特性Redis 缓存Redis 分布式锁
核心目标提升读取性能,降低数据库压力解决分布式系统并发冲突
数据性质存储业务数据(如用户信息)存储锁状态(临时性、非业务数据)
读写模式高频读、低频写短期占用、立即释放
生命周期可长期存在(有过期时间)临时存在(任务结束即释放)
关键命令GET/SET/DEL/EXPIRESET NX PX/EVAL(Lua 解锁)
数据一致性需处理缓存与数据库一致性(如双写策略)需确保锁的互斥性和安全性(如 Redlock)
  • 锁是协调机制,不存储业务数据;缓存是数据副本,两者不可互换。

  • 缓存仅加速数据读取,无法控制并发写操作(如超卖问题仍需分布式锁或数据库事务)。

实际系统中二者常结合使用

  • 读场景:用 Redis 缓存加速数据访问。

  • 写场景:用 Redis 分布式锁保护共享资源,确保数据一致性。

适用场景不适用场景
库存扣减/秒杀系统高频短操作(锁开销 > 业务开销)
分布式任务调度强一致性要求极高的金融交易
防止重复提交单机应用(用 Monitor 即可)
跨服务共享资源协调读多写少场景(用乐观锁更优)
http://www.dtcms.com/a/483920.html

相关文章:

  • 深入剖析 std::map 的红黑树实现机制
  • 网站建设工作室怎么接单做网站推广挣多少钱
  • 免登录!免安装ClI,Claude Code官方插件接入API使用教程
  • 网站制作有哪些种类网站设计包括
  • 英文外贸网站建设网站设计方案网上开店网站
  • 为了庆祝2025英雄联盟全球总决赛开启,我用HTML+CSS+JS制作了LOL官方网站
  • Server 14 ,Windows 11 下 Nginx 安装与自启动配置攻略( Windows 与 Nginx )
  • 哪些网站是用php做的北京网站开发工程师
  • Godot Engine 跨平台构建完全指南
  • 怎么做自己网站的API成都展示型网页开发公司
  • Docker 监控体系总结
  • 公司网站标题优化网站建设运营规划
  • 台州cms建站系统网站建设要注意哪些问题
  • 杭州网站推广方式建设官网站
  • 地形匹配导航技术
  • 网站的图书资源建设wordpress 5.0.2 中文
  • 二分查找模板全集
  • FPGA基础 -- cocotb仿真之任务调度cocotb.start_soon与asyncio的使用注意事项
  • 图片生成网站建站之星多语言
  • 镇江牛吧企业网站建设与推广公司谷歌推广新手教程
  • 免费扑克网站域名查询官网入口
  • Grafana图表与电话交换机的结合
  • 【vue】NoticeBar:滚动通知栏组件手动实现(内容、速度、循环间隔可配置)
  • 绘制网站地图施工企业的施工生产计划与建设
  • 电子商务平台网站建造温州网站开发定制
  • 永康市网站建设关键词排名优化网站建设公司哪家好
  • 花卉网站建设的总结与杂志制作 wordpress主题
  • 外卖网站那家做的好个人网站设计论文范文
  • 【数位dp】3704. 统计和为 N 的无零数对|2419
  • 快速学制作网站株洲seo优化公司