汕头网站建设公司wordpress获取当前分类文章数

news/2025/9/23 1:50:21/文章来源:
汕头网站建设公司,wordpress获取当前分类文章数,青岛官网排名推广,wordpress 网站建设什么是分布式锁 1.1 作用#xff1a; 保证数据的正确性#xff1a; 比如#xff1a;秒杀的时候防止商品超卖#xff0c;接口幂等性。 避免重复处理数据#xff1a; 比如#xff1a;1避免调度任务在多台机器重复执行#xff0c;2避免缓存过期所有请求都去加载数据库。 一…什么是分布式锁 1.1 作用 保证数据的正确性 比如秒杀的时候防止商品超卖接口幂等性。 避免重复处理数据 比如1避免调度任务在多台机器重复执行2避免缓存过期所有请求都去加载数据库。 一个分布式锁需要考虑的问题 1互斥阻塞。2锁需要可重入。3过期时间 4锁续期 1.2 redission的实现原理是什么 1.2.1 如何解决这四个问题呢 redission如何解决互斥 : redis内部使用key冲突解决互斥也就是相同的key只能出现一次。 使用lua脚本进行加锁和设置expire保证原子。 可重入每个线程在进行获取锁前都会去生成一个唯一id, 会判断加锁是否为自己的UUID。来进行可重入判断。 锁 过期时间 通过expire进行过期过期时间。 锁续期 看门狗机制进行锁时间的续期默认锁时间设置的是30S到10S,三分之一的时候会把锁时间重新设置为30S。 取消更新锁时长的任务场景有几种 :1正常释放锁2关闭了Redisson实例客户端在持有锁的过程中崩溃也就是服务器down机看门狗也会因为无法继续运行而停止续约这样过了租约时间后锁就会被自动释放。 1.2.2 redission使用的什么数据结构。 锁结构举例,redission使用hash结构进行加锁的。 { “lock-name”: { //线程id “threadId”: “Java-VM-thread-ID”, //UUID , 用于判断可重入当设置锁时生成UUID。 “UUID”: “unique-identifier”, //看门狗守护线程进行续约。 “lockWatchdogTimeout”: “timeout-in-seconds”, //加锁时间 “internalLockLeaseTime”: “lease-time-in-seconds” } } 源码 RFuture tryLockInnerAsync(long leaseTime, TimeUnit unit, long threadId, RedisStrictCommand command) { internalLockLeaseTime unit.toMillis(leaseTime); return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, command, //加锁成功的话创建hashset并设置过期时间if (redis.call(exists, KEYS[1]) 0) then redis.call(hset, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; //如果不存在进行判断线程是否为自己。if (redis.call(hexists, KEYS[1], ARGV[2]) 1) then redis.call(hincrby, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; return redis.call(pttl, KEYS[1]);,Collections.ObjectsingletonList(getName()), internalLockLeaseTime, getLockName(threadId));} redis在设置leaseTime的情况下看门狗是不会续命的。 当不使用leaseTime的情况下会设置为-1. 1比如我加锁时间是60S 然后业务执行了70S在60S的时候锁会释放 也就出现了重复加锁的情况 所以需要根据业务设置合理的加锁时长。 2当我没有设置leaseTime时默认为-1也就是永远不停。 为了使用同一套实现 也就是 setnx expire同时使用 那么默认会设置一个时长为30S的key。 然后进行锁续命续命来解决锁失效的问题。 代码中看门狗也就是一个定时任务会在1/3的时候进行更新任务。 Timeout task commandExecutor.getConnectionManager().newTimeout(new TimerTask() { Override public void run(Timeout timeout) throws Exception { RFutureBoolean future renewExpirationAsync(threadId);future.addListener(new FutureListenerBoolean() {Overridepublic void operationComplete(FutureBoolean future) throws Exception {expirationRenewalMap.remove(getEntryName());if (!future.isSuccess()) {log.error(Cant update lock getName() expiration, future.cause());return;}if (future.getNow()) {// reschedule itselfscheduleExpirationRenewal(threadId);}}}); }}, internalLockLeaseTime / 3, TimeUnit.MILLISECONDS); internalLockLeaseTime默认为30S。 为什么redis不设置一个永久不过期的时间而是使用续期的方式进行保证永不过呢 我的理解是redis想要复用同一套代码也就是底层全部使用这一套lua。所以使用上层定时维护key时长的方式达到key永不过期的效果。 RFuture tryLockInnerAsync(long leaseTime, TimeUnit unit, long threadId, RedisStrictCommand command) { internalLockLeaseTime unit.toMillis(leaseTime); return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, command, //加锁成功的话创建hashset并设置过期时间if (redis.call(exists, KEYS[1]) 0) then redis.call(hset, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; //如果if (redis.call(hexists, KEYS[1], ARGV[2]) 1) then redis.call(hincrby, KEYS[1], ARGV[2], 1); redis.call(pexpire, KEYS[1], ARGV[1]); return nil; end; return redis.call(pttl, KEYS[1]);,Collections.ObjectsingletonList(getName()), internalLockLeaseTime, getLockName(threadId));} 实战 场景分类 1单个锁资源资源可从前端传入。简单场景 ----使用注解加锁。 2单个锁复杂场景 使用模版进行处理。 ---- 自定义使用模版加锁。 3批量场景一般资源都是后端查出相关的进行锁定这种复杂的—自定义处理使用模版加锁。 1.2.2.1 分布式锁注解 package com.pzhu.spring.cloud.alibaba.consumer.annotation; import com.pzhu.spring.cloud.alibaba.consumer.Enum.RedisLockEnum; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit; /** 分布式锁注解 author jinhaiyang */ Retention(RetentionPolicy.RUNTIME)//运行时生效 Target(ElementType.METHOD)//作用在方法上 public interface RedissonLock { /** key的前缀,默认取方法全限定名除非我们在不同方法上对同一个资源做分布式锁就自己指定return key的前缀 */ String prefixKey() default “”; /** springEl 表达式return 表达式 */ String key(); /** 等待锁的时间默认-1不等待直接失败,redisson默认也是-1return 单位秒 */ int waitTime() default -1; /** 自动释放锁时长默认为-1也就是不会自动释放锁。根据业务设置自动释放锁时长避免死锁return 单位秒 */ int expireTime() default -1; /** 等待锁的时间单位默认毫秒return 单位 */ TimeUnit unit() default TimeUnit.MILLISECONDS; } 1.2.2.2 使用说明: 含义 默认值 是否必填 prefixKey 锁前缀 方法的全命名 否 key 操作锁定key 无 是 waitTime 默认锁等待 -1 否 expireTime 释放锁时间 -1 否 unit 锁时间单位 毫秒 否 1.2.2.2.1 单个资源使用示例 1.2.2.2.1.1 使用自定义注解锁资源可以通过前端传入。只能单个资源加锁。 我用reqDto中的resumeId作为加锁的key加锁的前缀为reception-web:listLock 因为没有指定默认等待时间所以立即获取到锁获取不到会自动失败。因为没有指定expireTime默认为-1所以并不会自动释放锁。 PostMapping(“list”) RedissonLock(prefixKey “reception-web:listLock” ,key “#order.id”) public List list(RequestBody Order order ) { System.out.println(JSON.toJSONString(reqDTO)); return serviceFeign.list(); } 1.2.2.2.1.2 自己有复杂业务处理的使用以下模版。 if (Boolean.TRUE.equals(redissionUtil.tryAcquire(RedisLockEnum.ROOM_ARRANGE,GatewayHeaderUtil.getHotelCode() RedissionUtil.LOCK_ARRANGE))) { try { //加锁成功后业务处理 rowHouses(orderArrangeReq); return true; } catch (Exception e) { // 加锁异常后自定义处理 log.error(“rowHouses hotelCode为{} 排房期间出现未知异常”, GatewayHeaderUtil.getHotelCode(), e); throw e; } finally { //重要 必须在finally中解锁。 redissionUtil.release(RedisLockEnum.ROOM_ARRANGE,GatewayHeaderUtil.getHotelCode() RedissionUtil.LOCK_ARRANGE); } } else { throw new ReceptionException(ReceptionEnums.ROOM_ARRANGE_NOW, ReceptionEnums.ROOM_ARRANGE_NOW.getResultMsg()); } 1.2.2.2.2 多资源加锁-批量加锁 一般不存在这种场景 比如当我要去通过团队id查询团队下的订单id锁住这些订单。我需要在业务中进行查询这种情况比较复杂所以不建议使用注解实现。 使用模版 if (Boolean.TRUE.equals(redissionUtil.multiLockTryAcquire(roomNos,GatewayHeaderUtil.getHotelCode(), 30L))) { try { rowHouses(orderArrangeReq); return true; } catch (Exception e) { log.error(“rowHouses hotelCode为{} 房间号列表为{} 排房期间出现未知异常”,GatewayHeaderUtil.getHotelCode(), JSON.toJSONString(roomNos), e); throw e; } finally { redissionUtil.mutiLockRelease(roomNos,GatewayHeaderUtil.getHotelCode()); } } else { //加锁失败证明存在部分房间冲突 throw new ReceptionException(ReceptionEnums.ROOM_IS_ARRANGE_NOW, ReceptionEnums.ROOM_IS_ARRANGE_NOW.getResultMsg()); } 参考文章 面试官竟然问我怎么实现分布式锁幸亏我总结了全套八股文 Redis 分布式锁的正确实现原理演化历程与 Redission 实战总结

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

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

