Map with various time to live of keys
Description
It is cache (map) with various ttl of keys based on Redis expire algorithm and ConcurrentHashMap.
The implementation contains two maps:
- keys and values,
- keys and ttl.
And has two variants of cleaning:
- passive via get(K),
- active via BackgroundCleaner.
The BackgroundCleaner contains thread pool which is responsible for cleaning map.
Install
Maven
<dependency>
<groupId>com.github.mchernyakov</groupId>
<artifactId>various-ttl-map</artifactId>
<version>0.0.3</version>
</dependency>Gradle
compile group: 'com.github.mchernyakov', name: 'various-ttl-map', version: '0.0.3'Usage
Properties
Builder properties:
defaultTtl - default ttl (seconds),
cleaningPoolSize - cleaning pool size (default = 1),
numCleaningAttemptsPerSession - how many attempts cleaner can do in single session,
waterMarkPercent - percent when the cleaner has to start another session
(basically it means that we have a lot of expired keys, see algo),
delayMillis- interval between cleaning sessions (millis, default = 1000).
In code
VariousTtlMap<String, String> map = VariousTtlMapImpl.Builder.newBuilder()
.setDefaultTtl(2)
.setCleaningPoolSize(2)
.setNumCleaningAttemptsPerSession(250)
.setWaterMarkPercent(10)
.setDelayMillis(100)
.build();
int attempts = 10_000;
Random random = new Random();
for (int i = 0; i < attempts; i++) {
map.put("key_" + random.nextInt(), "val", random.nextInt(5));
}Roadmap
- options for primitive map for ttl (several engines),
- async API,
- jmh tests.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
