我有一个问题,而使用gridgain 8.8.9。当我指定CityKey时,我有CityKey和City对象。COUNTRYCODE作为关联键,过期策略无效。我将1000条数据放入缓存,键为CityKey对象,值为City对象,过期时间为1分钟。1分钟后,只删除了2个数据,然后我在visor中使用cache -scan命令,所有的数据都被删除了,但是如果我使用cache命令,数据将一直存在。如果我删除@ affinitykeymap注释上的CityKey。COUNTRYCODE,过期策略可能有效。我用gridgain 8.8.18做了同样的测试,过期策略一直有效。所以我想知道这是否是gridgain 8.8.9中的一个bug,如果不是bug,原因是什么,如何解决。
CityKey
import org.apache.ignite.cache.affinity.AffinityKeyMapped;
public class CityKey {
/** */
private int ID;
/** */
@AffinityKeyMapped
private String COUNTRYCODE;
public CityKey(int ID, String COUNTRYCODE) {
this.ID = ID;
this.COUNTRYCODE = COUNTRYCODE;
}
public CityKey() {
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
@Override
public String toString() {
return "CityKey{" +
"ID=" + ID +
", COUNTRYCODE='" + COUNTRYCODE + ''' +
'}';
}
public String getCOUNTRYCODE() {
return COUNTRYCODE;
}
public void setCOUNTRYCODE(String COUNTRYCODE) {
this.COUNTRYCODE = COUNTRYCODE;
}
public void assssssss(String sssss){
System.out.println(sssss);
}
}
城市
public class City {
private String NAME;
private String DISTRICT;
private int POPULATION;
public City(String NAME, String DISTRICT, int POPULATION) {
this.NAME = NAME;
this.DISTRICT = DISTRICT;
this.POPULATION = POPULATION;
}
public String getNAME() {
return NAME;
}
public void setNAME(String NAME) {
this.NAME = NAME;
}
public String getDISTRICT() {
return DISTRICT;
}
public void setDISTRICT(String DISTRICT) {
this.DISTRICT = DISTRICT;
}
public int getPOPULATION() {
return POPULATION;
}
public void setPOPULATION(int POPULATION) {
this.POPULATION = POPULATION;
}
@Override
public String toString() {
return "City{" +
"NAME='" + NAME + ''' +
", DISTRICT='" + DISTRICT + ''' +
", POPULATION=" + POPULATION +
'}';
}
}
GridGainTest
public class GridGainTest {
public static void main(String[] args) throws Exception {
ClientConfiguration clientConfiguration = new ClientConfiguration().setAddresses("127.0.0.1:10800");
IgniteClient client = Ignition.startClient(clientConfiguration);
// client.destroyCache("testcity");
ClientCacheConfiguration cacheConfiguration = new ClientCacheConfiguration().setName("testcity");
cacheConfiguration.setExpiryPolicy(new CreatedExpiryPolicy(new Duration(TimeUnit.MINUTES, 1)));
ClientCache<CityKey, City> city = client.getOrCreateCache(cacheConfiguration);
for (int i = 1000000; i < 1001000; ++i) {
City value = new City("henan", "a place", 1000000);
CityKey key = new CityKey(i, "hn" + i);
city.put(key, value);
System.out.println(i);
}
client.close();
}
}
这是网格增益遮阳板的输出。
visor> cache
Time of the snapshot: 2022-05-12 15:24:33
| Name(@) | Mode | Nodes | Total entries (Heap / Off-heap) | Primar
y entries (Heap / Off-heap) | Hits | Misses | Reads | Writes |
| testcity(@c0) | PARTITIONED | 1 | 1000 (0 / 1000) | min: 1
000 (0 / 1000) | min: 0 | min: 0 | min: 0 | min: 0 |
| | | | | avg: 1
000.00 (0.00 / 1000.00) | avg: 0.00 | avg: 0.00 | avg: 0.00 | avg: 0.00 |
| | | | | max: 1
000 (0 / 1000) | max: 0 | max: 0 | max: 0 | max: 0 |
+-------------------------------------------------------------------------------
----------------------------------------------------------------------------+
Use "-a" flag to see detailed statistics.
visor> cache
Time of the snapshot: 2022-05-12 15:26:50
| Name(@) | Mode | Nodes | Total entries (Heap / Off-heap) | Primar
y entries (Heap / Off-heap) | Hits | Misses | Reads | Writes |
| testcity(@c0) | PARTITIONED | 1 | 998 (0 / 998) | min: 9
98 (0 / 998) | min: 0 | min: 0 | min: 0 | min: 0 |
| | | | | avg: 9
98.00 (0.00 / 998.00) | avg: 0.00 | avg: 0.00 | avg: 0.00 | avg: 0.00 |
| | | | | max: 9
98 (0 / 998) | max: 0 | max: 0 | max: 0 | max: 0 |
+-------------------------------------------------------------------------------
----------------------------------------------------------------------------+
Use "-a" flag to see detailed statistics.
visor> cache -scan
Time of the snapshot: 2022-05-12 15:28:42
+===============================================================+
| # | Name(@) | Mode | Size (Heap / Off-heap) |
+===============================================================+
| 0 | testcity(@c0) | PARTITIONED | min: 998 (0 / 998) |
| | | | avg: 998.00 (0.00 / 998.00) |
| | | | max: 998 (0 / 998) |
+---------------------------------------------------------------+
Choose cache number ('c' to cancel) [c]: 0
Cache: testcity is empty
很可能是已知问题。这可能与由于错误的关联和赋值而导致的对墓碑的不当处理有关。尝试最新的GridGain 8.8.18。问题是GG-34306 -修复了清除墓碑的问题.