页面设计制作网站wordpress有商城吗

web/2025/10/1 19:26:24/文章来源:
页面设计制作网站,wordpress有商城吗,seo怎么去优化网站,芜湖网站建设芜湖在分布式系统中#xff0c;如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题#xff0c;有这样一个案例#xff0c;有一件商品购买规则为一个用户只能购买一次#xff0c;如果使用同步锁锁住用户id如果使用JVM中的同步锁在高并发的场景下仍然会产生线程安全问题。首先我们来查看在多个服务器时为什么会产生线程安全问题有这样一个案例有一件商品购买规则为一个用户只能购买一次如果使用同步锁锁住用户id只能保证在一个服务器中一个用户只能购买一次在集群模式下就可能产生并发问题。 为了避免这个问题我们应该采取一个新的锁监视器当需要加锁时所有服务器都需要从外部的锁监视器中查看是否有线程加锁如果没有则获取互斥锁如果已经有线程获取到互斥锁那么就阻塞等待。模型图如下 什么是分布式锁 满足分布式系统或集群模式下多进程可见并互斥的锁。 分布式锁的实现 分布式锁的核心是实现多进程之间的互斥常见的实现方式有三种 MySQL Redis Zookeeper 互斥 利用MySQL本身的互斥锁机制 利用setnx这样的互斥命令 利用节点的唯一性和有序性实现互斥 高可用 好 好 好 高性能 一般 好 一般 安全性 断开连接自动释放锁 利用锁超时时间到期释放 临时节点断开连接自动释放 这里我们介绍Redis的实现方式首先是需要实现的两个最基本的方法 获取锁通过setnx命令并expire命令设置超时时间。 释放锁通过del命令或是宕机后通过超时时间释放。 但是在获取锁时可能会存在一个问题那就是在setnx时执行成功但是在expire时宕机没设置到超时时间为了避免这种情况我们需要保证两个命令的原子性可以采用lua脚本又或是采用set方法指定ex与nx参数采用set语法如下 set lock 1 nx ex 10 在Java中实现代码如下 public class SimpleRedisLock{private String name;private StringRedisTemplate stringRedisTemplate;private static final String key_Prefixlock:;public SimpleRedisLock(String name,StringRedisTemplate stringRedisTemplate) {this.name name;this.stringRedisTemplate stringRedisTemplate;}Overridepublic boolean getLock(String key,long timeOut) {String id Thread.currentThread().getId();//因为这里Redis会返回一个Boolean类型但是结果要boolean要进行拆箱如果没查到的话会返回一个null直接返回结果容易造成空指针异常Boolean success stringRedisTemplate.opsForValue().setIfAbsent(key_Prefix key, id , timeOut, TimeUnit.SECONDS);return Boolean.TRUE.equals(success);}Overridepublic void rmLock(String key) {stringRedisTemplate.delete(key_Prefixkey);} } 但是这样又存在一个问题那就是如果一个获取到锁的线程因为某些原因阻塞导致已经超过了锁的超时时间还没有执行完毕此时如果新的线程来获取锁因为Redis已经将锁删除了因此可以顺利获取到锁。在第二个线程正在执行业务时第一个线程执行完毕开始执行删除锁操作按照我们所实现的代码会将第二个线程的锁删除此时第三个线程它也可以开始获取到新的锁然后在执行期间锁被第二个线程释放。从而造成并行错误。具体模型图如下 为了解决这个问题我们需要修改初始代码如下正确的模型图如下 public class SimpleRedisLock{private StringRedisTemplate stringRedisTemplate;private static final String key_Prefixlock:;//修改线程标识为UUIDtoString方法中的true是为了将UUID中的-去除我们需要自己在后面拼接一个-private static final String ID_Prefix UUID.randomUUID().toString(true)-;public SimpleRedisLock(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate stringRedisTemplate;}Overridepublic boolean getLock(String key,long timeOut) {String id ID_PrefixThread.currentThread().getId();//因为这里Redis如果没查到的话会返回一个null类型是Boolean但是结果要boolean要进行拆箱boolean只又true以及false会报空指针异常Boolean success stringRedisTemplate.opsForValue().setIfAbsent(key_Prefix key, id , timeOut, TimeUnit.SECONDS);return Boolean.TRUE.equals(success);}Overridepublic void rmLock(String key) {//获取锁标识。如果相同在释放不同则什么也不做String id ID_PrefixThread.currentThread().getId();String value stringRedisTemplate.opsForValue().get(key_Prefix key);if (id.equals(value)) stringRedisTemplate.delete(key_Prefixkey);} } 但是这样也无法完全解决分布式锁可能产生的问题接下来我们查看另一种模型图 线程一在判断过Redis中锁标识一样后就在开始执行释放锁时比如说开始gc垃圾回收或是其他原因导致的暂时阻塞而在阻塞期间线程一的锁标识超时释放这时线程二进行获取锁。线程一阻塞结束由于要执行删除操作再次把线程二的锁误删。 这样我们如果通过修改Java代码来解决该问题就过于复杂需要依赖Redis中的事务机制以及乐观锁实现因此更推荐使用Lua脚本来保证获取锁与删除锁的原子性。 简单介绍一下Redis中在Lua语言中提供调用的方法 redis.call(命令名称,key,其他参数)-- 比如说要执行set name 张三 redis.call(set,name,张三)-- 如果不想写死需要执行keyvalue那么可以通过参数传递 -- key 类型会放在KEYS数组当中。value会放在ARGV数组当中 -- 需要注意的时Lua语言中数组下标以1开始 redis.call(set,KEYS[1],ARGV[1]) RedisTemplate调用lua脚本的API如下 redistemplate.excute(script,keys,args); 再次修改Java代码如下 public class SimpleRedisLock{private StringRedisTemplate stringRedisTemplate;private static final String key_Prefixlock:;private static final String ID_Prefix UUID.randomUUID().toString(true)-;private static final DefaultRedisScriptLong rmLock_script;static {rmLock_scriptnew DefaultRedisScript();//设置脚本位置rmLock_script.setLocation(new ClassPathResource(rmlock.lua));//设置返回类型rmLock_script.setResultType(Long.class);}public SimpleRedisLock(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate stringRedisTemplate;}Overridepublic boolean getLock(String key,long timeOut) {String id ID_PrefixThread.currentThread().getId();//因为这里Redis如果没查到的话会返回一个null类型是Boolean但是结果要boolean要进行拆箱boolean只又true以及false会报空指针异常Boolean success stringRedisTemplate.opsForValue().setIfAbsent(key_Prefix key, id , timeOut, TimeUnit.SECONDS);return Boolean.TRUE.equals(success);}Overridepublic void rmLock(String key) {//调用lua脚本stringRedisTemplate.execute(rmLock_script, Collections.singletonList(key_Prefix key),ID_PrefixThread.currentThread().getId());}} 具体的执行脚本代码如下 if(redis.call(get,KEYS[1]) ARGV[1]) thenreturn redis.call(del,KEYS[1]) end return 0 这样的实现方式已经可以避免普通的并发问题但是仍然存在一定问题比如说存在一个业务需要方法A调用方法B而在这两个方法中需要获取同一把锁那么就是产生死锁问题因此我们还需要实现锁可重入。其次我们的实现方式中如果没有获取到锁会立即返回但是通常我们需要进行重试我们还需要实现重试机制。还有主从不一致问题这些问题让我们实际开发中实际并不现实因此我们可以选择Redisson来解决以上问题。 Redisson的简单使用 在pom文件引入依赖 dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.19.0/version /dependency 配置Redis我们可以选择yaml文件配置也可以选择Java配置类 Configuration public class RedisConfig {Beanpublic RedissonClient redissonClient(){//配置类Config confignew Config();config.useSingleServer().setAddress(redis://127.0.0.1:6379);return Redisson.create(config);} } Redisson的简单使用 SpringBootTest class RedissonApplicationTests {Resourceprivate RedissonClient redissonClient;Testpublic void test01() throws Exception {//获取锁指定锁名称可重入RLock lock redissonClient.getLock(lock);//三个参数分别是最大获取锁等待时间期间会重试锁自动释放时间时间单位boolean flag lock.tryLock(1, 10, TimeUnit.SECONDS);if (flag){try{System.out.println(获取锁成功);}finally {lock.unlock();}}} } 锁在Redis中存储结构如下其中value代表的是锁重入次数

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

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

