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

做视频可以领钱的网站凡客另一购物网站

做视频可以领钱的网站,凡客另一购物网站,百度一下官网页,dede减肥网站源码技术主题 在分布式系统中,面对分布式微服务日益流行的场景,分布式锁一直是分布式系统老生常谈的内容。分布式锁可以防止用户重复点击,对于电商场景中,分布式锁可以防止用户重复下单,给用户带来更好的体验。 技术实现…

技术主题

在分布式系统中,面对分布式微服务日益流行的场景,分布式锁一直是分布式系统老生常谈的内容。分布式锁可以防止用户重复点击,对于电商场景中,分布式锁可以防止用户重复下单,给用户带来更好的体验。

技术实现方式

一基于Redis的实现方式

通过在Redis中存储一个唯一的key,利用Redis的原子性操作来实现锁的获取和释放

二基于ZooKeeper的实现方式

利用Zookeeper的节点临时性和唯一性特点,在一个节点上创建一个临时节点表示锁的占用状态,释放锁时直接删除该节点

三基于数据库的实现方式

通过在数据库中创建一张表,将表的相关信息作为表的字段,通过事务的控制来实现锁的获取和释放

技术具体实现原理

一基于Redis的具体实现原理

  1. Redis操作必须是原子的:获取锁和释放锁的Redis操作必须是原子的,可以使用Redis的setnx命令实现。它可以原子地执行一次 SET 命令,当且仅当 key 不存在,可以设置成功。
  2. 设置过期时间:为避免死锁,需要设置锁的过期时间,若处理业务超时导致锁未被释放,则其他节点可以重新竞争获取锁。使用Redis的expire命令可以设置key的过期时间。
  3. 避免误删:为避免误删其他线程的锁,建议在删除前先判断锁是否属于自己。尽管不同线程生成的随机字符串保持一定的唯一性,但是无法完全避免重复。

二基于ZooKeeper的具体实现原理

  1. ZooKeeper操作必须是原子的:获取锁和释放锁的ZooKeeper操作必须是原子的,可以使用ZooKeeper的create命令实现。它可以原子地创建一个唯一且临时的节点。
  2. 设置临时节点:在ZooKeeper中创建一个临时节点,表示锁的占用状态。当该节点的客户端断开连接或删除该节点时,ZooKeeper将自动清除该节点。
  3. 利用顺序号:在创建临时节点时,可以利用ZooKeeper中的顺序号进行排序,使得节点可以按照一定的顺序排列。其他客户端在同样的目录下依照节点顺序创建临时节点,获得锁的客户端是首个创建临时节点的客户端。
  4. 避免死锁:由于删除节点操作可以避免死锁,因此在释放锁的时候需要删除该节点。如果释放锁的时候出现异常导致无法删除节点,可以设置一个超时时间,让ZooKeeper自动删除该节点。
  5. 处理异常情况:在分布式系统中,可能会出现各种异常情况,比如网络异常、ZooKeeper节点宕机等情况,需要对这些异常情况进行处理。通常的做法是捕获异常并释放锁。

三基于数据库的实现原理

基于数据库乐观锁实现分布式锁的方法是,为每个需要锁定的资源在数据库中创建一个对应的记录,记录包含以下信息:

  • 资源名称(resource)
  • 当前锁定者的标识(owner)
  • 最后一次锁定时间(last_lock_time)
  • 版本号(version)

其中,owner、last_lock_time 和 version 可以使用数据库的行版本号实现,而资源名称是唯一的。

实现步骤如下:

  1. 当需要锁定资源时,在数据库中执行以下 SQL 语句:
UPDATE lock_table SET owner=<当前线程标识>, last_lock_time=NOW(), version=version+1 
WHERE resource=<资源名称> AND owner IS NULL;

该语句会尝试更新 lock_table 表中指定资源的记录,并将 owner 设置为当前线程的标识。如果更新成功,则表示当前线程获取了锁;如果更新失败,则表示有其他线程正在持有该资源的锁。

  1. 当释放锁时,在数据库中执行以下 SQL 语句:
UPDATE lock_table SET owner=NULL, last_lock_time=NOW(), version=version+1 
WHERE resource=<资源名称> AND owner=<当前线程标识> AND version=<当前版本号>;

该语句会尝试将持有资源锁的线程标识和版本号更新为 NULL 和当前版本号+1。如果更新成功,则表示当前线程成功释放了锁;如果更新失败,则表示要么该资源并没有被当前线程锁定,要么在锁定期间该资源的版本号已经被修改了。

需要注意的是,由于乐观锁是基于数据版本号的,因此在高并发情况下,会有一定的冲突率,需要在应用程序中进行重试或回退等操作来保证锁定操作的可靠性。另外,该实现方案也需要确保数据库的事务隔离级别为 SERIALIZABLE,以避免并发情况下的数据不一致性问题。

四数据库悲观锁

数据库的被关锁
此外,MySQL 还支持通过 SELECT FOR UPDATE 或 SELECT … LOCK IN SHARE MODE 语句来实现悲观锁。例如:

SELECT field1, version FROM your_table WHERE id = your_id FOR UPDATE;

该语句会将该记录上锁,防止其他事务修改该记录,从而实现悲观锁的效果。在 MySQL 中,悲观锁机制使用的是表锁和行锁,因此在高并发情况下,也需要注意锁冲突导致的性能问题。

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

相关文章:

  • 网站倒计时怎么做装修公司哪家口碑最好
  • 网站域名申请好了怎么建设网站青州网站网站建设
  • 网站静态生成目录 名称 建议网站关键词作用
  • wordpress 文章转义seo关键词分析
  • 德州做网站的公司有哪些wordpress图片水印
  • 装饰公司手机网站建设寻找移动网站建设
  • 网站界面宽学校如何建设网站首页
  • 中信建设有限责任公司 陈晓佳东莞搜索seo优化排名
  • 官方你网站建设策略网站建设方案大全
  • 网站建设 软件开发的公司怎么做淘宝返利网站
  • 做外贸需关注的网站最近一周热点回顾
  • 舟山网站建设公司网站管理人员
  • 如何看网站开发语言品牌营销推广策划公司
  • 河源市网站建设公司三亚发布最新消息
  • 济南槐荫网站开发公司眉山做网站的公司
  • 专门做中文音译歌曲的网站网站没有内容 能做优化吗
  • 系部网站建设标准关于手机网站设计的若干想法
  • 手机pc网站共用数据库优化大师网站
  • ui设计的网站手机建模软件
  • 广东手机网站建设公司wordpress vr
  • 网站正在建设中页面 英文翻译wordpress存储插件
  • php做商城网站怎么做好原来做网站后来跑国外了
  • 专业做网站照片网站东莞优化建设
  • 诸城市建设局网站芜湖市网站建设
  • Linux做视频网站网速均衡rails 开发的网站开发
  • 做医院网站公司吗建设网站招标
  • 绥化网站建设公司公司名称打分
  • 做3d效果在哪个网站网站的地图要怎么做
  • 如何设置手机网站主页在centos上搭建wordpress
  • 青岛网站专业制作做图片的网站都有哪些