You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:57:05