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

广州各区进一步强化seo网站有优化培训班吗

广州各区进一步强化,seo网站有优化培训班吗,网页设计工资待遇,网站广告素材分布式锁:Redisson还实现了Redis文档中提到像分布式锁Lock这样的更高阶应用场景。事实上Redisson并没有不止步于此,在分布式锁的基础上还提供了联锁(MultiLock),读写锁(ReadWriteLock)&#xff…

分布式锁:Redisson还实现了Redis文档中提到像分布式锁Lock这样的更高阶应用场景。事实上Redisson并没有不止步于此,在分布式锁的基础上还提供了联锁(MultiLock),读写锁(ReadWriteLock),公平锁(Fair Lock),红锁(RedLock),信号量(Semaphore),可过期性信号量(PermitExpirableSemaphore)和闭锁(CountDownLatch)这些实际当中对多线程高并发应用至关重要的基本部件。正是通过实现基于Redis的高阶应用方案,使Redisson成为构建分布式系统的重要工具。

依赖

<!-- https://mvnrepository.com/artifact/org.redisson/redisson -->
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.15.5</version>
</dependency>

样例

	@AutowiredRedissonClient redissonClient;public String TestLock() {// 1.获取锁,只要锁的名字一样,获取到的锁就是同一把锁。RLock lock = redisson.getLock("redisson-lock");// 2.加锁lock.lock();try {System.out.println("加锁成功,执行后续代码。线程 ID:" + Thread.currentThread().getId());Thread.sleep(10000);} catch (Exception e) {//TODO} finally {lock.unlock();// 3.解锁System.out.println("Finally,释放锁成功。线程 ID:" + Thread.currentThread().getId());}return "test lock ok";}

锁无过期时间情况:服务停了,锁会释放-看门狗原理

如果负责储存这个分布式锁的 Redisson 节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。

默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。

如果我们未制定 lock 的超时时间,就使用 30 秒作为看门狗的默认时间。只要占锁成功,就会启动一个定时任务:每隔 10 秒重新给锁设置过期的时间,过期时间为 30 秒。

设置锁过期时间

RLock lock = redissonClient.getLock("lock-expireTime");
lock.lock(10000, java.util.concurrent.TimeUnit.MILLISECONDS);

不使用此框架的情况下

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.util.Collections;
import java.util.UUID;
import java.util.concurrent.TimeUnit;public class RedisTemplateDistributedLock {private RedisTemplate<String, Object> redisTemplate;public RedisTemplateDistributedLock(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;// 设置序列化器,避免乱码问题redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());}/*** 获取分布式锁* @param lockKey 锁的键* @param expireTime 锁的过期时间* @param timeUnit 时间单位* @return 锁的唯一标识,如果获取失败返回 null*/public String tryLock(String lockKey, long expireTime, TimeUnit timeUnit) {String requestId = UUID.randomUUID().toString();Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireTime, timeUnit);return result != null && result ? requestId : null;}/*** 释放分布式锁* @param lockKey 锁的键* @param requestId 锁的唯一标识* @return 是否成功释放锁*/public boolean releaseLock(String lockKey, String requestId) {String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";RedisScript<Long> redisScript = new DefaultRedisScript<>(script, Long.class);Long result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), requestId);return result != null && result == 1;}
}    
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;import java.util.concurrent.TimeUnit;public class RedisTemplateDistributedLockUsage {public static void main(String[] args) {// 假设这里已经有 RedisConnectionFactory 的实例RedisConnectionFactory redisConnectionFactory = null;RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());redisTemplate.afterPropertiesSet();RedisTemplateDistributedLock lock = new RedisTemplateDistributedLock(redisTemplate);String lockKey = "myDistributedLock";long expireTime = 10;TimeUnit timeUnit = TimeUnit.SECONDS;// 尝试获取锁String requestId = lock.tryLock(lockKey, expireTime, timeUnit);if (requestId != null) {try {System.out.println("成功获取到锁,开始执行临界区代码");// 模拟业务操作try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}} finally {// 释放锁boolean released = lock.releaseLock(lockKey, requestId);if (released) {System.out.println("锁已成功释放");} else {System.out.println("锁释放失败");}}} else {System.out.println("未能获取到锁");}}
}    
http://www.dtcms.com/wzjs/326401.html

相关文章:

  • 做海报的网站有哪些内容百度大数据分析平台
  • 沧州献县疫情最新消息seo怎样
  • 晋中网站建设公司chatgpt 链接
  • 做美工参考网站怎么快速优化关键词排名
  • 济南网站建设价格a站
  • 网页设计教程多少钱关键词是网站seo的核心工作
  • 网站导航栏全屏怎么做株洲seo优化报价
  • 网站建设案例教程视频潍坊网站建设咨询
  • 藏文网站怎么做花都网络推广seo公司
  • 北京上海网站建设电脑优化大师
  • 石家庄新闻媒体求助热线电话百度seo推广计划类型包括
  • 手机兼职赚钱平台一单一结seo搜索引擎优化费用
  • 云南网站建设哪家便宜营销策略是什么意思
  • wordpress注册不了刘连康seo培训哪家强
  • 做广告公司网站建设价格上海关键词优化推荐
  • 学做网站会员产品推广找哪家公司
  • 珙县网站建设网站管理
  • wordpress可以做电影网站吗长沙seo排名优化公司
  • 网站静态图怎么做宁波网站推广找哪家
  • 青岛关键词优化平台青岛seo外包公司
  • 网站能给企业带来什么爱站seo工具包
  • 房山 网站建设搜索推广渠道
  • 芜湖手机网站开发软文街怎么样
  • 建立网站需要哪些费用客户引流推广方案
  • 个人网站介绍模板整站优化案例
  • 网站建设陕西宁波 seo整体优化
  • 钦州 网站建设怎么申请网站
  • 税务局网站模板怎么看app的下载网址
  • 做的好点的外贸网站有哪些软文写作什么意思
  • 嘉峪关市住房和城乡建设局网站营销推广是干什么的