当前位置: 首页 > news >正文

女生网站开发制作网页的工具有哪些

女生网站开发,制作网页的工具有哪些,wordpress排队加载,2023免费推广网站文章目录 1 Redisson功能介绍2 Redisson在Springboot中快速入门#xff08;代码#xff09;2.1 导入依赖2.2 Redisson配置2.3 将自定义锁setnx换成Redisson实现#xff08;可重入锁#xff09; 3 可重入锁原理3.1 自定义分布式锁setnx为什么不可以重入3.2 redisson为什么可… 文章目录 1 Redisson功能介绍2 Redisson在Springboot中快速入门代码2.1 导入依赖2.2 Redisson配置2.3 将自定义锁setnx换成Redisson实现可重入锁 3 可重入锁原理3.1 自定义分布式锁setnx为什么不可以重入3.2 redisson为什么可以实现可重入3.2.1 获取锁的lua脚本3.2.2 释放锁的lua脚本 1 Redisson功能介绍 基于自定义setnx实现的分布式锁存在下面的问题 重入问题重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中可重入锁的意义在于防止死锁比如HashTable这样的代码中他的方法都是使用synchronized修饰的假如他在一个方法内调用另一个方法那么此时如果是不可重入的不就死锁了吗所以可重入锁他的主要意义是防止死锁我们的synchronized和Lock锁都是可重入的。 不可重试是指目前的分布式只能尝试一次我们认为合理的情况是当线程在获得锁失败后他应该能再次尝试获得锁。 **超时释放**我们在加锁时增加了过期时间这样的我们可以防止死锁但是如果卡顿的时间超长虽然我们采用了lua表达式防止删锁的时候误删别人的锁但是毕竟没有锁住有安全隐患 主从一致性 如果Redis提供了主从集群当我们向集群写数据时主机需要异步的将数据同步给从机而万一在同步过去之前主机宕机了就会出现死锁问题。 那么什么是Redisson呢 Redisson是一个在Redis的基础上实现的Java驻内存数据网格In-Memory Data Grid。它不仅提供了一系列的分布式的Java常用对象还提供了许多分布式服务其中就包含了各种分布式锁的实现。 Redission提供了分布式锁的多种多样的功能 2 Redisson在Springboot中快速入门代码 2.1 导入依赖 !-- redisson -- dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.15.3/version /dependency2.2 Redisson配置 package com.atguigu.gmall.common.config;import lombok.Data; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.config.SingleServerConfig; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils;/*** redisson配置信息*/ Data Configuration ConfigurationProperties(spring.redis) public class RedissonConfig {private String host;private String addresses;private String password;private String port;private int timeout 3000;private int connectionPoolSize 64;private int connectionMinimumIdleSize10;private int pingConnectionInterval 60000;private static String ADDRESS_PREFIX redis://;/*** 自动装配**/BeanRedissonClient redissonSingle() {Config config new Config();if(StringUtils.isEmpty(host)){throw new RuntimeException(host is empty);}SingleServerConfig serverConfig config.useSingleServer()//redis://127.0.0.1:7181.setAddress(ADDRESS_PREFIX this.host : port).setTimeout(this.timeout).setPingConnectionInterval(pingConnectionInterval).setConnectionPoolSize(this.connectionPoolSize).setConnectionMinimumIdleSize(this.connectionMinimumIdleSize);if(!StringUtils.isEmpty(this.password)) {serverConfig.setPassword(this.password);}// RedissonClient redisson Redisson.create(config);return Redisson.create(config);} }2.3 将自定义锁setnx换成Redisson实现可重入锁 实现类详细看这个章节https://blog.csdn.net/yu_fu_a_bu/article/details/139408497 GetMapping(testRedisLock)public Result testRedisLock(){testLockService.testRedisLock();return Result.ok();}Autowiredprivate RedissonClient redissonClient;Overridepublic void testRedisson() {//创建可重入锁对象并指定锁的名称RLock lock redissonClient.getLock(redisson:1);//获取锁循环重试的时间逻辑过期时间时间单位boolean isLock false;try {isLock lock.tryLock(1, 10, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();System.out.println(获取锁出现异常);}//获取锁成功执行业务逻辑if (isLock){try{//从缓存中获取值String num stringRedisTemplate.opsForValue().get(redissonLock);//加1操作int i Integer.parseInt(num)1;String s StringUtil.toString(i);//存储到redis中stringRedisTemplate.opsForValue().set(redissonLock,s);}finally {//只有获取到锁的线程才去释放锁lock.unlock();}}}测试 ab -n 5000 -c 100 http://192.168.142.1:81/admin/product/testLock/testRedisson 3 可重入锁原理 3.1 自定义分布式锁setnx为什么不可以重入 数据结构key-value的形式。String类型 public class DistributedLockExample {private static Jedis jedis new Jedis(127.0.0.1, 6379);public void acquireLock(String lockKey) {Boolean locked jedis.setnx(lockKey, true);if (locked) {System.out.println(Lock acquired successfully.);} else {System.out.println(Lock already acquired by another process.);}}public static void main(String[] args) {DistributedLockExample example new DistributedLockExample();example.acquireLock(myLock);example.acquireLock(myLock); // 尝试重入} }在上面的示例中acquireLock方法通过setnx尝试获取锁。第一次调用acquireLock时成功获取锁因为myLock这个key在Redis中不存在。第二次调用acquireLock尝试重入时会返回锁已被占用的提示因为Redis的setnx指令无法识别重入情况每次获取锁都需要先检查是否已被占用。 3.2 redisson为什么可以实现可重入 数据类型key-value(field-value) Hash类型 不仅存入线程标识保证不删除别人的锁而且存入可重入的次数保证可重入。 3.2.1 获取锁的lua脚本 lua脚本可以保证原子性 local key KEYS[1];--锁的key local threadId ARGV[1]; --线程的唯一标识 local releaseTime ARGV[2];--锁的自动释放时间 --判断锁是否存在 if(redis.call(exists,key) 0) then --不存在获取锁redis.call(hset, key,threadId,1);--设置有效期redis.call(expire,key,releaseTime);return 1;--返回结果 end; --如果锁已经存在判断threadId是否是自己的 if(redis.call(hexists,key,threadId) 1) then--存在获取锁重入次数加一redis.call(hincrby,key,threadId,1);-- 设置有效期redis.call(expire,key,releaseTime);return 1;--返回结果 end; return 0;--获取锁失败3.2.2 释放锁的lua脚本 local key KEYS[1];--锁的key local threadId ARGV[1]; --锁的唯一标识 local releaseTime ARGV[2];--锁的自动释放时间 -- 判断锁是还是被自己持有 if(redis.call(HEXISTS,key,threadId) 0) then return nil;--如果已经不是自己则直接返回 end; -- 是自己的锁则可重入的次数进行-1 local count redis.call(HINCRVY,key,threadId,-1); -- 判断可重入的次数是否为0 if(count 0){-- 大于0说明不能释放锁重置过期时间然后返回redis.call(EXPIRE,key,releaseTime);return nil; else --等于0说明可以释放锁直接删除redis.call(DEL,key);return nil; end;
http://www.w-s-a.com/news/722684/

