高并发场景Redis分布式锁实现方式

高并发场景Redis分布式锁实现方式,第1张

原理很简单,set 一个 锁-key,如果成功则说明加锁成功,反之则失败。
为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下几个条件:

基于以上条件,采用set扩展参数,保证原子性 *** 作: SET lock-key "lock-client" EX 10086 NX
lock-key "lock-client" 指定 加锁client,解锁时用于判断。
EX 10010 指定过期时间
NX 只在键不存在时,才对键进行设置 *** 作。效果等同于 SETNX 命令。

只不过早期版本redis不支持set的扩展参数,这就需要用到 lua 脚本了
加锁可以在高版本借助set命令实现原子 *** 作,但解锁就不可以了,依然得用到lua脚本

Redis在26版本推出了 lua 脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行。使用脚本的好处如下:

需要在获得 lock-key 后判断加锁对象是否为当前client,是,则解锁。Lua 脚本如下:
if rediscall('get', KEYS[1]) == ARGV[1] then return rediscall('del', KEYS[1]) else return 0 end
执行方式:eval;
eval 参数列表: eval lua-script key-num [key1 key2 key3 ] [value1 value2 value3 ] ,参数解析:

eval执行示例: eval "rediscall('set',KEYS[1],ARGV[1])" 1 lua-key lua-val ;

完整解锁执行脚本:
eval "if rediscall('get', KEYS[1]) == ARGV[1] then return rediscall('del', KEYS[1]) else return 0 end" 1 lock-key client-val

----------End----------

首先,为防止高并发带来的系统压力,或者高并发带来的系统处理异常,数据紊乱,可以以下几方面考虑:1、加锁,这里的加锁不是指加java的多线程的锁,是指加应用所和数据库锁,应用锁这边通常是使用redis的setnx来做,其次加数据库锁,因为代码中加了应用所,所以数据库不建议加悲观锁(排他锁),一般加乐观锁(通过设置一个seq_no来解决),这两个锁一般能解决了,最后做合理的流控,丢弃一部分请求也是必不可少的

(1)、在任何情况下,单例类永远只有一个实例存在
(2)、单例需要有能力为整个系统提供这一唯一实例
为了便于读者更好的理解这些概念,下面给出这么一段内容叙述:
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
正是由于这个特点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。例如在某个服务器程序中,该服务器的配置信息可能存放在数据库或文件中,这些配置数据由某个单例对象统一读取,服务进程中的其他对象如果要获取这些配置信息,只需访问该单例对象即可。这种方式极大地简化了在复杂环境 下,尤其是多线程环境下的配置管理,但是随着应用场景的不同,也可能带来一些同步问题。

通过用友YonSuite可以应对海量高并发场景,保证数据安全和业务稳定。用友YonSuite的分布式架构可以将业务压力分散到不同的子系统上,提高系统的稳定性和扩展性。用友YonSuite的负载均衡技术可以将用户请求均衡地分配到多个服务器上,避免单点故障,提高系统的稳定性和可用性。用友YonSuite的数据库优化技术可以提高数据库的并发性和性能,保证系统的高效运行。用友YonSuite的安全加固技术可以保障数据的安全性和完整性,避免数据泄露和损坏。最后,用友YonSuite的监控和报警机制可以实时监控系统的运行状况,及时发现和解决问题,保证业务的稳定运行。具体来说,用友YonSuite有以下优势:
1) 采用真正的云原生、微服务架构,基于与用友BIP 3同根同源、最新的iuap60 PaaS云平台,从技术层面实现多租户以及多数据中心。
2) 通过多项安全认证,包括系统安全、数据安全、业务安全和信创安全,给用户满满的安全感。
3) 通过先进的场景应用,覆盖400+场景化应用,快速构建数智飞轮的闭环场景。
4) 通过先进的客户化开发,赋予了企业技术部门、ISV以及开发者们在YonSuite进行原生开发以及增值开发的能力。

一些建议处理高并发要学习的东西实在太多要在没有实际工作经验的情况下逐一了解太难,也很难深入对于高并发的学习,我建议除了多阅读高并发架构的文档学习基本的方法论以外,自己要去深入学习网络基础,数据结构和算法这些都是处理高并发热点的理论基础


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13387954.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存