怎么让付费网站免费/免费做网站怎么做网站

怎么让付费网站免费,免费做网站怎么做网站,北京工商注册代理,wordpress转换语言加锁原理 # 如果锁不存在 if (redis.call(exists, KEYS[1]) 0) then# hash结构,锁名称为key,线程唯一标识为itemKey,itemValue为一个计数器。支持相同客户端线程可重入,每次加锁计数器1.redis.call(hincrby, KEYS[1], ARGV[2], 1);# 设置过期时间redis.call(pexpi…

加锁原理

image-20250307162041799

# 如果锁不存在 
if (redis.call('exists', KEYS[1]) == 0) then# hash结构,锁名称为key,线程唯一标识为itemKey,itemValue为一个计数器。支持相同客户端线程可重入,每次加锁计数器+1.redis.call('hincrby', KEYS[1], ARGV[2], 1);# 设置过期时间redis.call('pexpire', KEYS[1], ARGV[1]);# 成功获取锁返回nullreturn nil;
end ;
#如果是当前线程占有分布式锁,允许重入锁
if (redis.call('hexists', KEYS[1], ARGV[2]) == 1) then# 将锁重入计数器自增1.redis.call('hincrby', KEYS[1], ARGV[2], 1);# 设置过期时间redis.call('pexpire', KEYS[1], ARGV[1]);# 成功获取锁返回nullreturn nil;
end ;
#如果获取不到锁,返回锁剩余过期时间,方便后续代码设置等待超时时间
return redis.call('pttl', KEYS[1]);

在分布式锁中,采用hash结构用来存储锁,其中大key表示表示这把锁是否存在,用小key表示当前这把锁被哪个线程持有。HINCRBY 可以在 KEYS[1](哈希键)不存在时直接创建并执行递增操作。

KEYS[1] : 锁名称

ARGV[1]: 锁失效时间

ARGV[2]: uuid + “:” + threadId; 锁的小key,客户端唯一标识

image-20250307163702718

image.png

图1处:判断获取锁是否等待(waitTime)超时,如果等待超时则直接返回获取锁失败。

图2处:如果等待未超时,则尝试订阅解锁channel。

图3处:获取ReissonLockEntry(获取成功表示订阅成功),超时时长设置为当前剩余的等待时间(waitTime)。 如果获取ReissonLockEntry超时,终止并取消订阅解锁消息channel,获取锁失败。

直到获取锁成功或者超时失败。 解锁消息广播给所有锁竞争的客户端,收到解锁消息后,客户端会有一个线程去重新竞争锁。当有解锁消息到达时,不需要恢复所有挂起的线程一起去竞争分布式锁,只需要唤醒一个线程去和集群中其它节点抢夺就可以了。这样好处是显而易见的,避免了大量的无效Redis请求,因为锁在集群中同一时刻只会有一个线程能持有。

解锁原理

# 判断锁是否为自己持有,不为自己持有则不允许解锁。
if (redis.call('hexists', KEYS[1], ARGV[3]) == 0) thenreturn nil;
end ;
# 由于支持可重入,所以这里需要判断是否完全解锁,每解一次锁重入计数器减1.
local counter = redis.call('hincrby', KEYS[1], ARGV[3], -1);
if (counter > 0) then# 如果锁还没有完全解除,则延长锁租用时间redis.call('pexpire', KEYS[1], ARGV[2]);return 0;
else# 删除锁redis.call('del', KEYS[1]);# 广播解锁消息redis.call('publish', KEYS[2], ARGV[1]);return 1;
end ;
return nil;

watch dog原理

