Apache Ignite:无亲和键情况下如何获取缓存的Person对象
问题解答
绝大多数支持AffinityKey特性的分布式缓存(比如Apache Ignite、GridGain等)的常规使用场景下,可以仅通过Person.Id查询到对应的Person对象,不需要提前持有Person.CompanyId。
原因说明
- 亲和键的核心作用是控制数据分区路由,仅用来决定这条Person数据要存储在集群的哪个节点上,设计目的是让同一家公司的所有Person数据都落在同一个节点,避免跨节点关联查询的性能损耗,它本身不会替代或干扰主键的查询逻辑。
- 你写入代码里的
new AffinityKey(p1.Id, p1.CompanyId),第一个入参p1.Id是实际的业务主键,第二个入参p1.CompanyId仅作为分区路由的依据,不参与主键匹配判断。 - 对应查询代码示例如下,不需要传入CompanyId:
var targetPerson = personCache.Get(new AffinityKey(personId));
特殊情况说明
仅有一种例外场景无法实现:你自行实现了
AffinityKey的相等性判断逻辑,同时把Id和CompanyId都作为判断两个AffinityKey是否相等的依据。但主流缓存框架自带的AffinityKey实现都只会拿第一个参数做相等判断,亲和键不参与主键匹配,所以常规使用不会遇到这个问题。
内容的提问来源于stack exchange,提问作者csharpdev
相关产品推荐
相关产品推荐