相关文章

网站优化的主要任务喂来苏州网络科技有限公司

题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在…

自助健站wordpress手机显示图片

前言 本文是该专栏的第39篇,后面会持续分享python的各种干货知识,值得关注。 在本专栏之前,有详细介绍使用python增加b站视频的播放量方法,感兴趣的同学可往前翻阅《Python-增加b站视频播放量》。而本文,笔者再来单独的详细介绍,通过python来获取b站视频的弹幕内容。如下…

服装网站栏目调研推介网手机版

在使用连续凸近似(SCA)求解优化问题时遇到了报错 Problem status : ILL_POSED Solution status : PRIMAL_ILLPOSED_CER并且最后给出的结果为NaN。 在CVX论坛中找到一条回答 具体链接如下: The status is failed 因为我使用的是CVX自带的…

公司网站制作步骤编程的网站都有哪些

引子:规模化敏捷转型从来不是一件容易的事情。当只有1-2个敏捷团队进行协同的时候,计划和工作同步是可控的。团队和产品负责人互相聊一聊,基本就能搞清楚需要做什么,一个简单的SOS架构(Scrum of Scrums)就能…

常州网站建设包括哪些用框架做网站如何居中

效果 1、下载和安装VS2019 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 登录需要用户名和密码 安装后需要联网下载组件的,安装的时候要勾选使用C++的桌面开发 2、下载和安装显卡驱动 查看自己的显卡型号 从英伟达下载和安装最新驱动

