现在egg多个进程间对资源的争抢是怎么设计这个锁的呢?目前我们自己都是使用redis.incr来争抢某个key,值为1的进程就可以操作该资源,其他进程放弃操作或者循环等待。 看到有博客提到Atomics这个模块,不知道egg中是否可以使用这个实现锁?
模块解决不了集群锁问题
@atian25 刚才自己试验了一下,很不规范。 修改了一下egg-redis插件
// /egg-redis/lib/redis.js const Redlock = require('redlock'); ... const redlock = new Redlock([client]); app.redlock = redlock; // 具体业务代码上 async try() { const lock = await this.app.relock.lock('lockName', 11); const index = await this.app.redis.get('index'); // 这里已经提前赋值为1了 await this.app.redis.set('index', Number(index) + 1); await lock.unlock(); this.ctx.body = 'success'; }
这样似乎可以达到我的目的。
@atian25 这两个模块不知道有没有整合的可能和必要?
冒昧试答一下: 二者场景不同,没必要整合 其次,虽然都使用redis,但仍然可以使用不同的redis服务,更没必要整合了
@974806047 建议fork出来修改,改个名重新推npm,这样在作者暂时不能改的时候,至少能满足自己需求
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
模块解决不了集群锁问题
@atian25 刚才自己试验了一下,很不规范。 修改了一下egg-redis插件
这样似乎可以达到我的目的。
@atian25 这两个模块不知道有没有整合的可能和必要?
冒昧试答一下: 二者场景不同,没必要整合 其次,虽然都使用redis,但仍然可以使用不同的redis服务,更没必要整合了
@974806047 建议fork出来修改,改个名重新推npm,这样在作者暂时不能改的时候,至少能满足自己需求