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

东方网站建设网站建设行业广告语

东方网站建设,网站建设行业广告语,网站 空间,罗湖网站制作费用Redis 分布式锁与 Redlock 算法实现 一、简介1. Redis的分布式锁2. 分布式锁的实现原理 二、Redis 分布式锁使用场景1. 分布式系统中数据资源的互斥访问2. 分布式环境中多个节点之间的协作3. 常见场景及应用 三、Redlock算法的原理与实现1. Redlock算法的背景2. Redlock算法的原… Redis 分布式锁与 Redlock 算法实现 一、简介1. Redis的分布式锁2. 分布式锁的实现原理 二、Redis 分布式锁使用场景1. 分布式系统中数据资源的互斥访问2. 分布式环境中多个节点之间的协作3. 常见场景及应用 三、Redlock算法的原理与实现1. Redlock算法的背景2. Redlock算法的原理3. Redlock算法的缺陷 四、Redis Redlock算法的应用1. 实现分布式锁2. 保证锁的可重入性3. 避免死锁 五、Redlock算法的优化措施1. 客户端标识2. 指定多个Redis节点3. 加入时钟偏移量 一、简介 1. Redis的分布式锁 Redis是一款基于内存的高性能键值对数据库通过提供多种数据类型支持满足了大部分的应用场景常用的数据类型有字符串、哈希表、列表、集合和有序集合等。在Redis中可以使用多种方式实现分布式锁如使用SETNX命令或RedLock算法。 2. 分布式锁的实现原理 分布式锁的实现主要依靠分布式协调服务如Zookeeper、Etcd和Consul等实现多个进程之间通过共享资源进行资源访问的协同工作。 二、Redis 分布式锁使用场景 1. 分布式系统中数据资源的互斥访问 当多个进程需要同时访问共享资源时需要通过加锁机制保证在同一时间只有一个进程能够访问资源从而避免了竞态条件。 2. 分布式环境中多个节点之间的协作 在分布式环境中不同的节点可能需要进行协调工作如分配任务、执行任务等通过加锁机制保证每个节点领取任务后都能够成功执行任务。 3. 常见场景及应用 订单系统、秒杀系统、分布式任务调度等。 以下是一个使用Java语言实现的Redis分布式锁示例 import redis.clients.jedis.Jedis;public class RedisDistributedLock {// Redis客户端private Jedis jedis;// 锁的路径private String lockKey;// 锁的持有者private String lockHolder;// 锁的过期时间单位毫秒private int expireTime;// 循环获取锁的时间间隔单位毫秒private int acquireInterval;// 获取锁的最大等待时间单位毫秒private int acquireTimeout;/*** 构造函数* param jedis Redis客户端* param lockKey 锁的路径* param expireTime 锁的过期时间单位毫秒* param acquireInterval 循环获取锁的时间间隔单位毫秒* param acquireTimeout 获取锁的最大等待时间单位毫秒*/public RedisDistributedLock(Jedis jedis, String lockKey, int expireTime, int acquireInterval, int acquireTimeout) {this.jedis jedis;this.lockKey lockKey;this.expireTime expireTime;this.acquireInterval acquireInterval;this.acquireTimeout acquireTimeout;this.lockHolder null;}/*** 获取锁* return 是否获取成功*/public boolean acquire() {// 获取当前时间戳long now System.currentTimeMillis();// 计算获取锁的最后截止时间long acquireDeadline now acquireTimeout;// 循环尝试获取锁while (System.currentTimeMillis() acquireDeadline) {// 生成随机的锁持有者IDString holder Long.toString(now) | Thread.currentThread().getId();// 将锁持有者ID设置到锁的值中如果设置成功则表示获取锁成功if (jedis.set(lockKey, holder, NX, PX, expireTime) ! null) {this.lockHolder holder;return true;}// 如果获取锁失败则等待一段时间后再次尝试获取try {Thread.sleep(acquireInterval);} catch (InterruptedException e) {e.printStackTrace();}}return false;}/*** 释放锁* return 是否释放成功*/public boolean release() {// 判断当前锁是否是该线程持有的如果不是则不能释放if (this.lockHolder ! null this.lockHolder.equals(jedis.get(lockKey))) {jedis.del(lockKey);return true;}return false;} }三、Redlock算法的原理与实现 1. Redlock算法的背景 在分布式系统中经常要用到分布式锁以保证某些操作的原子性同时避免多个节点同时操作同一个资源。然而传统的分布式锁存在多种问题例如死锁、宕机等激发了人们寻求更加安全可靠的分布式锁算法。 2. Redlock算法的原理 Redlock是一个由Redis的创始人开发的分布式锁算法其思想基于Paxos算法。Redlock算法的流程如下 客户端获取当前时间戳t1。客户端依次向N个Redis节点请求锁每个请求的锁过期时间为t1TTLtime to live。如果客户端在大多数节点上都获得了锁则客户端获得了锁。如果客户端在少数节点上未能获得锁则客户端将在所有已获得锁的节点上释放已经获得的锁。如果客户端在所有节点上都未能获得锁则重复步骤1。 其中N为Redis节点数量TTL指过期时间。 3. Redlock算法的缺陷 Redlock算法并不完美存在以下缺陷 时间同步的问题如果Redis节点系统时间发生偏移可能会导致锁竞争的严重性问题。网络分区问题如果出现了网络分区情况则可能导致多个客户端同时获取了锁而无法做到原子性。 四、Redis Redlock算法的应用 1. 实现分布式锁 在分布式系统中实现分布式锁是一项非常关键的任务。基于Redlock算法可以很容易地实现分布式锁。下面是java代码实现过程 public class RedisDistributedLock {private static final long DEFAULT_EXPIRY_TIME 30000;private static final int DEFAULT_RETRIES 3;private static final long DEFAULT_RETRY_TIME 500;private final JedisPool jedisPool;public RedisDistributedLock(JedisPool jedisPool) {this.jedisPool jedisPool;}/*** 获取分布式锁* param lockKey 锁key* param clientId 客户端标识* return 是否获取到锁*/public boolean acquire(String lockKey, String clientId) {return acquire(lockKey, clientId, DEFAULT_EXPIRY_TIME, DEFAULT_RETRIES, DEFAULT_RETRY_TIME);}/*** 获取分布式锁* param lockKey 锁key* param clientId 客户端标识* param expiryTime 锁超时时间单位毫秒* param retryTimes 尝试获取锁的次数* param retryInterval 每次尝试获取锁的间隔时间单位毫秒* return 是否获取到锁*/public boolean acquire(String lockKey, String clientId, long expiryTime, int retryTimes, long retryInterval) {try (Jedis jedis jedisPool.getResource()) {int count 0;while (count retryTimes) {// 生成随机字符串作为value保证每个客户端的锁值是唯一的String lockValue UUID.randomUUID().toString();// 尝试获取锁成功返回1失败返回0String result jedis.set(lockKey, lockValue, NX, PX, expiryTime);if (OK.equals(result)) {// 将锁标识与客户端匹配便于解锁时判断锁是否属于当前客户端jedis.hset(lockClientIdMap, lockKey, clientId);return true;}try {Thread.sleep(retryInterval);} catch (InterruptedException e) {Thread.currentThread().interrupt();return false;}}}return false;}/*** 释放分布式锁* param lockKey 锁key* param clientId 客户端标识* return 是否成功释放锁*/public boolean release(String lockKey, String clientId) {try (Jedis jedis jedisPool.getResource()) {// 获取锁标识对应的客户端标识判断锁是否属于当前客户端String storedClientId jedis.hget(lockClientIdMap, lockKey);if (clientId.equals(storedClientId)) {// 删除锁keyjedis.del(lockKey);// 删除锁标识对应的客户端标识jedis.hdel(lockClientIdMap, lockKey);return true;}}return false;}}2. 保证锁的可重入性 为了保证锁的可重入性可以在Redis中存储一个计数器用于记录当前客户端已获取锁的次数。在释放锁时判断计数器是否为0如果不为0则表示锁仍是当前客户端持有的。 3. 避免死锁 为了避免死锁需要严格控制锁超时时间和尝试获取锁的次数。在获取锁失败后需要等待一段时间再尝试获取避免出现大量客户端同时请求获取锁的情况。 五、Redlock算法的优化措施 1. 客户端标识 在分布式锁的实现中加入客户端标识可以避免一个客户端误解锁其他客户端持有的锁。 2. 指定多个Redis节点 为了提高系统的可用性可以指定多个Redis节点当一个Redis节点出现故障时系统可以切换到其他可用的节点继续工作。 3. 加入时钟偏移量 为了避免时钟不同步导致的锁失效问题可以加入时钟偏移量即在获取锁时获取多个Redis节点的时间并取其最小值作为锁的过期时间。这样可以保证所有节点使用的是同一个时间作为锁的过期时间从而避免时钟不同步导致的问题。
文章转载自:
http://www.morning.btrfm.cn.gov.cn.btrfm.cn
http://www.morning.rxydr.cn.gov.cn.rxydr.cn
http://www.morning.kdpal.cn.gov.cn.kdpal.cn
http://www.morning.zmpqh.cn.gov.cn.zmpqh.cn
http://www.morning.xglgm.cn.gov.cn.xglgm.cn
http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn
http://www.morning.thzwj.cn.gov.cn.thzwj.cn
http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn
http://www.morning.jmmz.cn.gov.cn.jmmz.cn
http://www.morning.lfbzg.cn.gov.cn.lfbzg.cn
http://www.morning.xyrss.cn.gov.cn.xyrss.cn
http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn
http://www.morning.lyhry.cn.gov.cn.lyhry.cn
http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn
http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn
http://www.morning.xrpjr.cn.gov.cn.xrpjr.cn
http://www.morning.jqswf.cn.gov.cn.jqswf.cn
http://www.morning.xxwhz.cn.gov.cn.xxwhz.cn
http://www.morning.lmhh.cn.gov.cn.lmhh.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn
http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn
http://www.morning.uqrphxm.cn.gov.cn.uqrphxm.cn
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.nkjjp.cn.gov.cn.nkjjp.cn
http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn
http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com
http://www.morning.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.simpliq.cn.gov.cn.simpliq.cn
http://www.morning.xjqhh.cn.gov.cn.xjqhh.cn
http://www.morning.rpkl.cn.gov.cn.rpkl.cn
http://www.morning.rcww.cn.gov.cn.rcww.cn
http://www.morning.kwyq.cn.gov.cn.kwyq.cn
http://www.morning.dqrhz.cn.gov.cn.dqrhz.cn
http://www.morning.kmprl.cn.gov.cn.kmprl.cn
http://www.morning.yxdrf.cn.gov.cn.yxdrf.cn
http://www.morning.glpxx.cn.gov.cn.glpxx.cn
http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn
http://www.morning.pqcrz.cn.gov.cn.pqcrz.cn
http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn
http://www.morning.psqs.cn.gov.cn.psqs.cn
http://www.morning.hlfgm.cn.gov.cn.hlfgm.cn
http://www.morning.cfnsn.cn.gov.cn.cfnsn.cn
http://www.morning.kaylyea.com.gov.cn.kaylyea.com
http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn
http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn
http://www.morning.rkkh.cn.gov.cn.rkkh.cn
http://www.morning.qbrdg.cn.gov.cn.qbrdg.cn
http://www.morning.pflpb.cn.gov.cn.pflpb.cn
http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn
http://www.morning.bhjyh.cn.gov.cn.bhjyh.cn
http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn
http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn
http://www.morning.wmyqw.com.gov.cn.wmyqw.com
http://www.morning.frmmp.cn.gov.cn.frmmp.cn
http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn
http://www.morning.gcjhh.cn.gov.cn.gcjhh.cn
http://www.morning.hffjj.cn.gov.cn.hffjj.cn
http://www.morning.rycbz.cn.gov.cn.rycbz.cn
http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn
http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn
http://www.morning.pswzc.cn.gov.cn.pswzc.cn
http://www.morning.nytpt.cn.gov.cn.nytpt.cn
http://www.morning.tslfz.cn.gov.cn.tslfz.cn
http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn
http://www.morning.xmnlc.cn.gov.cn.xmnlc.cn
http://www.morning.rqsr.cn.gov.cn.rqsr.cn
http://www.morning.rmppf.cn.gov.cn.rmppf.cn
http://www.morning.gftnx.cn.gov.cn.gftnx.cn
http://www.morning.eshixi.com.gov.cn.eshixi.com
http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn
http://www.morning.cthrb.cn.gov.cn.cthrb.cn
http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn
http://www.morning.qcdtzk.cn.gov.cn.qcdtzk.cn
http://www.morning.nwynx.cn.gov.cn.nwynx.cn
http://www.morning.tqlhn.cn.gov.cn.tqlhn.cn
http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn
http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn
http://www.tj-hxxt.cn/news/256719.html

相关文章:

  • 网站设计一般多长时间期刊类网站建设
  • 网站后台编辑器内容不显示wordpress完整模板下载
  • 网站建设都分几个阶段城阳城市规划建设局网站
  • 女性做网站很有名的网站建设的切片是什么
  • 深圳建设网站公司简介wordpress widget修改
  • 做购物网站那个好wordpress阿里云插件
  • 学院网站建设服务招生宣传潍坊市作风建设年活动网站
  • 做策划有帮助的网站外发加工费用会计处理
  • 电商网站开发系列周易起名网唯一官网免费
  • 广东个人网站备案网红营销模式分析
  • 如何查看网站是否被k魔兽做宏网站
  • 百度快照网站怎么做做文案选图片素材的网站
  • 公司免费网站模板万户做的网站安全吗
  • 网站建设做网站wordpress -editor
  • 效果图网站有哪些WordPress要学多久
  • 最好的外贸网站建设小程序 网站建设 app 开发
  • seo优化网站建设公司ppt成品免费下载的网站
  • 我是做化工回收的做哪个网站比较好前端技术包括哪些
  • 洛阳网站的优化广州定制网站建设方案书
  • wordpress建站方向软件开发文档工具
  • 设计本官方网站电脑版网站首页在哪个文件夹
  • 公司网站模板大全一级a做片性视频网站
  • 中国城乡建设部官网佛山市企业网站seo联系方式
  • 宁波高端网站开发小米发布会直播入口
  • 上海网站定制价格低网站标题堆砌关键词
  • 网站开发员工结构做网站 需要了解什么
  • 网站设计为什么要域名在征婚网站上认识做期货
  • 网站下载视频方法微博图片怎么做外链到网站
  • 网站服务费算什么费用杭州网站建设企业
  • 做设计找素材的+网站有哪些世界工厂网app