通信管理局网站 备案工作室做什么项目好

UGUI是Unity引擎中的一套用户界面系统,用于开发游戏和应用程序的UI界面。在进行UGUI开发时,可以采取以下优化方法和注意事项: 使用UI对象池:在频繁创建和销毁UI对象时,可以使用对象池来重复利用已创建的UI对象&#xf…

网站页面设计工具网站响应时间 标准

索引可以说是Elasticsearch中非常重要的模块,一个索引可以视作关系数据库中的一张表,本帖将详细介绍与Elasticsearch索引相关的各种功能等。主要内容如下: 索引映射(mapping)结构的定义方法,常用的各种字段类型和动态映射的使用。…

怎样让自己网站的文章被百度收录嘉兴网站建设嘉兴

C之STL整理(1)之STL、vector、map、set数据结构初识 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的 STL C之STL整理(1)之ST…

开网站供免费下载用angular做的网站

项目描述 这是一款基于SpringBoot的饭店外卖平台的系统 模块描述 用户端 登录 首页 商家信息 点餐 菜品列表 下单 订单列表 账号下单列表 个人中心 个人资料 修改信息 评论管理 评论菜品 查看评论 打赏骑手 打赏骑手 管理员 登录 菜品管理 修改 下架 订单列表 下单记录 菜品管理…

免费制作logo的网站网站建设招标书范本

常用程序模式-LifeCycle模式 场景 当我们要监控一个组件的生命周期的时候,比如,启动时,启动后,关闭前,关闭后 实现 LifeCycleModule public interface LifeCycleModule {/*** 获取当前状态* return*/LifeCycle.St…

网站开发方向的工作wordpress 移动模板

KTV的竞争已经到了拼综合实力的阶段,向管理要效益、建立完善的KTV企业管理体系的重要性已经不言而喻了,建立全面的管理体系,可以促进KTV整体管理工作同步化、协调化,全面提升管理绩效,是KTV企业立足市场,基…

网站百度收录删除怎么设置wordpress底栏文字

前提:以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list,一个表头的list,一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…

上海工程建设招投标网站专门学习网站建设读什么专业

经常可以见到.说解决跨域只要返回加上"Access-Control-Allow-Origin"头部就行… 下面从实践中一步一步的理解. 1.环境准备: 1. node.js (http://nodejs.cn/) 自行下载配置, 完毕后(cmd)输入 node --version 若显示版本号则代表成功// ps: node(中的npm)方便下载资源…

上海建设银行网站上班时间wordpress 婚恋

Reindex如何实现索引重建? 滚动索引 批量复制 Reindex存在的问题 如果新的索引没有提前创建好,并指定字段类型,那么重建后的新索引类型极有可能会和旧的索引不一致,因为ES他会推断类型,而推断错误率从实战来说那是…

太原建立网站北京百度关键词优化

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp,然后右键hmdp下的表,选择运行SQL文件,然后指定运行文件hmdp.sql即可(建议MySQL的版本在5.7及以上): 下面这…

珠海响应式网站建设公司asp网站镜像代码

一、题目 求1/22/33/4……n-1/n的和 如图&#xff1a; 二、思路分析 1、1/2、2/3、3/4……可以用(i/i1) 2、设置一个函数&#xff0c;求数的相加之和 三、代码截图【带注释】 四、源代码【带注释】 #include <stdio.h> int main() { int num; printf("输入…

佛山网站的建设简述seo的概念

文章目录1. 题目2. 解题1. 题目 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。 实现 SmallestInfiniteSet 类&#xff1a; SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void ad…

重庆1000元网站建设抖音账号权重查询入口

这本书短短的100多页&#xff0c;很象是一篇文章。但是指出的很多问题的确容易出现在笔试的改错题中--------------------------------------------------------------------第1章 词法陷阱1.1 和 1.3 词法分析的"贪心法则"编译器从左到右读入字符&#xff0c;每个符…

外贸展示型模板网站模板池州建行网站

导言&#xff1a; ._locked勒索病毒&#xff0c;一种近年来日益猖獗的网络安全威胁&#xff0c;已经引起了全球范围内的广泛关注。该病毒通过电子邮件附件、恶意网站和漏洞利用等多种方式传播&#xff0c;一旦感染系统&#xff0c;就会加密受感染设备上的所有文件&#xff0c;…

搜狗提交网站入口国家企业信用公示信息系统(湖南)

1 mongo同步数据到mysql中 我想把51万8400的计算出来的八字信息&#xff0c;从mongo同步到mysql&#xff0c;看看在mysql中运行会怎么样。 选择mongodb input&#xff0c;这个是在Big Data中。 填写数据库和表 获取到mongodb的字段,获取到mongo的字段&#xff0c;如果某个字段…