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

企业如何实现高端网站建设济南建站免费模板

企业如何实现高端网站建设,济南建站免费模板,企业网站开发外包公司,中国兰州网pc主站Redis 分布式锁是一种利用 Redis 实现的分布式系统中的锁机制#xff0c;用于在分布式环境下控制多个客户端对共享资源的访问。它通过 Redis 的原子性操作来确保在分布式系统中的不同节点上#xff0c;同一时刻只有一个客户端能够获取到锁#xff0c;从而保证了对共享资源的…Redis 分布式锁是一种利用 Redis 实现的分布式系统中的锁机制用于在分布式环境下控制多个客户端对共享资源的访问。它通过 Redis 的原子性操作来确保在分布式系统中的不同节点上同一时刻只有一个客户端能够获取到锁从而保证了对共享资源的互斥访问。 分布式锁通常在以下情况下使用 共享资源访问控制 当多个客户端需要访问共享资源时为了避免并发访问导致的数据不一致或竞态条件问题可以使用分布式锁来控制对资源的访问。防止重复执行 在分布式系统中某些操作可能需要保证只能被执行一次例如定时任务的执行、数据同步等可以使用分布式锁来确保操作只会被执行一次。避免缓存击穿 当缓存中的数据过期时可能会出现大量并发请求同时访问数据库的情况为了避免这种情况可以使用分布式锁来保证只有一个请求可以去数据库中重新加载数据其他请求等待结果返回。示例代码1 import org.redisson.Redisson; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.data.redis.core.RedisTemplate;import java.util.concurrent.TimeUnit;public class RedissonDistributedLock {private static final String LOCK_KEY mylock;private static final long LOCK_EXPIRE_TIME 30; // 锁的过期时间单位秒private RedisTemplateString, String redisTemplate;private RedissonClient redissonClient;public RedissonDistributedLock(RedisTemplateString, String redisTemplate, RedissonClient redissonClient) {this.redisTemplate redisTemplate;this.redissonClient redissonClient;}public boolean acquireLock() {RLock lock redissonClient.getLock(LOCK_KEY);try {return lock.tryLock(LOCK_EXPIRE_TIME, TimeUnit.SECONDS);} catch (InterruptedException e) {Thread.currentThread().interrupt();return false;}}public void releaseLock() {RLock lock redissonClient.getLock(LOCK_KEY);lock.unlock();}public static void main(String[] args) {// 初始化 RedisTemplate 和 RedissonClientRedisTemplateString, String redisTemplate // 初始化 RedisTemplateRedissonClient redissonClient Redisson.create(); // 初始化 RedissonClientRedissonDistributedLock lock new RedissonDistributedLock(redisTemplate, redissonClient);try {if (lock.acquireLock()) {// 成功获取锁后执行业务逻辑System.out.println(成功获取到锁执行业务逻辑...);Thread.sleep(5000); // 模拟业务逻辑执行时间} else {// 获取锁失败处理逻辑System.out.println(获取锁失败处理逻辑...);}} catch (InterruptedException e) {e.printStackTrace();} finally {// 释放锁lock.releaseLock();}} }在这个示例中我们创建了一个 RedissonDistributedLock 类它接收一个 RedisTemplate 和 RedissonClient 作为参数并提供了 acquireLock 和 releaseLock 方法来获取和释放锁。在 main 方法中我们初始化了 RedisTemplate 和 RedissonClient并使用 RedissonDistributedLock 来实现分布式锁。 示例代码2 import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.data.redis.serializer.StringRedisSerializer;import java.util.Collections;public class RedisDistributedLock {private static final String LOCK_KEY mylock;private static final String LOCK_VALUE locked;private static final long LOCK_EXPIRE_TIME 30000; // 锁的过期时间单位毫秒private RedisTemplateString, String redisTemplate;public RedisDistributedLock(RedisTemplateString, String redisTemplate) {this.redisTemplate redisTemplate;// 设置 RedisTemplate 的序列化器保证 key 和 value 都以字符串的形式存储redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());}public boolean acquireLock() {// 使用 Lua 脚本确保原子性操作String script if redis.call(setnx, KEYS[1], ARGV[1]) 1 then redis.call(pexpire, KEYS[1], ARGV[2]) return true else return false end;DefaultRedisScriptBoolean redisScript new DefaultRedisScript(script, Boolean.class);Boolean result redisTemplate.execute(redisScript, Collections.singletonList(LOCK_KEY), LOCK_VALUE, String.valueOf(LOCK_EXPIRE_TIME));return result ! null result;}public void releaseLock() {// 释放锁redisTemplate.delete(LOCK_KEY);}public static void main(String[] args) {// 初始化 RedisTemplateRedisConnectionFactory connectionFactory // 设置 Redis 连接工厂RedisTemplateString, String redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(connectionFactory);redisTemplate.afterPropertiesSet();RedisDistributedLock lock new RedisDistributedLock(redisTemplate);try {if (lock.acquireLock()) {// 成功获取锁后执行业务逻辑System.out.println(成功获取到锁执行业务逻辑...);Thread.sleep(5000); // 模拟业务逻辑执行时间} else {// 获取锁失败处理逻辑System.out.println(获取锁失败处理逻辑...);}} catch (InterruptedException e) {e.printStackTrace();} finally {// 释放锁lock.releaseLock();}} }这段代码使用了 RedisTemplate 来与 Redis 进行交互通过执行 Lua 脚本来确保获取锁的原子性操作。在 acquireLock 方法中通过执行 Lua 脚本来设置锁并设置了锁的过期时间从而避免了因为程序异常而导致锁永远不释放的情况。在业务逻辑执行完成后调用 releaseLock 方法来释放锁。
http://www.zqtcl.cn/news/524081/

相关文章:

  • 网站底部导航代码成品视频直播软件推荐哪个好一点ios
  • 上海电商网站开发公司垫江网站建设价格
  • 门户网站建设存在问题与不足商城网站开发项目文档
  • wordpress建站方便吗wordpress加入海报功能
  • 网站名称注册保护2018wordpress主题
  • 类似享设计的网站企业信息系统公示
  • 如何学习网站开发酒店网站源码
  • 怎么用nas做网站服务器WordPress云虚拟空间
  • 网站设计 ipad企业品牌推广宣传方案
  • 织梦网站怎么更换模板济南建设厅网站
  • 用wordpress仿站专业做俄语网站建设司
  • 做暧暧网站网站开发 思维导图
  • asp.net做登录注册网站苏醒的wordpress主题怎么样
  • 正能量不良网站推荐2020网站建设单位是什么
  • 固镇网站建设郑州网站seo顾问
  • 新建定制网站费用公司网站手机端和电脑端
  • 网站域名注册地址苏州建设培训中心网站
  • 高端娱乐网站建设沈阳seo专业培训
  • 做播放器电影网站需要多少钱6广州seo公司推荐
  • 笔记本可以做网站吗怎样查看网站是否备案
  • 千灯做网站网站静态和伪静态意思
  • 做境外碎片化旅游的网站wordpress wdcp
  • 整容医院网络建设公司seo实战技术培训
  • 免费服务器建立网站郑州seo线上推广系统
  • 医院网站建设的目的qq小程序源码
  • 郑州seo网站排名优化公司建站行业发展
  • 彭山住房和城乡建设局网站儒枫网网站建设
  • wap asp网站模板下载中企动力骗子公司
  • 中文电商网站模板洛阳网络公司排名
  • 国外毕业设计网站青岛seo服务