Ignite 2.5.0上的TTL不起作用

时间:2018-07-19 11:58:14

标签: spring ignite

我尝试使用2种方法为Ignite中的记录启用TTL,但似乎没有用。需要帮助以了解我是否缺少某些东西。

IgniteCache cache = ignite.getOrCreateCache(IgniteCfg.CACHE_NAME);
cache.query(new SqlFieldsQuery(
                "CREATE TABLE IF NOT EXISTS City (id LONG primary key, name varchar, region varchar)"))
                .getAll();
cache.withExpiryPolicy(new CreatedExpiryPolicy(new Duration(TimeUnit.SECONDS, 10)))
                .query(new SqlFieldsQuery(
                        "INSERT INTO City (id, name, region) VALUES (?, ?, ?)").setArgs(1, "Forest Hill1", "GLB"))
                .getAll();

所以您在上面看到了我在Cache中创建表并插入了记录TTL过期10秒钟的记录,但它似乎永不过期。

我尝试了另一种在插入记录时不设置TTL的方法,我在初始化Ignite时在CacheConfiguration中提到过,下面是代码示例

Ignition.setClientMode(true);
IgniteConfiguration cfg = new IgniteConfiguration();

// Disabling peer-class loading feature.
cfg.setPeerClassLoadingEnabled(false);

CacheConfiguration ccfg = createCacheConfiguration();
cfg.setCacheConfiguration(ccfg);
ccfg.setEagerTtl(true);
ccfg.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, 5)));

TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
cfg.setCommunicationSpi(commSpi);

TcpDiscoveryVmIpFinder tcpDiscoveryFinder = new TcpDiscoveryVmIpFinder();
String[] addresses = { "127.0.0.1" };
tcpDiscoveryFinder.setAddresses(Arrays.asList(addresses));
TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
discoSpi.setIpFinder(tcpDiscoveryFinder);
cfg.setDiscoverySpi(discoSpi);

return Ignition.start(cfg);
  

本地执行Ignite(而不是在内存中执行),因为我的最终目标是能够从多个应用程序实例甚至多个应用程序连接到同一Ignite。

1 个答案:

答案 0 :(得分:2)

Ignite SQL当前不与到期策略交互,并且不更新TTL。有一个功能请求:https://issues.apache.org/jira/browse/IGNITE-7687