java - 使用 Redis 的分布式锁 (Redisson):锁定如何跨服务器实例工作?
问题描述
问题陈述:
多种分布式锁。
为运行多个实例的服务实现分布式锁定。
将在 1 个主设备和 2 个从设备上运行的“redis”上进行锁定。
执行:
服务实例 1
RLock lock11 = redisson.getLock("lock11");
RLock lock12 = redisson.getLock("lock12");
RLock lock13 = redisson.getLock("lock13");
RedissonRedLock lock = new RedissonRedLock(lock11, lock12, lock13);
lock.lock();
//...
lock.unlock();
服务实例 2
RLock lock21 = redisson.getLock("lock21");
RLock lock22 = redisson.getLock("lock22");
RLock lock23 = redisson.getLock("lock23");
RedissonRedLock lock = new RedissonRedLock(lock21, lock22, lock23);
lock.lock();
//...
lock.unlock();
预期行为:
如果服务实例 1 获得了锁,那么服务实例 2 应该不能获得锁。(对于分布式锁定 - 这应该是正常行为)
问题:
Redis 如何知道对象"lock11"将被创建为对象"lock21"的独占?
我们(作为开发人员)是否需要为哈希冲突编程?
注意:这两个对象会有不同的 hashCode(服务实例 1 不会知道服务实例 2 的对象的 hashcode)
解决方案
推荐阅读
- java - Tycho 编译器插件:“没有绑定 org.eclipse.tycho.compiler.jdt.JdkLibraryInfoProvider 的实现”
- elasticsearch - 在弹性搜索的索引下为文档类型创建映射时出错
- android - 具有gridlayout smoothScrollTo()速度的Android RecyclerView
- json - 获取错误 dia.ElementView:graph.fromJSON(json) 需要标记
- javascript - 如果我不将其定义为 var 或 let,变量的范围是什么?
- react-native - react-native init...找不到模块...\template.config
- javascript - 我可以在 javascript 中使用 % 符号还是将其视为特殊字符?
- kubernetes - 通过 NFS 在多个 Kubernetes pod 之间共享大型块设备,保持每个命名空间的导出隔离
- php - 附加应用程序中的 CostaRico/yii2-images 404 错误
- python - 如何从表中选择与给定日期/日期条件匹配的所有行?