Skip to content

In memory cache in python with efficient expiration

Notifications You must be signed in to change notification settings

sankalpjonn/knowhere

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

knowhere

In memory cache, a python implementation of zizou with a different expiration policy

knowhere

Features

  • Store millions of entries
  • High concurrent thread-safe access
  • Expiration support
  • Shard support to avoid locks on whole db during any concurrent read/writes/deletes

Installation

pip install knowhere

Usage

Initialize

shard_size should be a power of 2. This size must be set according to the number of keys you expect to be there in the cache at any given time.

from datetime import timedelta
from decimal import Decimal

import uuid, time, json, sys, knowhere

c = knowhere.Cache(shard_size=2, eviction_interval=timedelta(seconds=10))

Set

c.set("key", "value", ttl=timedelta(seconds=5))

Default expiry will be set to 5 minutes if no ttl is specified

Get

c.get("key")

Delete

c.delete("key")

Flush

deletes all keys in the cache

c.flush()

Info

gives all shards and number of keys in each shard as a json

c.info()

Keys

gives a list of all keys in the cache

c.keys()

Expiration policy

knowhere expires keys the same way redis does. You can find it here. Specifically, this is what knowhere does on every eviction interval for each shard

  • Step 1: Get 20 random keys from the shard
  • Step 2: Delete all the keys which should be expired.
  • Step 3: If more than 4 of the 20 keys were expired, start again from step 1

About

In memory cache in python with efficient expiration

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages