{"id":18433444,"url":"https://github.com/mchernyakov/various-ttl-map","last_synced_at":"2025-04-07T19:31:28.330Z","repository":{"id":57721417,"uuid":"229643371","full_name":"mchernyakov/various-ttl-map","owner":"mchernyakov","description":"Thread-safe map (cache) with various time to live of keys","archived":false,"fork":false,"pushed_at":"2022-01-07T20:23:23.000Z","size":111,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-22T23:04:00.895Z","etag":null,"topics":["cache","java","map","thread-safe-cache","thread-safety","ttl","ttl-cache","ttl-map"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mchernyakov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-22T23:13:45.000Z","updated_at":"2023-11-16T02:22:58.000Z","dependencies_parsed_at":"2022-09-26T21:41:30.901Z","dependency_job_id":null,"html_url":"https://github.com/mchernyakov/various-ttl-map","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchernyakov%2Fvarious-ttl-map","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchernyakov%2Fvarious-ttl-map/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchernyakov%2Fvarious-ttl-map/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mchernyakov%2Fvarious-ttl-map/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mchernyakov","download_url":"https://codeload.github.com/mchernyakov/various-ttl-map/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247716262,"owners_count":20984208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cache","java","map","thread-safe-cache","thread-safety","ttl","ttl-cache","ttl-map"],"created_at":"2024-11-06T05:34:36.847Z","updated_at":"2025-04-07T19:31:27.977Z","avatar_url":"https://github.com/mchernyakov.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Map with various time to live of keys\n\n[![Build Status](https://travis-ci.com/mchernyakov/various-ttl-map.svg?branch=master)](https://travis-ci.com/mchernyakov/various-ttl-map)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.mchernyakov/various-ttl-map/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.github.mchernyakov/various-ttl-map/)\n\n## Description\n\nI's a cache (map) with various ttl of keys based on Redis [expire algorithm](https://redis.io/commands/expire)\nand ConcurrentHashMap.\n\nThe implementation contains two maps:\n\n* keys and values,\n* keys and ttl.\n\nAnd has two cleaning modes:\n\n* `passive` via _get(K)_,\n* `active` via _BackgroundCleaner_.\n\nThe BackgroundCleaner contains a thread pool, which is responsible for cleaning the map.\n\n## Install\n\n#### Maven\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.mchernyakov\u003c/groupId\u003e\n    \u003cartifactId\u003evarious-ttl-map\u003c/artifactId\u003e\n    \u003cversion\u003e0.0.3\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Gradle\n\n```groovy\ncompile group: 'com.github.mchernyakov', name: 'various-ttl-map', version: '0.0.3'\n```\n\n## Usage\n\n### Properties\n\nBuilder properties:\n\n`defaultTtl` - default ttl (seconds),\n\n`cleaningPoolSize` - cleaning pool size (default = 1),\n\n`numCleaningAttemptsPerSession` - how many attempts cleaner can do in single session,\n\n`waterMarkPercent` - percent when the cleaner has to start another session\n(basically, it means that we have a lot of expired keys,\nsee [algo](https://redis.io/commands/expire#how-redis-expires-keys)),\n\n`delayMillis`- interval between cleaning sessions (millis, default = 1000).\n\n#### In code\n\n```java\n    VariousTtlMap\u003cString, String\u003e map=VariousTtlMapImpl.Builder.newBuilder()\n        .setDefaultTtl(2)\n        .setCleaningPoolSize(2)\n        .setNumCleaningAttemptsPerSession(250)\n        .setWaterMarkPercent(10)\n        .setDelayMillis(100)\n        .build();\n\n    int attempts = 10_000;\n    Random random = new Random();\n        for (int i = 0; i \u003c attempts; i++) {\n        map.put(\"key_\" + random.nextInt(), \"val\", random.nextInt(5));\n    }\n```\n\n## Roadmap\n\n- [ ] size of the cache,\n- [ ] options for primitive map for ttl (several engines),\n- [ ] async API,\n- [ ] jmh tests.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchernyakov%2Fvarious-ttl-map","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmchernyakov%2Fvarious-ttl-map","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmchernyakov%2Fvarious-ttl-map/lists"}