相关文章:

  • 网站国外建设超级简历模板官网
  • 上海网站建设市场医药网站怎么做
  • 宁夏成城建设集团网站网店美工课本
  • 哪些网站的简历做的比较好政务服务 网站 建设方案
  • 如何建设个人网站凡科怎么样vps安装wordpress后怎样登录
  • 学seo朝阳区seo
  • 网站开发团队成员皮具网站建设
  • 国外外贸需求网站响应式布局网页
  • 手机端便民服务平台网站建设昆明网络哪家好
  • 产品网站建设找哪家舟山信息港
  • 唐山网站建设汉狮怎么样seol英文啥意思
  • 深圳小程序网站开发公司网页制作模板视频教程
  • 电子商务网站开发开题报告wordpress更改后台地址
  • 网站静态前端是什么工作
  • 餐饮门户网站 方案怎么做创业好项目
  • 做百度手机网站推广普通话的宣传标语
  • 记事本可以做网站吗网站服务器是主机吗
  • 手机网站被拦截怎么办怎么解决东营建设信息网网
  • 外贸网站模板免费微信网站开发技术
  • 视频盗版网站怎么做福州网站seo
  • 成都金铭 网站建设做网站包含的技术
  • 长沙的网站建设公司哪家好做网站应选那个主题
  • 公司网站百度搜不到如何自己做一个网站
  • 学生如何建设网站网站开发程序
  • 网站建设公司哪家好 皆来磐石网络网站建设"淘宝网" 在颜色选取和搭配方面有哪些值得学习的地方.
  • 网站如何做移动规则适配北京住房与城乡建设部网站
  • 课堂阵地建设网站wordpress运行机制
  • 网站建设的需求方案企业网站建设费用明细
  • 创口贴网站模板京创影视app
  • 团购网站建设目的网站有很多304状态码