品牌查询网站 优帮云wordpress 发短信

bicheng/2025/10/15 3:13:43/文章来源:
品牌查询网站 优帮云,wordpress 发短信,池州有哪些做网站的,怎么做网站竞价Redis SETNX 特性 当然#xff0c;让我们通过一个简单的例子#xff0c;使用 Redis CLI#xff08;命令行界面#xff09;来模拟获取锁和释放锁的过程。 在此示例中#xff0c;我将使用键“lock:tcaccount_[pk]”和“status:tcaccount_[pk]”分别表示锁定键和状态键。 获…Redis SETNX 特性 当然让我们通过一个简单的例子使用 Redis CLI命令行界面来模拟获取锁和释放锁的过程。 在此示例中我将使用键“lock:tcaccount_[pk]”和“status:tcaccount_[pk]”分别表示锁定键和状态键。 获取锁: # 首先设置锁密钥的唯一值和过期时间(秒) 127.0.0.1:6379 SET lock:tcaccount_1234 unique_value NX EX 3 OK这里“unique_value”是与锁关联的唯一标识符的占位符(生产环境UUID,随字符串)“EX 3”将过期时间设置为 3 秒 在另一个会话或请求中检查并获取锁 # 其次检查锁key是否存在不存在则获取锁 127.0.0.1:6379 SET lock:tcaccount_1234 unique_value NX EX 3 (nil)第二次尝试返回 nil因为锁已经存在。 在真实的应用程序中您将检查结果如果结果为零您可能会转到下一个帐户或等待并重试。 释放锁: # 通过删除锁定密钥来解除锁定 127.0.0.1:6379 DEL lock:tcaccount_1234 (integer) 1The DEL 命令用于删除锁键有效释放锁。 返回的整数值 1 表示删除了一个键。 请注意这是一个简化的示例在现实场景中您通常会使用脚本例如 Lua 脚本来使锁的获取和释放原子化从而防止竞争条件。 这里的示例旨在说明使用 Redis 命令进行锁定的基本原理。 Node.js 程序中集成 node -v # v16.20.2 npm install redis # 笔者版本redis: ^4.2.0client.eval() 方法lua脚本如何正确传参 let result await client.eval(return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}, {keys: [key1, key2],arguments: [first, second] }); //result [ key1, key2, first, second ]加锁实现 const client await createClient().on(error, err console.log(Redis Client Error, err)).connect();async function lock(resourceKey, uniqueValue, expireTime 10) {// 锁的键和值const lockKey lock:${resourceKey};/* 这种方式不能实现const result await client.setEx(lockKey, expireTime, uniqueValue);if (result OK) {console.log([s] 已获取锁 ${resourceKey});return true;} else {console.log([x] 无法获取锁 ${resourceKey});return false;} */// Lua脚本用于原子获取锁const luaScript if redis.call(SET, KEYS[1], ARGV[1], NX, EX, ARGV[2]) thenreturn 1elsereturn 0end;// 执行Lua脚本const result await client.eval(luaScript, {keys: [lockKey],arguments: [uniqueValue, ${expireTime}]});if (result 1) {console.log([s] 已获取锁 ${resourceKey});return true;} else {console.log([x] 无法获取锁 ${resourceKey});return false;}} 释放锁的实现 释放锁时需要验证value值也就是说我们在获取锁的时候需要设置一个value不能直接用del key这种粗暴的方式因为直接del key任何客户端都可以进行解锁了所以解锁时我们需要判断锁是否是自己的基于value值来判断代码如下 /*** 释放锁* param resourceKey 资源键名* param uniqueValue 唯一值用于验证锁的所有者(建议:UUID)* returns 是否成功释放锁*/async function unlock(resource, uniqueValue) {const lockKey lock:${resource};const luaScript if redis.call(GET, KEYS[1]) ARGV[1] thenreturn redis.call(DEL, KEYS[1])elsereturn 0end;const result await client.eval(luaScript, {keys: [lockKey],arguments: [uniqueValue]});if (result 1) {console.log([s] 锁释放成功);} else {console.log([x] 锁释放失败可能锁已经被其他客户端更新);}} 应用场景 多台机器定时任务 订单超卖 完整脚本如下 const {createClient} require(redis); const {generateUUID} require(../models/utl);(async () {const client await createClient().on(error, err console.log(Redis Client Error, err)).connect();async function lock(resourceKey, uniqueValue, expireTime 10) {// 锁的键和值const lockKey lock:${resourceKey};/* const result await client.setEx(lockKey, expireTime, uniqueValue);if (result OK) {console.log([s] 已获取锁 ${resourceKey});return true;} else {console.log([x] 无法获取锁 ${resourceKey});return false;} */// Lua脚本用于原子获取锁const luaScript if redis.call(SET, KEYS[1], ARGV[1], NX, EX, ARGV[2]) thenreturn 1elsereturn 0end;// 执行Lua脚本const result await client.eval(luaScript, {keys: [lockKey],arguments: [uniqueValue, ${expireTime}]});if (result 1) {console.log([s] 已获取锁 ${resourceKey});return true;} else {console.log([x] 无法获取锁 ${resourceKey});return false;}}async function unlock(resource, uniqueValue) {const lockKey lock:${resource};const luaScript if redis.call(GET, KEYS[1]) ARGV[1] thenreturn redis.call(DEL, KEYS[1])elsereturn 0end;const result await client.eval(luaScript, {keys: [lockKey],arguments: [uniqueValue]});if (result 1) {console.log([s] 锁释放成功);} else {console.log([x] 锁释放失败可能锁已经被其他客户端更新);}}async function exampleUsage(resource) {const uniqueValue generateUUID();const isLockAcquired await lock(resource, uniqueValue);if (isLockAcquired) {try {// 在这里执行受锁保护的代码// 模拟一些处理时间await new Promise(resolve setTimeout(resolve, 5000));} finally {// 最后释放锁unlock(resource, uniqueValue);}} else {console.log([x] 未获取锁。 另一个进程可能正在持有锁。);}}const resourcePk account_id123let taskList []for (let i 0; i 10; i) {taskList.push( exampleUsage(resourcePk))}//并发拿同一账号await Promise.all(taskList);await new Promise(resolve setTimeout(resolve, 6000));//测试重新获取锁await exampleUsage(resourcePk);})()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

