Redis相关
分布式锁:
为了防止分布式系统多线程对Redis共享数据同时操作产生干扰,需要使用分布式锁来实现操作有序进行。
Redis中分布式锁可以使用setnx+setex来实现。
setnx指令仅在对应key不存在时对其赋值,因此可以为锁设置一个key,利用setnx的返回值来验证锁是否获得。释放锁可del对应锁key
为了防止获得锁后客户端或服务端宕机而产生死锁,可使用expire设置过期时间(Redis2.8以前),但这又会留下问题,即客户端或服务端在setnx之后,expire之前宕机。
set在Redis2.8之后提供了扩展参数,允许同时设置过期时间,即 set [key] [value] ex [timeout] nx
使用分布式锁时需考虑其开销和粒度,粒度不宜过大,否则会导致任务还没执行完锁已过期(可以使用Lua脚本解决)。
Redis中所有指令都是原子性的,因为Redis本身是单线程的,因此当Redis执行Lua脚本时,Redis会把Lua脚本作为一个整体并把它当作一个任务加入到一个队列中,然后单线程按照队列的顺序依次执行这些任务,在执行过程中Lua脚本是不会被其他命令或请求打断,因此可以保证每个任务的执行都是原子性的。
参考文章 https://blog.csdn.net/weixin_39908462/article/details/111616779?spm=1001.2014.3001.5506
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探