Redisson 的看门狗机制(WatchDog)是一种自动续期机制,旨在确保任务执行期间锁不会因超时而被误释放

  • 原理:当客户端获取到锁后,Redisson 会启动一个后台定时任务(即看门狗)。在锁的持有期间,看门狗会以默认间隔(10秒)不断地续期,延长锁的过期时间,使锁的默认过期时间始终保持为30秒。这样,只要任务未完成且客户端仍然活跃,锁就不会过期。
  • 默认行为:默认情况下,Redisson 会开启看门狗机制,无需开发者手动配置。如果不想启用看门狗机制,可以在调用 tryLock 时指定 leaseTime 参数。
  • leaseTime设置的影响:如果显式设置 leaseTime(例如通过 tryLock(waitTime, leaseTime, TimeUnit.SECONDS)),看门狗机制将不会启动。锁会在 leaseTime 到期时自动释放。当锁超时时间为 -1 时,而且获取锁成功时,会启动看门狗定时任务自动续锁。

Redisson 中,tryLock(waitTime, leaseTime, TimeUnit.SECONDS) 方法是一个尝试获取分布式锁的非阻塞方法,通过等待和设置锁的租约时间来控制锁的行为。

参数解释

  • waitTime:最大等待时间,即在尝试获取锁时,线程等待的最大时间。如果在这段时间内锁没有被其他线程释放,当前线程会放弃获取锁,返回 false
  • leaseTime:锁的租约时间,即锁的自动释放时间。如果成功获取锁后,线程在 leaseTime 时间内没有手动释放锁,锁将自动失效并释放给其他线程。这个参数用于确保锁不会一直持有,避免死锁。
  • TimeUnit:时间单位,可以设置为秒、毫秒等

img

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

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

相关文章

单元化架构在字节跳动的落地实践

资料来源:火山引擎-开发者社区 什么是单元化 单元化的核心理念是将业务按照某种维度划分成一个个单元, 理想情况下每个单元内部都是完成所有业务操作的自包含集合,能独立处理业务流程,各个单元均有其中一部分数据,所有…

基于Python的垃圾短信分类

垃圾短信分类 1 垃圾短信分类问题介绍 1.1 垃圾短信 随着移动互联科技的高速发展,信息技术在不断改变着我们的生活,让我们的生活更方便,其中移动通信技术己经在我们生活起到至关重要的作用,与我们每个人人息息相关。短信作为移…

leetcode1971.寻找图中是否存在路径

初尝并查集&#xff0c;直接套用模板 class Solution { private:vector<int> father;void init() {for(int i0;i<father.size();i)father[i]i;}int find(int v) {return vfather[v]?v:father[v]find(father[v]);//路径压缩}bool isSame(int u,int v){ufind(u);vfind…

QAI AppBuilder 快速上手(7):目标检测应用实例

YOLOv8_det是YOLO 系列目标检测模型&#xff0c;专为高效、准确地检测图像中的物体而设计。该模型通过引入新的功能和改进点&#xff0c;如因式分解卷积&#xff08;factorized convolutions&#xff09;和批量归一化&#xff08;batch normalization&#xff09;&#xff0c;在…

景联文科技:以高质量数据标注推动人工智能领域创新与发展

在当今这个由数据驱动的时代&#xff0c;高质量的数据标注对于推动机器学习、自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域的发展具有不可替代的重要性。数据标注过程涉及对原始数据进行加工&#xff0c;通过标注特定对象的特征来生成能够被机器学习模型识别和使…

MySQL 索引下推

概念 索引下推&#xff08;Index Condition Pushdown&#xff0c;简称 ICP&#xff09; 是 MySQL 5.6 版本中提供的一项索引优化功能&#xff0c;它允许存储引擎在索引遍历过程中&#xff0c;执行部分 WHERE字句的判断条件&#xff0c;直接过滤掉不满足条件的记录&#xff0c;…

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…

2025信创即时通讯排行:安全合规与生态适配双轮驱动

随着信息技术应用创新&#xff08;信创&#xff09;战略的深化&#xff0c;国产即时通讯工具在政企市场的渗透率显著提升。2025年作为“十四五”规划收官之年&#xff0c;信创产业迎来规模化应用关键节点。本文将从认证标准、市场表现、技术架构、行业适配四大维度&#xff0c;…

关于TVS管漏电流的问题?

