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

网站页面footer的copy个人信息网站模板

网站页面footer的copy,个人信息网站模板,可以做视频网站的源码,智慧团建网站登录入口手机版一. 分布式锁基础 在分布式系统中#xff0c;当多个客户端#xff08;应用实例#xff09;需要访问同一资源时#xff0c;可以使用分布式锁来确保同一时刻只有一个客户端能访问该资源。Redis作为高性能的内存数据库#xff0c;提供了基于键值对的分布式锁实现#xff0c…一. 分布式锁基础 在分布式系统中当多个客户端应用实例需要访问同一资源时可以使用分布式锁来确保同一时刻只有一个客户端能访问该资源。Redis作为高性能的内存数据库提供了基于键值对的分布式锁实现通常采用SETNX命令即SET if Not eXists来设置锁。 Redis的分布式锁大致实现流程如下 客户端请求获取锁通过SETNX命令设置一个锁键如lock:resource。锁被设置成功时客户端可以访问资源否则它会等待或返回获取失败的结果。客户端在完成工作后释放锁通过DEL命令删除锁键。 二. 可重入锁 在一个线程或进程中如果该线程/进程已经获取了锁那么它可以重复获取该锁而不会发生死锁问题。也就是说同一线程/进程可以多次获取锁而每次释放锁时都需要释放一次直到所有的锁请求都被释放。 对于分布式系统中的可重入锁它确保 当一个客户端通常是线程或进程已经持有锁时它可以继续请求该锁而不会被阻塞或进入死锁。锁的计数是线程级别的客户端每次请求锁时都需要将锁的计数增加释放锁时则减少计数直到计数为零时才完全释放锁。 三. Redis实现可重入锁的步骤 1. 使用SET命令或SETNX命令来获取锁 锁是由一个特定的Redis键例如lock:resource表示的。锁的值通常是一个标识符例如客户端的UUID或者一个线程标识符。这个值用于确保同一个客户端可以重复获取锁。 2. 记录锁的持有者 当客户端请求锁时它不仅设置一个标识该锁的键如lock:resource而且还设置该锁的值如UUID。这样如果该锁已经存在且值不是当前客户端的标识符则客户端无法获得锁。 3. 锁的可重入性 在可重入锁中客户端获取锁时如果该客户端的标识符如UUID已经在锁值中则客户端可以继续获取锁并且需要将锁的“持有次数”增加。可以通过键值对的计数来实现这一点。每次客户端请求锁时Redis可以增加锁的计数。当客户端释放锁时Redis会减少锁的计数。 4. 锁的过期时间 为了防止死锁Redis的锁通常会设置一个过期时间通常是SET命令的EX选项设置过期时间。这样如果客户端在持有锁的过程中发生故障锁会在一定时间后自动释放。可重入锁的一个实现方式是客户端在每次获取锁时刷新过期时间确保锁在可重入期间不会过期。 5. 释放锁 当客户端完成工作后它会释放锁。每次释放锁时它会检查当前的锁计数 如果锁计数大于1表示该客户端还需要继续持有锁于是减少计数。如果锁计数为1则客户端完全释放锁通过删除锁键如DEL来释放该资源。 四 LUA 脚本实现简单重入锁 获取锁的 Lua 脚本 local key KEYS[1]; -- 锁的key local threadId ARGV[1]; -- 线程唯一标识 local releaseTime ARGV[2]; -- 锁的自动释放时间-- 判断是否存在 if (redis.call(EXISTS, key) 0) then-- 不存在获取锁redis.call(HSET, key, threadId, 1);-- 设置有效期redis.call(EXPIRE, key, releaseTime);return 1; -- 返回结果 end;-- 锁已经存在判断threadId是否是自己 if (redis.call(HEXISTS, key, threadId) 1) then-- 是自己获取锁重入次数1redis.call(HINCRBY, key, threadId, 1);-- 设置有效期redis.call(EXPIRE, key, releaseTime);return 1; -- 返回结果 end;return 0; -- 代码走到这里说明获取锁的不是自己获取锁失败释放锁的 Lua 脚本 local key KEYS[1]; -- 锁的key local threadId ARGV[1]; -- 线程唯一标识 local releaseTime ARGV[2]; -- 锁的自动释放时间-- 判断当前锁是否还是被自己持有 if (redis.call(HEXISTS, key, threadId) 0) thenreturn nil; -- 如果已经不是自己则直接返回 end;-- 是自己的锁则重入次数减1 local count redis.call(HINCRBY, key, threadId, -1);-- 判断是否重入次数是否已经为0 if (count 0) then-- 大于0说明不能释放锁重置有效期然后返回redis.call(EXPIRE, key, releaseTime);return nil; else-- 等于0说明可以释放锁直接删除redis.call(DEL, key);return nil; end;
http://www.hkea.cn/news/14569837/

相关文章:

  • 将二级域名 网站目录淘宝购物
  • 做网站有高手没有wordpress用户名u开头
  • 景德镇建设网站网站程序怎么上传
  • 网站模板代理电话陕西住房和建设厅网站
  • 烟台市牟平区建设局网站上海小程序开发定制公司
  • 网站运营维护方案公司邮箱怎么进入
  • 无锡高端网站设计开发网站友情链接查询
  • 成都 视频网站建设做ppt的网站兼职
  • 网站广告招商应该怎么做现在注册公司好注册吗
  • h5 和手机网站360网络推广
  • 优秀作文网站推荐徐州人才网官方网站
  • 如何利用源码做网站暖色网站模板
  • 网站建设与管理logo电商怎么做新手入门视频
  • 做外文网站seo美式
  • 重庆网站目录做代练网站能备案
  • iis搭建网站教程网站域名备案注册证书
  • 商用网站开发计划书工程建筑公司
  • 个人备案的网站名称临沂龙文网站建设
  • 优化网站排名提高做视频网站要多大的服务器
  • 旅游网站开发设计报告书电商网站合作
  • 珠海营销网站建设做网站需要固定ip么
  • 北京大兴做网站公司网站策划书10个点怎么写
  • 表白网页在线生成网站网站建设调查内容有哪些
  • 专业外贸网站建设公司网站建设找星火龙
  • 免费数据网站用asp做网站有哪控件
  • 网站控制面板地址建设网站是什么职位
  • 网站 标题 关键词 描述网站内页产品 首页推荐
  • 网站建设流程行业现状微信怎么做网站推广
  • 网站三网合一什么意思广州网站改版设计制作
  • 在网络上做兼职的网站做网站交易装备可以么