gpt4 book ai didi

java - 在 Ignite 中使用 Map 作为缓存键的错误

转载 作者:行者123 更新时间:2023-12-01 20:57:13 25 4
gpt4 key购买 nike

所以我最近在使用 Ignite 时遇到了一个错误,这让我疯狂地思考,并认为这篇文章可能会帮助一些迷失的灵魂,所以这里是:

场景如下:我有一个类A,它只有一个java.util.Map字段,我将其用作要映射到的点燃缓存键有一定的值(value)。

我有同一服务的 2 个实例: S1S2 ,每个实例都运行一个 ignite 节点。我们将实例的点燃节点称为节点 NM

两个服务都在 ignite 上执行affinityCalls,因此无论使用哪个服务实例,ignite 调用都将转到同一节点。

发生的场景如下:1. 服务S1N进行关联调用,并在N的缓存中存储A的映射 -> 值V2. 服务S2执行相同的关联调用并转到N,但是,当尝试检索放入N的值时如果按步骤 1 缓存,则无法检索它,就好像缓存不包含它一样。

为了让事情更清楚,请考虑以下伪代码:

S1第 1 步中执行以下操作。

IgniteCache igniteCache=....;

map map1= new Map();map1.put("某个键","某个值");

A cacheKey= new A( map );

igniteCache.put(keyInCache, 任何内容);

S2第 2 步中执行以下操作

IgniteCache igniteCache=....;

map map2= new Map();map2.put("某个键", "某个值");

A keyToRetrieve= new A(map2);

igniteCache.contains(keyToRetrive) --> false。

即使 keyToRetrieve.equals(cacheKey) 为 true。

并且缓存确实包含cacheKey。

我发现这个问题的罪魁祸首是使用Map作为A类型键中的字段。因为 ignite 似乎在处理具有 Map 成员的键时遇到了麻烦,正如这里提到的:

Ignite cache.containsKey returns false although keys are equal

最佳答案

使用 Map 作为缓存键非常不典型,我不建议这样做。如果键是具有多个字段的复合对象,并且没有类,则可以使用二进制构建器构建它:https://apacheignite.readme.io/docs/binary-marshaller#modifying-binary-objects-using-binaryobjectbuilder

关于java - 在 Ignite 中使用 Map 作为缓存键的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com