Java Cassandra:在超级列上设置TTL

Java Cassandra:在超级列上设置TTL,java,session,tomcat,cassandra,ttl,Java,Session,Tomcat,Cassandra,Ttl,我已经为Tomcat开发了一个插件,它允许会话数据被持久化并分布在Cassandra环上。我希望Cassandra使用不同列上的TTL设置来处理会话到期。我现在遇到的问题是,会话中的各种对象都在不同的时间过期,因此会话会随着时间的推移丢失未使用的对象,即使会话和其他会话对象被连续访问 有没有一种方法可以让我在一个超级列上设置TTL,并让存储在这个超级列中某个键下的所有数据在该键过期时过期 我不希望每次返回HTTP响应时都遍历web会话中存储的所有数据,因为这会在tomcat插件和Cassandr

我已经为Tomcat开发了一个插件,它允许会话数据被持久化并分布在Cassandra环上。我希望Cassandra使用不同列上的TTL设置来处理会话到期。我现在遇到的问题是,会话中的各种对象都在不同的时间过期,因此会话会随着时间的推移丢失未使用的对象,即使会话和其他会话对象被连续访问

有没有一种方法可以让我在一个超级列上设置TTL,并让存储在这个超级列中某个键下的所有数据在该键过期时过期

我不希望每次返回HTTP响应时都遍历web会话中存储的所有数据,因为这会在tomcat插件和Cassandra之间产生不必要的I/O。我也不想在Tomcat插件中保留任何内存缓存,因为我希望Tomcat完全无状态,并且只在Cassandra中维护所有用户会话状态

这个Tomcat插件非常漂亮,因为它允许以前阶段性的web应用程序变成无状态,从而允许水平扩展。如果能克服这个TTL问题就太棒了


我最近一直在思考这个问题,使用内置列ttl不在每个请求上产生显著的I/o是不容易的。我建议不要完全依赖ttl专栏

在创建会话时,创建一个额外的expiration\u timestamp列,并将其设置为合理的值,例如60分钟后过期的时间戳。 会话密钥,值1,值2,过期时间戳=60分钟

插入列Value1、value2等时,将ttl设置为60分钟。列可以在http请求期间动态添加,因此,它们最初会在不同的时间过期

当用户执行http请求时,通过行缓存、键缓存等读取会话行优化,但不要更新ttl或到期时间戳

当用户请求接近到期时间戳(例如50分钟)时,更新到期时间戳再添加60分钟,并使用新的ttl重新插入整个会话行。所有列ttl将同时同步更新。 该解决方案确保我们大部分时间都从缓存执行读取,并执行写i/o以保持会话活动,仅在会话到期之前更新ttl。当执行更新ttl是任意的时,您可以将其设置为30分钟、50分钟,但每次访问都不能