问题描述&#xff1a; 在量产的带电池故事机生产中&#xff0c;工厂产线测试电流时&#xff0c;有1台机器电流比正常机器大10mA左右。 原因分析&#xff1a; 1、分析电路原理图&#xff0c;去除可能出现问题的电压或器件&#xff08;不影响系统&#xff09;&#xff0c;发现…

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…

Java-servlet(七)详细讲解Servlet注解

Java-servlet&#xff08;七&#xff09;详细讲解Servlet注解 前言一、注解的基本概念二、Override 注解2.1 作用与优势2.2 示例代码 三、Target 注解3.1 定义与用途3.2 示例代码 四、WebServlet 注解4.1 作用4.2 示例代码 五、反射与注解5.1 反射的概念5.2 注解与反射的结合使…

机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)

纠正自己的误区&#xff1a;机器学习是一个大范围&#xff0c;并不是一个小的方向&#xff0c;比如&#xff1a;线性回归预测、卷积神经网络和强化学都是机器学习算法在不同场景的应用。 机器学习最为关键的是要有数据&#xff0c;也就是数据集 名词解释&#xff1a;数据集中的…

本地AI大模型工具箱 Your local AI toolkit:LMStudio

LMStudio介绍 官网&#xff1a;LM Studio - Discover, download, and run local LLMs LMStudio 是一个面向机器学习和自然语言处理的&#xff0c;旨在使开发者更容易构建和部署AI语言模型的应用软件。 LMStudio的特点是&#xff1a; 完全本地离线运行AI大模型 可以从Huggi…

[OpenCV】相机标定之棋盘格角点检测与绘制

在OpenCV中&#xff0c;棋盘格角点检测与绘制是一个常见的任务&#xff0c;通常用于相机标定。 棋盘格自定义可参考: OpenCV: Create calibration pattern 目录 1. 棋盘格角点检测 findChessboardCorners()2. 棋盘格角点绘制 drawChessboardCorners()3. 代码示例C版本python版本…

redis的典型应用 --缓存

Redis最主要的用途&#xff0c;分为三个方面&#xff1a; 1.存储数据&#xff08;内存数据库&#xff09; 2.缓存&#xff08;最常用&#xff09; 3.消息队列 缓存 (cache) 是计算机中的⼀个经典的概念。核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅&…

本地基于Ollama部署的DeepSeek详细接口文档说明

前文&#xff0c;我们已经在本地基于Ollama部署好了DeepSeek大模型&#xff0c;并且已经告知过如何查看本地的API。为了避免网络安全问题&#xff0c;我们希望已经在本地调优的模型&#xff0c;能够嵌入到在本地的其他应用程序中&#xff0c;发挥本地DeepSeek的作用。因此需要知…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见&#xff0c;本文将实现以下图像的绘制 关键步骤&#xff1a; &#xff08;1&#xff09;NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 &#xff08;2&#xff09;在ArcGIS&#xff08;…

Retrofit中scalars转换html为字符串

简介 在Retrofit中&#xff0c;如果你想直接获取HTML或其他文本格式的响应内容而不是将其映射到一个模型类&#xff0c;ScalarsConverterFactory 就派上用场了。ScalarsConverterFactory 是一个转换器工厂&#xff0c;它能够将响应体转换为Java基本类型如String、Integer或Byte…

Powershell WSL Windows系统复制数据到ubuntu子系统系统

从本地D盘下拷贝数据到ubuntu子系统下 Powershell 管理员打开执行 /mnt/d 此处是本地Windows系统的路径表示/opt ubutu 子系统目录 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/从ubuntu子系统中拷贝数据到本地D盘下 Powershell 管理员打开执行…

【多线程】线程安全集合类,ConcurrentHashMap实现原理

文章目录 线程安全集合类解决方案多线程环境使用顺序表多线程环境使用队列多线程环境使用哈希表ConcurrentHashMap1. 缩小锁的粒度2. 充分使用 CAS3. 针对扩容操作 线程安全集合类 ArrayList、Queue、HsahMap… 都是线程不安全的 Vector、Stack、Hashtable 都是线程安全的&am…