相关文章

网站建设做账拓者设计吧首页

Golang交叉编译主要依赖几个参数:GOOS、GOARCH和CGO_ENABLED。 参数作用GOOS交叉编译的OSGOARCH交叉编译的CPU架构CGO_ENABLED设置为0时,编译出的二进制是静态的,也就是说没有外部的依赖。 编译在arm64的linux环境运行的程序: …

网站推广策划评估工具7网站点击赚钱怎么做

存储函数是有返回值存储过程,存储函数的参数只能还是IN类型的 1、语法 create function 存储函数名称 ([参数列表])Returns type [characterrastic...]Begin--SQL语句Return ..;End;characterrastic说明:Deterministic:相同的输…

返利网网站怎么做怎么创一个网站赚钱

1.网络编程 Java 提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。 1.1 InetAddress类 In…

建网站不花钱免费建站办公空间设计要素

注释很详细,直接上代码 上一篇 新增内容: 1.外界面个人资料基本模块 2.资料修改界面同步问题实现(细节挺多,考虑了后期转服务器端的方便之处) 源码: app.json {"window": {},"usingCompone…

鞍山制作网站2018年临沂建设局网站

当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务。图片来自 Unsplash这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。在实…

网站运营需要 做哪些工作优秀网站作品截图

前言 随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼。想要做一个直播业务,主要包括三个部分:采集推流端、流媒体服务端、播放端。这里不多说,就主…

简述企业网站维护的重要性WordPress料神

数字世界不断发展。无论是小型企业、中型企业还是大型企业,建立在线形象对于企业来说都变得非常重要。那么,在本文中,我们将主要讨论网站的托管服务器。有许多托管解决方案可供选择,而虚拟专用服务器(VPS)托管是业内最佳选择之一。…

自己做返利网站项目进度管理软件app

文章目录项目介绍分析思路导图数据导入数据探索数据展示项目介绍 项目来源:Kaggle; 项目介绍:由vgchartz.com的一个刮版生成的,有一份综合的游戏行业销售数据,希望产生一份综合的游戏行业报告; 数据介绍&a…

成都网站建设收费男女插孔做暖暖网站大全

大家好,我是雄雄,上期我们解决了个bug,详情点击这里:我去,终于解决了 ,今天,我们来看看【如何在idea中使用jstl标签库】前言:像myeclipse和eclipse这种编辑器,jstl标签库…

怎样制作免费手机网站谷歌优化的网络公司

事件代理是一种编程技巧,它允许我们通过在父元素上监听事件,来处理子元素的事件。这种方式可以减少事件监听器的数量,提高性能。 在前端开发中,事件代理常常用于处理大量的动态元素。例如,在一个列表中,每…

仿糗事百科网站wordpress官网中文

矩阵键盘上使用二极管主要是为了解决“幽灵键”(Ghosting)和“键盘冲突”(Key Jamming)问题,这两种现象在没有采取适当措施的矩阵键盘中很常见。 幽灵键现象 当用户在矩阵键盘上同时按下多个键时,由于电流…

东莞有口碑的教育网站建设优化大师 win10下载

外贸网站是外贸企业展示自己的产品和服务,吸引和沟通国外客户,实现网络营销的重要工具。一个高效的外贸网站不仅要有美观的界面,还要有强大的功能和优化。那么,九凌网络分享如何建设一个高效的外贸网站呢? 第一步&…

可信网站认证有什么用wordpress菜单横排

#697 Degree of an Array 我承认慢慢有了思路的前提是你要见过那些解法,否则怎么想也想不到。多做题目,就像是多看书一样重要。 问题:一个数组的度这个数组中出现次数最多元素的出现次数。要找的是最短的子数组,而这个数组的度原数…

视觉设计网站wordpress充值金币

目录 目录 1、首先把要生成字幕的视频拖入以创建序列 2、点击工具栏的 窗口 选择 文本 3、选择字幕下的 转录序列 4、选择输出的语言(主要看视频声音说的是啥语言) 5、音轨 选择 音频1​编辑 6、点击转录 7、等待转录文本 8、点击创建说明性字幕按…

青岛外贸假发网站建设购买服务器做网站

一、KerasCV KerasCV 是一个模块化计算机视觉组件库,可与 TensorFlow、JAX 或 PyTorch 原生配合使用。这些模型、层、指标、回调等基于Keras Core构建,可以在任何框架中进行训练和序列化,并在另一个框架中重复使用,而无需进行昂贵的迁 KerasCV 可以理解为 Keras API 的水平…

钱包网站开发网站pc端网址和手机端网址建设

作者| Matt Kimball翻译 | 天道酬勤,编辑 | Carol出品| CSDN云计算(ID:CSDNcloud)混合云如今很流行。几乎每个IT公司都声称已部署了解决方案,但实际上实现的却很少。相反,它们拥有与多个云实例进行某种程度…

html5网站开发方案wordpress 微信登录代码

来源:资本实验室随着全球城市化进程的加速,越来越多的人涌进城市,这为城市建设带来了一系列的挑战:一方面,城市需要面对大量的越来越老化的基础设施;另一方面,需要为新涌入的城市居民提供新的&a…

高中男女做羞羞视频网站文件网站建设

C#核心实践小项目 -- 贪吃蛇 必备知识点--多脚本文件 (可观看CSharp核心--52集进行了解) 必备知识点--UML类图 必备知识点--七大原则 贪吃蛇 项目展示 控制方向的是:WSAD 确定键是:J 需求分析(UML类图&#xff09…

东莞p2p网站开发费用铜川哪些公司需要网页电商设计师

大三角外星人Area 15 R2原装出厂WINDOWS10系统 链接:https://pan.baidu.com/s/1JwDuHx1j7fRABtIpLmKW_g?pwdq4pd 提取码:q4pd 原厂系统自带所有驱动、外星人出厂主题壁纸、专属LOGO标志、Office办公软件、MyAlienware、外星人控制中心等预装程序 文…

公司网站建设情况报告wordpress 适配 手机端

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,…