Catalog npm
Back to packageRELEASE DETAILS

1.0.0

npm

2q-cache

Imlementation of 2Q Cache Algorithm

2q2q algorithm2q cache2q-cachecachedouble queuedouble queueslfulrumrucache modulenode cachenode-cache
Published10 Dec 2019
Direct dependencies0
Transitive dependenciesNot calculated

README

Current package documentation

2Q cache

Simple and configurable cache library for Node.js and Browser that implements 2Q Cache algorithm (http://www.vldb.org/conf/1994/P439.PDF) This algorithm tries to preserve the most used elements, so it demonstrates better cache hit than other caches,for example, LRU (Least Recently Used) cache.

Installation:

npm i 2q-cache

Usage:

const Cache2Q = require('2q-cache');

let cache = new Cache2Q(400); //sets max count of cache elems
/*
    20% of size will be "in" FIFO bucket,
    60% - "out" FIFO bucket,
    20% - "main" LRU cache

    OR

    let cache = new Cache2Q[400, 440, 200] - you also can define manually sizes of each section in cache.
    First element of array is size of "in" FIFO bucket,
    Second - size of "out" FIFO bucket,
    Third - size of "main" LRU cache
*/

Example with options

const Cache2Q = require('2q-cache');

let options = {
    ttl : 1000 * 60 * 60, //default time to delete elements from cache : number
    stringKeys : true, // If stringKeys are true, keys of cache elements will be convert to string by JSON.stringify
    ttlInMain : false, //you can disable time to delete in 'main' section of cache. It can be useful, because in main                           //section stored most requested cache elements
    mainStorageType : 'lfu' //Type of main storage. It can be 'lru' - Least Recently Used,
                            //'mru' - Most Recently used,
                            //'lfu' - Least-Frequently used
}

let cache = new Cache2Q(400, options); //or ([100,200,250], options);

By default

  • cache ttl (lifetime) equals 0, so elements will not be removed by timeout
  • stringKeys are false, so new elements are saving "as is", without using JSON.stringify

You also can use Typescript version of 2Q cache module:

import {Cache2Q, CacheException} from '2q-cache/ts/cache2Q';

let cache : Cache2Q = new Cache2Q(400); 

API

  • set(key : any, value : any, ttl : number = 0 (optional))

    Sets new pair (key, value) with lifetime (optional) if key exists, it updates value and ttl parameter ttl overrides default ttl settings

  • mset(Array<object {key : any, value : any, ttl : number = 0}>)

    the same as 'set', but for array of new elements

  • get(key) => value

    Returns value by presented key if key doesn't exists, returns null

  • mget(Array<key : any>) : Array<values : any>

    the same as 'get', but for array of keys

  • has(key) => boolean

    Returns true if key exists, otherwise returns false

  • mhas(Array<key : any>) : Array<boolean>

    the same as 'has', but for array of keys

  • delete(key : any) => boolean

    deletes pair (key, value) from cache. If element doesn't exists, returns false.

  • mdel(keys : Array<any>) : Array<boolean>

    the same as 'del', but for array of keys

  • resetTtl(key : any, ttl : number)

    resets (overrides) ttl for element by presented key.

  • mresetTtl(keys : Array<object {key : any, ttl : number}>)

    the same as 'resetTtl', but for array of keys

  • setDefaultTtl(ttl : number)

    sets default ttl.

  • setStringifyKeys(param : boolean)

    overrides default setting for stringify keys. if stringify keys are true, keys will be converted to string by JSON.stringify

  • clear()

    Clears cache

  • alloc(size : number | Array<number>)

    Sets new size for each cache section. Parameter same as constructor parameter. Doesn't allow make max section size smaller

  • allocUnsafe(size : number | Array<number>)

    Sets new size for each cache section. Parameter same as constructor parameter . Allow make max section size smaller. If new max size smaller than current size on some cache section, older elements will be removed.

  • getSize()

    Returns object like this:

    {
        buckets : {
            in : {
                currentSize : 10,
                maxSize : 20
            },
            out : {
                currentSize : 0,
                maxSize : 60
            },
        },
        main : {
            currentSize : 0,
            maxSize : 20
        }
    }

ROADMAP

  • Any ideas?

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 0

Native requirements
0 direct targetsNot calculated transitive count
No declared dependencies in this collected response

Declarations describe requirements; they are not a resolved dependency graph.

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "integrity": "sha512-/amzwMabVEfg39I36eAN/MPxH2dbZ34G3SPprrb0NGYRWzxxmwWva0KYmZb4P0uSBSKRsgrR1DjwgcKDcFp7Ew==",
  "shasum": "a0b00ab9e8ab0d11d7decfd8390002b5011f28b2",
  "tarball": "https://registry.npmjs.org/2q-cache/-/2q-cache-1.0.0.tgz",
  "fileCount": 16,
  "unpackedSize": 33282,
  "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd7yozCRA9TVsSAnZWagAAtV8P/RBSP3DIpbMD6NpBFHgR\nGnRcOZ1zF7ZKx02eIExpxNrDAeNc0yqApZHPH0w1MLM4eyWYUGXnTrMcnTGl\n01fj6lnkz0kRamR4AKSBwfyF1F1sA63a25dIyr2IPmOwobznf8OwuItOLGVF\nXBPCZvXZ1iQUfGfzPUeQTsa2chKW5Mw4tuLmzNfc2bvLEwFz26TSCozSagFT\nFlu1nB7cyO7uxgZ7SbXTSb3XOvsf0TW9ztgDvwBmHhFbRDq8q5UzE/DYpA5D\n2ZyC7bJNrNP/3uyCz1wNcMeDnqqTZwiZfyR3wuBe9A2vlUNa1kaM+Hm0Nr5P\n5dBbkAJuWN1EHvNB5zcZNRlbrQKRwrk+8WdsmOdeI10Aw/0WhKh3GJA1aopa\nyiUyMKnGE5ZW2gofJn+aAUhEzHyYyrkP/oYLIx6g9f0rrgRYuovx4mPjfC5n\nqf3PHdjhOqZeNsIs7nig9fUsGlKYc/r/lOtNSeN+oQVqS7C606Fwq4N6hNH4\nqvsrQc1LAX899l4vlMZW/T1jxilxRTLXQje+WfwBnQXDqxgcc+01+2gXz+A5\nH6ILspPcxDVnmJ66PV9de6p/JEYFTf1aDqc7ykrmuPrZGTK19kXsTvjga3Jm\nupX9ZilsZBSAUsZYLeY5oQG9Wi9dCBoWK5zhoXh+Nx6zyaZh7ZSQx9ial1b4\nQd67\r\n=uOf1\r\n-----END PGP SIGNATURE-----\r\n",
  "signatures": [
    {
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
      "sig": "MEUCIQDC9iFU5dRkds1KAzHTMFIXfbKTL4RP0QrpFAve9B7qwAIgBtHXZZIsLoF7ijJDCou8n4L/4oLqP1kgf1SZTgL6BIw="
    }
  ]
}

Repository

ACCESSIBLE
artmbrisov/2q-cache

Shared repository data · GitHub

License detected in repository
Not collected
Last push
14 Dec 2019
Archived
No
Contributor identities
— · partial collection

Public sponsor counts have not been collected. These signals belong to the repository owner.

Downloads & popularity

1count
Gauge · observed snapshots20 Oct 2026
10.50
2026-10-20: 1 · observed 2026-10-20T21:06:21.3689445Z
20 Oct20 Oct

github · 1 observations shown. Missing days are unknown.

View observed values
Date / source periodValueObserved at
2026-10-2012026-10-20T21:06:21.3689445Z

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:18 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:e6de22c8d459771bc66b3ffcca37b058070c5794459d2f8dd9f2b0ab9209c69e

Other collected versions

1.2.114 Dec1.2.014 Dec1.1.112 Dec1.1.012 Dec1.0.410 Dec1.0.310 DecView all collected versions →