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

建筑公司网站模板免费下载亚洲足球最新排名

建筑公司网站模板免费下载,亚洲足球最新排名,西安seo优化工作室,俄语网站推广通分布式锁: Redis可以实现分布式锁,只是讨论Redis的实现思路,而真的实现分布式锁,Zookeeper更加可靠 为什么使用分布式锁: 单机环境下只存在多线程,通过同步操作就可以实现对并发环境的安全操作,…

分布式锁:

  Redis可以实现分布式锁,只是讨论Redis的实现思路,而真的实现分布式锁,Zookeeper更加可靠

为什么使用分布式锁:

  单机环境下只存在多线程,通过同步操作就可以实现对并发环境的安全操作,但是多机环境就变成多进程、多线程,这时候同步、加锁已经无

法保证原子性 

实现分布式可靠性的条件:

  1、互斥性。在任意时刻,只有一个客户端能持有锁

  2、不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁

  3、具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁

  4、加锁和解锁必须是同一个客户端

实现分布式的方式:

  1、基于 DB 的唯一索引。

  2、基于 ZK 的临时有序节点。

  3、基于 Redis 的 NX EX 参数。

伪代码实现:

public static final String LOCK_SUCCESS = "OK";//加锁成功public static final String SET_IF_NOT_EXIST = "NX";public static final String SET_WITH_EXPIRE_TIME = "PX";public static final Long RELEASE_SUCCESS = 1L;
public class RedisUtils {@AutowiredJedisPool jedisPool;/*** 尝试获取分布式锁* @param lockKey* @param requestId* @param expireTime* @return*/public boolean tryGetDistributedLock(String lockKey, String requestId, int expireTime) {Jedis jedis = jedisPool.getResource();String result = jedis.set(lockKey, requestId, RedisConstant.SET_IF_NOT_EXIST, RedisConstant.SET_WITH_EXPIRE_TIME, expireTime);if (StringUtils.equals(result, RedisConstant.LOCK_SUCCESS))return true;return false;}/*** 释放分布式锁* @param jedis* @param lockKey* @param requestId* @return*/public static boolean releaseDistributedLock(Jedis jedis, 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";Object result = jedis.eval(script, Collections.singletonList(lockKey), Collections.singletonList(requestId));if (RedisConstant.RELEASE_SUCCESS.equals(result)) {return true;}return false;}
}

加锁:

  lockKey:唯一的key

  requestId:每个客户端的唯一ID

  NX:保证key不存在才会set

  PX:key具有过期时间

  expireTime:key的具体过期时间


解锁:
  通过lua代码传到jedis.eval()方法里,并使参数KEYS[1]赋值为lockKey,ARGV[1]赋值为requestId。eval()方法是将Lua代码交给Redis服务

端执行。

  首先获取锁对应的value值,检查是否与requestId相等,如果相等则删除锁(解锁)。那么为什么要使用Lua语言来实现呢?因为要确保上述

操作是原子性的。

以上只是针对单机部署Redis,如果Redis是多机部署的,可以采用Redisson实现分布式锁

 

无法避免的问题:

  如在 key 超时之后业务并没有执行完毕但却自动释放锁了,这样就会导致并发问题。

  就算 Redis 是集群部署的,如果每个节点都只是 master 没有 slave,那么 master 宕机时该节点上的所有 key 在那一时刻都相当于是释放

锁了,这样也会出现并发问题。就算是有 slave 节点,但如果在数据同步到 salve 之前 master 宕机也是会出现上面的问题。

 

Redis分布式锁内容参考:https://xiaozhuanlan.com/topic/4672859130https://redis.io/topics/distlock

基于Redis实现分布式ID:

  因为Redis是单线程的,所以可以用来生成全部唯一ID,通过incr、incrby实现

  生产环境可能是Redis集群,假如有5个Redis实例,每个Redis的初始值是1,2,3,4,5,然后增长都是5

各个Redis生成的ID为:

A:1,6,11,16,21
B:2,7,12,17,22
C:3,8,13,18,23
D:4,9,14,19,24
E:5,10,15,20,25

这样的话,无论请求打到那个Redis上面,都可以获得不同的ID

优点:

  1、不依赖于数据库,灵活方便,且性能优于数据库。

  2、数字ID天然排序,对分页或者需要排序的结果很有帮助。

缺点:

  1、如果系统里没有Redis,就比较操蛋了

  2、编码、配置工作量大一点

 

分布式ID推荐一篇文章:https://blog.csdn.net/hengyunabc/article/details/44244951

流水号:

  Redis同样可以生成每天的流水号,日期+自增长序号,进行incr

转载于:https://www.cnblogs.com/huigelaile/p/10888339.html

http://www.lbrq.cn/news/2725003.html

相关文章:

  • 佛山营销网站建设推广百度首页关键词推广
  • 网站日常运营游戏推广平台代理
  • 提供网站制作公司报价seo排名优化什么意思
  • javascript网站制作上海seo网络优化
  • 云南网站做的好的公司seo服务合同
  • wordpress 文件下载漏洞百度关键字优化价格
  • 个人建购物网站怎么备案怎么自己做网页
  • centos 6.5 搭建wordpresswindows优化大师可以卸载吗
  • php做网站技术方案青岛自动seo
  • 全国住房和城乡建设厅网站推广方案怎么做
  • 域名不变 新网站搜索引擎优化的目的是对用户友好
  • wordpress 慢外贸推广优化公司
  • 东莞公司网站建设台州seo排名外包
  • 小型企业网站的设计与实现最新足球赛事
  • 做自己的网站能赚钱吗海外营销推广
  • 合肥市建设局网站国外推广渠道平台
  • 游戏币网站怎么做seo实战培训课程
  • 做两个网站 之间超链接网络推广怎么样
  • 凯里做网站的公司上海网站建设开发公司
  • 做网站的基本步骤电商推广联盟
  • 中山网站方案自助网站建设平台
  • 番禺做网站哪家好如何让百度快速收录网站文章
  • 亚马逊网站建设进度计划书百度关键词挖掘工具爱站网
  • 做电子商务网站 除了域名 网页设计 还有服务器 和网站空间seo入门黑帽培训教程
  • 正版win10做win7系统下载网站优化seo是什么意思
  • b2b网站建站自动外链网址
  • 网站建设业务流程图网站开发北京公司
  • 公司发展规划seo管理
  • 怎样做内网网站站长统计ios
  • 网站可以做无形资产百度搜索 手机
  • Redis 知识点与应用场景
  • mac 通过homebrew 安装和使用nvm
  • Spring事物
  • 机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理
  • ARM芯片架构之CoreSight SoC-400 组件介绍
  • 1.Ansible 自动化介绍