{"_id":"@dawiidio/hybrid-disk-cache","name":"@dawiidio/hybrid-disk-cache","dist-tags":{"latest":"0.3.1"},"versions":{"0.3.1":{"name":"@dawiidio/hybrid-disk-cache","version":"0.3.1","description":"A hybrid disk cache utilize both the database and the file system.","main":"dist/index.js","scripts":{"build":"tsc","prepublishOnly":"rm -rf dist && npm run build","lint":"eslint src/*.ts test/*.ts","test":"NODE_ENV=test mocha --require ts-node/register test/**/*.test.ts","test-cov":"NODE_ENV=test nyc mocha test/*.test.ts"},"author":{"name":"Rakuraku Jyo","email":"jyo.rakuraku@gmail.com"},"contributors":[{"name":"Dawid Wojda","email":"dawid@dawiid.io","url":"https://dawiid.io"}],"homepage":"https://github.com/dawiidio/hybrid-disk-cache","repository":{"type":"git","url":"https://github.com/dawiidio//hybrid-disk-cache.git"},"license":"MIT","dependencies":{"better-sqlite3":"^7.1.1","fs-extra":"^10.0.0"},"devDependencies":{"@types/better-sqlite3":"^7.4.0","@types/chai":"^4.2.12","@types/fs-extra":"^9.0.1","@types/mocha":"^9.0.0","@types/node":"^16.7.10","@typescript-eslint/eslint-plugin":"^4.1.1","@typescript-eslint/parser":"^4.1.1","chai":"^4.2.0","eslint":"^7.9.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0","mocha":"^9.1.1","nyc":"^15.1.0","prettier":"^2.1.2","ts-node":"^10.2.1","typescript":"^4.0.3"},"nyc":{"include":["src/**/*.ts"],"extension":[".ts"],"require":["ts-node/register"],"reporter":["text","text-summary","lcovonly","html"],"sourceMap":true},"keywords":["disk-cache","file-cache","ttl","sqlite3","cache"],"publishConfig":{"access":"public"},"types":"./dist/index.d.ts","gitHead":"9cc52801b468a21f9646e4978f0798efcbadaef4","_id":"@dawiidio/hybrid-disk-cache@0.3.1","_nodeVersion":"18.10.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-flCdEVA95mjodzskDp6k9/T6+sLff+18lJdcI6vmMfhVNHn+n675KVTiG4A1i/SFyDnq/QqedCNlKcEzbg/62g==","shasum":"d5035fba96a17300a773f77d9b8bc506a82a7326","tarball":"https://registry.npmjs.org/@dawiidio/hybrid-disk-cache/-/hybrid-disk-cache-0.3.1.tgz","fileCount":12,"unpackedSize":30496,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+34vaFsP4NeooD7MsssOJbsnFqrez0Bm+T057kT1WAAiEAzXAKuH3SPfNq34dWZGRah8e9XkAjFv3x4046/wLxP50="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjejkKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrH2w/+OBeWyPTgPBOb8yvtILBTHdXndu1+OC7P69kXJ6UOevhrn0S0\r\nxEkM816Zhex6OB6UQg9ipdxW/TMAYeRoIXomCd5KyGQAEL+eMEY8j27CDExN\r\n46t7Kh0vKza0L06HbFWWByUkfALWGzL5w2kbnl8pIoz5RFxzHExqaa3olJDo\r\niL4X+GOfDQU+dhqjcRl6o8E4JqvEND3t/m5lWRxBNaNQzkFCvCOwgEZ9Ku4m\r\nSjO+MplqXFcKXWzXEb+r30tblvPEGdD1gB0R9bSJqA2P7Z1cmWnY2Xp5bxMm\r\nXJm16w2Phuu3yYOw3hdK/IirOY23qNZZ/bkSdjINyGooLI2R+kygQbIcJ/MG\r\nslgzTb1F7vLvPInhA3vx1gCqGPfHJ7ZfqodaSJU0a/zdDkGAI9b38OtFBGv1\r\n2UM0PWDshzvl+JigdbUB9tRvDGLdtIURkgsd+N478ljk3IkQQNFrEUk6A+DW\r\neLEytDyn+wRfOxi9rQdrXjDDJGHuSRR3vQQqS0tJpXkmjVUmwtq3k/nX7G/Z\r\nxeJBckrl+k3uor4UCwdgVRFLJnJmjdRMv/vSOxJNVaMN5+jcLmj3DD+TH/mL\r\nB2eAVXeBZyb31JRELo2bagFpVwNm2llfFBtin1N+j4oidUEtbJ1xBKzqDeBR\r\nyZ+kXHD5yRltz9sNI3txKZfRSTise/GuiQw=\r\n=0l/e\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dawiidio","email":"dawiidio@gmail.com"},"directories":{},"maintainers":[{"name":"dawiidio","email":"dawiidio@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hybrid-disk-cache_0.3.1_1668954378318_0.4351538767532803"},"_hasShrinkwrap":false}},"time":{"created":"2022-11-20T14:26:18.253Z","0.3.1":"2022-11-20T14:26:18.472Z","modified":"2022-11-20T14:26:18.604Z"},"maintainers":[{"name":"dawiidio","email":"dawiidio@gmail.com"}],"description":"A hybrid disk cache utilize both the database and the file system.","homepage":"https://github.com/dawiidio/hybrid-disk-cache","keywords":["disk-cache","file-cache","ttl","sqlite3","cache"],"repository":{"type":"git","url":"https://github.com/dawiidio//hybrid-disk-cache.git"},"contributors":[{"name":"Dawid Wojda","email":"dawid@dawiid.io","url":"https://dawiid.io"}],"author":{"name":"Rakuraku Jyo","email":"jyo.rakuraku@gmail.com"},"license":"MIT","readme":"# @dawiidio/hybrid-disk-cache\n\n### WARNING!\n**This is a forked version with backward compatibility**\n\nWhat's new?\n- in-memory SQLite3 database\n- temporary SQLite3 database\n- different patch for database and files to cache\n\nA hybrid disk cache library that utilized both the solid SQLite3 database and the file system.\n\n```bash\nyarn add @dawiidio/hybrid-disk-cache\n```\n\nWhen the value is larger than 10 kilobytes, it will be written to the file system, otherwise saved in SQLite3 database.\n\nThe benefits of using this kind of hybrid cache are:\n\n- Always use the small footprint and high performace SQLite3 index.\n- Using file system for larger files. No need to run `vacuum` for releasing space\n\nAlso, here are some bonus:\n\n- 100% test coverage\n- Pure Typescript\n- Used in production with 300K keys\n- SQLite3's indices will always be used when searching for a key. (which is FAST)\n\nThis hybrid idea is inspired by [`python-diskcache`](https://github.com/grantjenks/python-diskcache). We used it in our Python production stack, and it works just as great as what we'd expected.\n\n## APIs\n\n```javascript\n// tbd, time before deletion: This is used to control how long a key\n// should remain in the cache after expired (ttl)\n// And `cache.purge` will delete all records with ttl + tbd < now\nconst cache = new Cache({ \n  path, \n  ttl, \n  tbd,\n  dbPath\n})\n\n// set. if ttl empty, use the cache's ttl\ncache.set(key, value)\n// set. will expire in 5 seconds\ncache.set(key, value, 5)\n\n// get\ncache.get(key, defaultValue)\n\n// del\ncache.del(key)\n\n// check cache availability and status\n// status in 'miss' | 'stale' | 'hit'\nconst status = cache.has(key)\n\n// if you want to serve even the stale value\nif (cache.has(key) !== 'miss') {\n    const value = cache.get(key)\n}\n\n// if you only want the unexpired one\nif (cache.has(key) === 'hit') {\n    const value = cache.get(key)\n}\n\n// delete all expired keys\ncache.purge()\n```\n\nCheck [`index.test.ts`](https://github.com/next-boost/hybrid-disk-cache/blob/master/test/index.test.ts) for examples.\n\n## Benchmarks\n\nWith a series of 10B ~ 500KB data writing and reading, here are the results on a Samsung 860 EVO SATA SSD:\n\nHere is the [benchmark source code](https://github.com/next-boost/hybrid-disk-cache/blob/master/src/bench.ts).\n\n```\n> cache located at: /tmp/hdc\n> generating bench data from 10B to 500000B\n> starting 3000 x 15 writes\n  done: 69.34 μs/record.\n> starting 3000 x 15 reads\n  done: 26.65 μs/record.\n```\n\n## License\n\nMIT. Copyright 2020, Rakuraku Jyo.\nFork by @dawiidio\n","readmeFilename":"README.md"}