使用Redis实现分布式锁
Hi, I’m Shendi
使用Redis实现分布式锁
需求场景
需要使用到分布式锁的场景非常多,例如抢单等并发场景,这里举一个例子。
有一个商品,限量出售100个,一个用户下单,数量就减少一个,当剩下最后一个时,用户A与用户B同时下单,同时查询剩余数量,得到为1,那么实际出售数量为101,而非100。这个时候就需要使用到分布式锁
Redis实现分布式锁
Redis是基于单线程的,这意味着所有来自客户端的命令都是顺序执行的,因此不必担心Redis内部的并发问题。
最常用的是使用 SETNX (SET if Not Exists)来实现分布式锁,这个命令当key不存在时才设置,并返回1,存在则不设置,并返回0。
为了避免死锁,还会设置超时时间(Expire),即使程序挂掉,没有释放锁,也会在指定时间后自动销毁锁。
SETNX k v
EXPIRE k 10
但这种操作并不是原子性的,比如执行 EXPIRE 时出错,就会导致死锁。
在Redis2.6.12版本后,扩展了SET命令,可以像下面这样实现分布式锁。
SET 键 值 NX PX 超时毫秒
使用示例如下

可以看到,当没有数据的时候,设置返回 OK,有数据,设置返回null,并且不会更改已有数据的超时时间
剩下的就是在代码中使用Redis了,不同语言使用方法不同,这里就不列出来了。
END
相关文章:
使用Redis实现分布式锁
Hi, I’m Shendi 使用Redis实现分布式锁 需求场景 需要使用到分布式锁的场景非常多,例如抢单等并发场景,这里举一个例子。 有一个商品,限量出售100个,一个用户下单,数量就减少一个,当剩下最后一个时&…...
linux 服务器进程、端口查找,nginx 配置日志查找,lsof 命令详解
一 、根据端口号 查看文件的部署位置 1.1 使用查看端口号对应的进程信息 方式一 : 使用netstat命令 netstat -tuln | grep 端口号-t:显示TCP连接 -u:显示UDP连接 -l:仅显示监听状态的连接 -n:以数字形式显示端口…...
汽车标定技术--A2L格式分析
目录 1.A2L由来 2.A2L格式 2.1 PROJECT 2.2 MODULE中包含的内容 3. INCA和CANape兼容吗? 最近有朋友用Vector ASAP2Editor编译的A2L文件在INCA7.4中无法识别,我记得以前做的时候是可以识别的,难不成最近有什么变动吗?出于好…...
Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用
TFTP服务器 TFTP(Trivial File Transfer Protocol)即简单文件传输协议,是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…...
git下载安装配置及Git在Gitee上拉取和上传代码教程
一、Git下载安装和配置 Git是一个分布式版本控制系统,用于跟踪文件的变化并协作开发。以下是安装和配置Git的简单步骤: 安装Git 下载Git安装程序:Git下载地址。 运行安装程序,按照提示进行安装。 在安装过程中,选择…...
ospf路由选路及路由汇总
一、知识补充 1、ABR和ASBR 1.1 ABR ABR指的是边界路由,通常位于两个或多个区域之间,用于在不同的OSPF区域之间传递信息。当一个路由器同时连接到两个或多个区域时,它就成为了ABR,它需要维护每个区域的拓扑信息和路由表&#x…...
Oracle 11g 多数据库环境下的TDE设置
19c的TDE wallet的设置是在数据库中设置的,也就是粒度为数据库,因此不会有冲突。 而11g的设置是在sqlnet.ora中,因此有可能产生冲突。 这里先将一个重要概念,按照文档的说法,wallet是不能被数据库共享的。 If there …...
vue3使用pinia实现数据缓存
文章目录 前言一、pinia是什么?二、安装pinia三、注册pinia四、使用pinia定义数据及方法使用 优化如有启发,可点赞收藏哟~ 前言 vue2以前一直使用vuex实现状态管理 vue3之后推出了pinia… 一、pinia是什么? 直观、类型安全、轻便灵活的Vue …...
【CSS】min 和 max 函数(设置最大最小值)
文章目录 min() 函数:允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值 width: min(1vw, 4em, 80px);max() 函数:让你可以从一个逗号分隔的表达式列表中选择最大(正方向)的值作为属性的值 width: max(10vw, 4em, 80p…...
ip地址跟wifi有关系吗
你可能已经听说过IP地址和Wi-Fi这两个词,但你有没有想过它们之间是否有关系呢?在这篇文章中,我们将深入探讨IP地址与Wi-Fi之间的密切联系。从基本概念到应用实例,虎观代理小二二将为您解答这个问题。 首先,让我们来了…...
[算法学习笔记](超全)概率与期望
引子 先来讲个故事 话说在神奇的OI大陆上,有一只paper mouse 有一天,它去商场购物,正好是11.11,商店有活动 它很荣幸被选上给1832抽奖 在抽奖箱里,有3个篮蓝球,12个红球 paper mouse能抽3次 蒟蒻的p…...
SpringCloud相关
文章目录 Gateway动态路由灰度策略 FeignRibbon SpringCloud五大组件分别对应(1)服务注册与发现(2)客服端负载均衡(3)断路器(4)服务网关(5)分布式配置 Gatewa…...
在 Linux 和 Windows 系统下查看 CUDA 和 cuDNN 版本的方法,包括使用 nvcc 命令
一直都比较头疼cuda与cudnn版本查看问题,两个系统不一样也不好查看,命令不通用 Linux 查看 CUDA 版本 方法一: nvcc --version或 nvcc -V如果 nvcc 没有安装,那么用方法二。 方法二: 去安装目录下查看ÿ…...
idea项目中java类名出现带 j 小红点,如何解决?
目录 一、问题描述 二、问题解决方案 1、寻找异常问题 2、解决方案 2.1常规操作方法 2.2 快速操作方法 一、问题描述 一打开idea的java项目,发现所有的文件边上都有带J的大红点 虽然,在 git bash 中进行编译时无异常。 但是视觉上给人的感受就是…...
生产环境_移动目标轨迹压缩应用和算法处理-Douglas-Peucker轨迹压缩算法
场景: 我目前设计到的场景是:即在地图应用中,对GPS轨迹数据进行压缩,减少数据传输和存储开销,因为轨迹点太频繁了,占用空间太大,运行节点太慢了,经过小组讨论需要上这个算法&#x…...
HINSTANCE是什么?
HINSTANCE 就是 HMODULE:...
uniapp小程序定位;解决调试可以,发布不行的问题
遇见这个问题;一般情况就两种 1、域名配置问题; 2、隐私协议问题 当然,如果你的微信小程序定位接口没开启;定位也会有问题; 第一种,小程序一般是腾讯地图;所以一般都会用https://apis.map.qq.co…...
C++学习 --pair
目录 1, 什么是pair 2, 创建pair 2-1, 标准数据类型 2-2, 自定义数据类型 3, 查询元素 3-1, 标准数据类型 3-2, 自定义数据类型 1, 什么是pair 数据以键值对形式存放的容器&…...
Android Frgment中onActivityResult无效的问题
前言 最近在fragment中使用二维码扫描 发现拿不到onActivityResult返回 查了资料说是启动模式 或者是返回值为负数 断点调试 发现根本没走onActivityResult方法 问题 onActivityResult 在附属Activity中被拦截了 所以没有触发该方法 解决 在Fragment所依赖的Activity中执…...
微信数据安全警示:为什么PyWxDump项目被永久移除及其合规性启示
微信数据安全警示:为什么PyWxDump项目被永久移除及其合规性启示 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 在当今数字时代,数据安全和个人隐私保护已成为技术开发领域的核心议题。今天我们要探…...
观察Taotoken用量看板如何帮助个人开发者精打细算
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助个人开发者精打细算 对于独立开发者和小型项目团队而言,在探索和应用大模型时࿰…...
3步解密微信聊天记录:WechatDecrypt工具实战指南
3步解密微信聊天记录:WechatDecrypt工具实战指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因误删重要聊天记录而懊恼?或者想要备份珍贵的对话却无从下手?…...
在Windows电脑上畅游酷安社区:Coolapk-UWP桌面客户端完全指南
在Windows电脑上畅游酷安社区:Coolapk-UWP桌面客户端完全指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾想过,在电脑大屏幕上也能像手机一样流畅浏览…...
终极指南:如何用Elasticvue轻松管理你的Elasticsearch集群
终极指南:如何用Elasticvue轻松管理你的Elasticsearch集群 【免费下载链接】elasticvue Elasticsearch gui - desktop app, browser extension, docker, self hosted 项目地址: https://gitcode.com/gh_mirrors/el/elasticvue Elasticsearch是当今最流行的分…...
企业级公司日常考勤系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
摘要 现代企业管理中,考勤管理是人力资源管理的核心环节之一,直接影响企业的运营效率和员工的工作积极性。传统考勤方式依赖人工记录,容易出现数据错误、效率低下等问题,难以满足企业精细化管理的需求。随着信息技术的快速发展&am…...
CANN/tensorflow迭代循环设置API
set_iteration_per_loop 【免费下载链接】tensorflow Ascend TensorFlow Adapter 项目地址: https://gitcode.com/cann/tensorflow 功能说明 设置sess.run模式下小循环次数,即每次sess.run()在Device侧执行训练迭代的次数,可以减少Host与Device间…...
如何让微信网页版重新可用?wechat-need-web插件完整安装指南
如何让微信网页版重新可用?wechat-need-web插件完整安装指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中使用微信…...
本地AI代理桥接器:统一调用多云端大模型的轻量级解决方案
1. 项目概述与核心价值最近在折腾一些本地AI应用和自动化流程时,遇到了一个挺典型的问题:我手头有一些功能强大的云端API服务,比如OpenAI的ChatGPT、Claude,或者一些图像生成模型,但出于数据隐私、网络延迟、成本控制或…...
隐私优先的本地化个人基因组分析工具:从SNP解析到多基因风险评分
1. 项目概述:一个隐私至上的本地化个人基因组分析工具如果你和我一样,对消费级基因检测(比如23andMe、AncestryDNA)的结果感到好奇,但又对把最私密的遗传数据上传到云端服务器心存疑虑,那么你一定会对wkyle…...
