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

技术支持 东莞网站建设电脑回收定制开发网站多少钱

技术支持 东莞网站建设电脑回收,定制开发网站多少钱,洪梅镇网站建设公司,wordpress获取主题路径一般来说#xff0c;在对数据进行“加锁”时#xff0c;程序首先需要通过获取#xff08;acquire#xff09;锁来得到对数据排他性访问的能力#xff0c;然后才能对数据执行一系列操作#xff0c;最后还要将锁释放#xff08;release#xff09;给其他程序。 对于能够…一般来说在对数据进行“加锁”时程序首先需要通过获取acquire锁来得到对数据排他性访问的能力然后才能对数据执行一系列操作最后还要将锁释放release给其他程序。 对于能够被多个线程访问的共享内存数据结构shared-memory data structure来说这种“先获取锁然后执行操作最后释放锁”的动作非常常见。Redis 使用 WATCH 命令来代替对数据进行加锁因为 WATCH 只会在数据被其他客户端抢先修改了的情况下才通知执行了这个命令的客户端而不会阻止其他客户端对数据进行修改所以被称为乐观锁optimistic lock。 分布式锁也有类似的“首先获取锁然后执行操作最后释放锁”动作但这种锁既不是给同一个进程中的多个线程使用也不是给同一台机器上的多个进程使用而是由不同机器上的不同 Redis 客户端进行获取和释放的。何时使用以及是否使用 WATCH 或者锁取决于给定的应用程序有的应用不需要使用锁就可以正确地运行而有的应用只需要使用少量的锁还有的应用需要在每个步骤都使用锁。 分布式锁在业务中非常常见能够避免在分布式环境中同时对同一个数据进行操作进而避免并发问题。 锁出现不正确行为的原因以及锁在不正确运行时的症状 持有锁的进程因为操作时间过长而导致锁被自动释放但进程本身并不知晓这一点甚至还可能会错误地释放掉了其他进程持有的锁一个持有锁并打算执行长时间操作的进程已经崩溃但其他想要获取锁的进程并不知道哪个进程持有锁也无法检测出持有锁的进程已经崩溃只能白白地浪费时间等待锁被释放在一个进程持有的锁过期后其他多个进程同时尝试去获取锁并且都获得了锁上面提到的第一种情况和第三种情况同时出现导致有多个进程获得了锁并且每个进程都以为自己是唯一一个获得锁的 以下代码省去了一些程序的上下文环境描述。 // io-redis获取redis所有key async getKeys(match, count 100) {const { app: { redis }, ctx: { helper: { _ } } } this;let keys [];const scanStream await redis.scanStream({ match, count });const result await new Promise(resolve {scanStream.on(data, data {keys keys.concat(data);});scanStream.on(end, () {resolve(_.uniq(keys));});});return result; }// 获取redis所有key async getKeys(pattern, count 100) {const { app: { redis }, ctx: { helper: { _ } } } this;let result [];const _getKeys async (cursor 0) {// redis scan迭代获取, 默认取100const apiResult await redis.scan(cursor, match, pattern, count, count);result result.concat(apiResult[1]);// 新游标返回0则表示迭代已结束if (Number(apiResult[0]) 0) {return;}// 继续迭代await _getKeys(apiResult[0]);}await _getKeys();// 去重return _.uniq(result); }// redis获取锁 async lock(key, count) {const { app: { redis }, config: { cacheKey } } this;const result await redis.set(key, count, EX, cacheKey.lock.expireTime, NX);return result OK; }// redis释放锁 async unlock(key, count) {const { app: { redis } } this;const script ifredis.call(get, KEYS[1]) ARGV[1]thenreturn redis.call(del, KEYS[1])elsereturn 0end;const result await redis.eval(script, 1, key, count);return Boolean(result); }
http://www.dnsts.com.cn/news/199271.html

相关文章:

  • 海口会计报名网站小说网站编辑怎么做
  • 建设在线观看视频网站企业融资需求怎么写
  • 东莞个人网站建设wordpress 调用新浪微博内容
  • 咸阳市城乡建设规划局网站上海方正大厦网站建设
  • 高权重域名做网站室内装修设计软件免费版下载破解版
  • 秦皇岛网站制作价格用html能做企业网站吗
  • 如何用ps做网站导航条浙江网报通用招聘平台
  • asp.net 窗体网站室内设计师培训哪里好
  • 永久免费的自建网站添加字体到wordpress
  • 怎么找人做网站啊西部网站管理助手 伪静态
  • 贵港网站建设代理上海浦东做网站的公司
  • 网站的制作步骤设计制作小车
  • 写作网站哪个好用做网站公司商丘
  • 做网站 设计师很网站策划案怎么写范文
  • 变性人做网站福田庆三鼻子案例
  • 网站接入服务单位企业文化设计
  • 建站之星网站建设下载版宁波东方论坛
  • 廊坊市网站推广基于安卓系统的app开发
  • 网站建设外文文献广州小程序开发定胜
  • 上海网站快速优化排名vue.js做个人网站
  • 手机网站做静态路径电商网站建设报价
  • html5 网站推荐微信营销策略
  • 对外贸营销型网站建设的几点建议163企业邮箱登录
  • 做苗木比较好的网站最适合新闻资讯建站的cms
  • 毕设 代做 网站演示 又一个wordpress站点
  • 江门网站优化网站建设经费预算包括哪些
  • 泉州网站制作建设看汽车哪个网站好
  • 怎样网站制作设计公司做网站需要准备哪些资料
  • 个体做敦煌网站怎么样政务网站建设目的_意义
  • 网页设计网站建设招聘wordpress 快速发布