众筹那些网站可以做广西网站建设软件推广

1、什么是网关? API Gateway(APIGW / API 网关),顾名思义,是系统对外的唯一入口。API 网关封装了系统内部架构,为每个客户端提供定制的 API。 近几年来移动应用与企业间互联需求的兴起。从以前单一的 Web …

合肥网站建设 乐云seo如何自己做网站手机软件

引言 在数字存储技术的领域中,闪存(Flash)是一种非易失性存储器,以其高速读写、低功耗和较高的可靠性而备受关注。相比于传统的磁盘存储技术,闪存具有更小的体积、更高的数据密度和更长的寿命,因此在各种应…

北京时间网站建设做lt行业的人让我登网站

综合类网站 那些免费的砖 统计推荐免费工具网站 那些免费的砖 - 优雅地白嫖各种免费资源 (thosefree.com)https://www.thosefree.com/ CSS样式网站 毒蘑菇-配色 CSS 配色,阴影网站 一个好用的配色网站! 毒蘑菇 - 配色 (dumogu.top)https://color.dumogu.top/ …

静态网页怎么做网站wordpress 注册页面插件

1. 数据类型 1.1 常量 整数:整数可以用二进制b或B,八进制o或O,十进制d或D,十六进制h或H表示,例如,8’b00001111表示8位位宽的二进制整数,4’ha表示4位位宽的十六进制整数。 X和Z:X…

中国国音电商平台官网乐陵seo营销

