当前位置: 首页 > 知识库问答 >
问题:

Ignite 2.5.0上的TTL不工作

于正志
2023-03-14

我尝试使用两种方法在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();

因此,您可以看到上面,我在缓存中创建了表,并插入了10秒提到过期TTL的记录,但似乎它从未过期。

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);

共有1个答案

宓毅庵
2023-03-14

Ignite SQL目前不与过期策略交互,也不更新TTL。有一个特性请求:https://issues.apache.org/jira/browse/ignite-7687。

 类似资料:
  • TTL

    TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 可用版本: >= 1.0.0 时间复杂度: O(1) 返回值: 当 key 不存在或没有设置生存时间时,返回 -1 。 否则,返回 key 的剩余生存时间(以秒为单位)。 # 带 TTL 的key redis> SET name "redis" OK redis> EXPIRE name 30

  • 我下载了XAMPP,但无法启动Apache。我试着把端口号从80改为81,也从443改为444,但没有用。我已经退出了Skype。当我检查端口80上的内容时,它显示了一个名为httpd的文件。exe正在运行。我试图使用任务管理器阻止它,但它仍然没有停止,当我尝试运行它时,它总是显示此消息 22:59:17[Apache]端口80被PID 2268的"C:\httpd-2.4.7-win32-VC1

  • 在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。 一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 13/12/11/10/9/8/7/6。 JDK的InheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线

  • 我在SpringBoot项目中有一个控制器类,它具有登录功能。当我输入用户名和密码并按submit时,它将使用method=“POST”调用LoginController。我希望当我使用模型添加属性“customer”时,“customer”属性也将通过@SessionAttributes(“customer”)添加到会话中。相反,它返回错误 这里是错误 这是我的密码

  • 如果我使用Main从测试类测试Log4j,它就能正常工作。但是当我使用Servlet项目时,日志文件不会被创建。 我正在使用Apache和Tomcat处理Eclipse 首先,我认为问题出在log4j.properties文件上。我从src目录移动到Webcontent目录。然后我再次移动到Webcontent目录内的classes目录。但我不工作。