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

网站开发的内容和特点公司logo设计大全 图片欣赏

网站开发的内容和特点,公司logo设计大全 图片欣赏,外包公司催收合法吗,网络信息安全公司排名文章目录 概要例子1【SETNX EXPIRE】例子2【 Redisson 】 概要 redis分布式锁六种方案 SETNX EXPIRE 方案: 描述:使用Redis的SETNX命令来尝试设置一个键值对,如果该键不存在,则设置成功并设置过期时间,实现锁的功能…

文章目录

    • 概要
    • 例子1【SETNX + EXPIRE】
    • 例子2【 Redisson 】

概要

redis分布式锁六种方案

  1. SETNX + EXPIRE 方案

    • 描述:使用Redis的SETNX命令来尝试设置一个键值对,如果该键不存在,则设置成功并设置过期时间,实现锁的功能。
  2. SETNX + value值 方案

    • 描述:通过SETNX命令尝试设置键值对,并将值设置为当前系统时间加上锁的过期时间,锁的释放可以通过比较值来判断是否过期。
  3. Lua脚本 方案

    • 描述:使用Lua脚本结合SETNX和EXPIRE两条指令,通过保证原子性来实现分布式锁。
  4. SET的扩展命令(SET EX PX NX)方案

    • 描述:利用Redis的SET命令的扩展参数,结合EX、PX和NX参数,可以一步完成锁的设置。
  5. 开源框架 Redisson 方案

    • 描述:Redisson是一个基于Redis的Java框架,提供了分布式锁等多种分布式功能的实现,简化了开发者的工作。
  6. 多机实现的分布式锁 Redlock 方案

    • 描述:Redlock通过在多个Redis节点上获取锁,并使用时钟同步算法确保锁的可靠性和一致性。

例子1【SETNX + EXPIRE】

public class Test {private static final String LOCK_KEY = "my_lock";public static void main(String[] args) {// 连接到Redis服务器Jedis jedis = new Jedis("122.51.159.21", 6379);// 获取锁if (acquireLock(jedis, LOCK_KEY)) {try {// 执行需要加锁的业务逻辑System.out.println("锁已获取。正在执行关键部分...");// 模拟业务处理时间Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} finally {// 保证释放锁releaseLock(jedis, LOCK_KEY);}} else {System.out.println("无法获取锁。另一个进程持有该锁。");}// 关闭连接jedis.close();}private static boolean acquireLock(Jedis jedis, String lockKey) {// 尝试设置锁,如果成功返回1,否则返回0Long result = jedis.setnx(lockKey, "locked");if (result == 1) {// 设置锁的过期时间jedis.expire(lockKey, 30);// 过期时间 30sreturn true;}return false;}private static void releaseLock(Jedis jedis, String lockKey) {// 释放锁jedis.del(lockKey);}
}

此方案缺点:

  1. 在高并发情况下,多个客户端可能同时执行 SETNX 命令并都成功获取锁,导致竞争条件发生
  2. 加锁与与设置过期时间是非原子操作
  3. 如果业务逻辑执行时间超过了过期时间,锁可能会在业务逻辑执行完之前被自动释放

例子2【 Redisson 】

public class Test {public static void main(String[] args) {// 创建 Redisson 客户端连接Config config = new Config();config.useSingleServer().setAddress("redis://122.51.159.21:6379");RedissonClient redisson = Redisson.create(config);// 获取分布式锁RLock lock = redisson.getLock("my_lock");try {// 尝试加锁,最多等待 10 秒,锁的持有时间为 20 秒boolean isLocked = lock.tryLock(10, 20, java.util.concurrent.TimeUnit.SECONDS);if (isLocked) {// 成功获取到锁System.out.println("成功获取到锁,执行业务逻辑...");// 在这里执行你的业务逻辑} else {// 获取锁失败System.out.println("获取锁超时,未能执行业务逻辑...");}} catch (InterruptedException e) {Thread.currentThread().interrupt();} finally {// 释放锁lock.unlock();}// 关闭 Redisson 客户端连接redisson.shutdown();}
}

Redisson解决了:锁过期释放,业务没执行完。
Redisson中watch dog看门狗可以去了解下。


❤觉得有用的可以留个关注❤

http://www.yayakq.cn/news/700132/

相关文章:

  • 网站的排版包括什么广州网站建设推广专家
  • 关注济南网站建设typecho2wordpress
  • 甘肃省建设厅门户网站wordpress 重定向的次数过多
  • 品牌加盟最好的网站建设有没有做网站的联系方式
  • 中海外交通建设有限公司网站怀化网站建设联系方式
  • 凡科建站电话咨询管理者的七项基本能力
  • 狼雨seo网站移动端网站如何做导出功能
  • 深圳建网站公司自助模块化网站建设
  • 家居饰品网站建设论文如何设计一个漂亮的网站
  • 网站开发字体过大福田专业做网站公司
  • frontpage制作个人网站 技巧西安建设工程信息网诚信平台
  • 怎么查网站制作空间有效期泰安互联网公司
  • wordpress站点标题和副标题网站推广软件预期效果
  • 外面网站怎么做莱芜网络公司
  • 婚纱网站html源码如何创建微信小程序商店
  • 渭南企业网站建设兰州网站优化服务
  • 常用网站推广方法的适用性网站建设推广平台
  • 网站建设需求分析流程图搜索引擎优化技术有哪些
  • 徐州企业网站模板建站app开发制作网站平台
  • 网站建设售后服务安全维护广元商城网站开发
  • 网站背投广告代码做化妆品网站的原因
  • 做返利网站能赚钱网络规划设计师培训哪个好
  • 网站div的高度根据图片韩国源代码交易网站
  • 装修公司网站免费网站建设站
  • 江苏广宇建设集团有限公司网站加强网络平台建设
  • 买空间送网站模板二级建造师注册查询官网入口
  • 网站后台页面模板下载怎样宣传自己的品牌
  • 哪个网站做ppt网站建设与管理是干什么的
  • 开源程序做网站任务wpsppt网站链接怎么做
  • 重庆做网站公司哪家比较好无极