​ web安全渗透 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 访问该网页后发现F12被禁用,使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e} …

广州市公司网站建设企业河北专业网络营销收费公司

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

天宁区建设局网站门户网站营销怎么做

文章目录 SqlClient工具的使用 一、​​​​​​​入门

黑马程序员前端培训费用seo程序专员

回答者: 凌波微步- 高级工程师&nbsp&nbsp第11级2009-03-09 08:54:18您可以评论本回答,或直接点击“提交”按钮推荐本回答...我可以取出来,但显示不了。我显示时用的是ms listbox 2.0控件,不过没成功显示出来,多…

网站设计与制作专业软件销售具体怎么做的

框架设计远没有大家想的那么简单,并不是说只把功能开发完成,能用就算完事儿了,这里面还是有很多学问的。比如说,我们的框架应该给用户提供哪些构建产物?产物的模块格式如何?当用户没有以预期的方式使用框架…

云服务器网站解析做公司官网需要哪些数据

题目描述 小明是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a_1,a_2,…,a_n,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。 身为高傲的骑士&#xff…

网站结构形式有哪些昌吉市建设局网站

目录 先分个类吧: 1.对于有向无环图,我们直接拓扑排序,和AOE网类似,把取max改成min即可。 2.边权全部相等,直接BFS即可 3.单源点最短路 从一个点出发,到达其他顶点的最短路长度。 Dijkstra算法&#x…

网站加入地图导航seo公司推广宣传

配电系统中谐波电流的计算涉及很多因素。对于改造项目,可使用专业电能质量分析仪测得所需谐波数据;对于新建项目,设计人员并不能直接获得供电系统的的谐波数据,因此,我司研发人员通过众多不同行业、不同类型的项目&…

网站申请鹤山市网站建设公司

文章目录 概述构造器常用方法1、获取文件和目录基本信息2、列出目录的下一级3.File类的重命名功能4、判断功能的方法5、创建、删除功能 练习 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#…

科技公司网站设计风格广东住房和城乡建设厅网站王芃

pip install cddd 这个命令可能会报错,因为要求是TensorFlow1.10.0 TensorFlow1.10.0对应的Python版本是3.6,所以如果你的Python版本是3.6以上是不行的.....

iis7架设网站个人建网站wordpress

目录 一、判断语句 1.if语句 2.switch语句 二、循环语句 1.传统for循环 2.死循环 3.while模式 4.do-while模式 5.遍历切片 6.遍历map 7.break,continue 三、函数,指针 1.函数定义 2.匿名函数 3.高阶函数 4.闭包 5.值传递和引用传递 6.…

上海网站设计培训班wordpress类别id

Python算法题集_全排列 题46:全排列1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【标记数组递归】2) 改进版一【指针递归】3) 改进版二【高效迭代模块】4) 改进版三【高效迭代模块极简代码】 4. 最优算法5. 相关资源 本文为Python…

常州 网站设计昆山网站制作昆山网站建设

1.窗口函数之排序函数 RANK, DENSE_RANK, ROW_NUMBER RANK函数 计算排序时,如果存在相同位次的记录,则会跳过之后的位次 有 3 条记录排在第 1 位时: 1 位、1 位、1 位、4 位…DENSE_RANK函数 同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次 有 3 条记录排在…

网站建设时间如何查询公司需要一个简单的网站

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

做a高清视频在线观看网站游戏平台网站的建设规划

在企业顺应消费升级的道路中,企业自身不仅要着力强化对于消费者服务意识的提升,并且要树立诚信自律的行业示范带头作用,助力消费环境稳中向好,不断满足人民群众对美好生活的期待。企业的发展需要消费者的认可,酷开科技…

搭建个网站体验营销策略

在 知道要做基于移动端的项目实践时,我就选定了Android,回来的时候查了很多相关的知识,很多人都在问开发安卓软件,使用eclipse还是用 Android studio?其实,也没有一个准确的答案,但是可以肯定的…