{"id":17137731,"url":"https://github.com/xuexb/key-cache","last_synced_at":"2025-04-13T09:50:55.685Z","repository":{"id":57153637,"uuid":"46764563","full_name":"xuexb/key-cache","owner":"xuexb","description":"Storing data in the form of key into the file","archived":false,"fork":false,"pushed_at":"2017-08-25T06:06:21.000Z","size":87,"stargazers_count":10,"open_issues_count":2,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T17:01:32.138Z","etag":null,"topics":["cache","file-cache","json-data"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/xuexb.png","metadata":{"files":{"readme":"README-CN.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":"2015-11-24T03:29:25.000Z","updated_at":"2025-02-06T04:46:10.000Z","dependencies_parsed_at":"2022-09-07T08:41:18.590Z","dependency_job_id":null,"html_url":"https://github.com/xuexb/key-cache","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexb%2Fkey-cache","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexb%2Fkey-cache/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexb%2Fkey-cache/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuexb%2Fkey-cache/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xuexb","download_url":"https://codeload.github.com/xuexb/key-cache/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248695300,"owners_count":21146952,"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","file-cache","json-data"],"created_at":"2024-10-14T20:07:45.973Z","updated_at":"2025-04-13T09:50:55.660Z","avatar_url":"https://github.com/xuexb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# key-cache\n\n[English documents](./README.md)\n\n以`key`的形式储存数据到文件内\n\n---\n\n[![code style fecs](https://img.shields.io/badge/code%20style-fecs-brightgreen.svg)](https://github.com/ecomfe/fecs)\n[![NPM Version](https://img.shields.io/npm/v/key-cache.svg)](https://www.npmjs.com/package/key-cache)\n[![NPM Downloads](https://img.shields.io/npm/dm/key-cache.svg)](https://www.npmjs.com/package/key-cache)\n[![Linux Build](https://img.shields.io/travis/xuexb/key-cache/master.svg?label=linux)](https://travis-ci.org/xuexb/key-cache)\n[![Windows Build](https://img.shields.io/appveyor/ci/xuexb/key-cache/master.svg?label=windows)](https://ci.appveyor.com/project/xuexb/key-cache)\n[![Test Coverage](https://img.shields.io/coveralls/xuexb/key-cache/master.svg)](https://coveralls.io/r/xuexb/key-cache?branch=master)\n[![Dependencies](https://img.shields.io/david/xuexb/key-cache.svg?style=flat)](https://david-dm.org/xuexb/key-cache)\n\n## 安装\n\n\u003e 依赖 `node 4+`\n\n```bash\nnpm install key-cache --save\n```\n\n## 使用\n\n```js\n// 创建一个引用\nvar KeyCache = require('key-cache');\n\n// 实例化对象\nvar cache = new KeyCache(options);\n\n// 这里就可以使用接口来操作了\ncache.get('balbalbal');\n```\n\n## 默认参数\n\n### options.dir\n\n数据缓存的目录，基于当前运行的目录\n\n```js\n/**\n * @default key-cache安装目录的.cache目录\n * @type {String}\n */\n```\n\n### options.timeout\n\n缓存保存时间，单位`秒`，如果为空则永久保存\n\n```js\n/**\n * @default null\n * @type {number|null}\n */\n```\n\n### options.md5key\n\n设置是否使用`md5`命名缓存文件名，为了路径的有效性，会过滤除了中文、字母、数字、-、_ 外的其他字符将被忽略，使用的正则是：`/[^\\u4e00-\\u9fa5a-zA-Z\\_\\-0-9]/g`.\n\n```js\n/**\n * @default true\n * @type {Boolean}\n */\n```\n\n## 接口\n\n### set\n\n写入数据到缓存文件内\n\n```js\n/**\n * @param {string} key\n * @param {Object|string} value\n * @param {Object|undefined} options        如果有则会覆盖实例参数\n * @return {Object} this\n */\nset(key, value, options = {})\n```\n\n### get\n\n从缓存文件内获取数据\n\n```js\n/**\n * @param  {string} key\n *\n * @return {Object|string|null}             如果该数据不存在或者过期则返回null\n */\nget(key)\n```\n\n### remove\n\n删除缓存数据和缓存文件\n\n```js\n/**\n * @param  {string|undefined} key\n *\n * @return {Object}     this\n */\nremove(key)\n```\n\n## 例子\n\n### 简单\n\n```js\nvar cache = new KeyCache();\n\ncache.set('name', 'key-cache');\n\nconsole.log(cache.get('name'));\n\ncache.remove('name');\n\nconsole.log(cache.get('name')); // =\u003e null\n```\n\n### 自定义缓存目录\n\n```js\nvar cache = new KeyCache({\n    dir: '../cache/'\n});\n\ncache.set('name', 'key-cache');\n\n// 这里参数会覆盖上面配置dir\ncache.set('name2', 'key-cache', {\n    dir: './cache2'\n});\n```\n\n### 设置过期时间\n\n```js\nvar cache = new KeyCache({\n    timeout: 3\n});\n\ncache.set('name', 'key-cache');\n\n// 这里参数会覆盖上面配置timeout\ncache.set('age', 1, {\n    timeout: 5\n});\n\nsetTimeout(function(){\n    console.log(cache.get('name')); // =\u003e null\n    console.log(cache.get('age')); // =\u003e 1\n}, 3000);\n```\n\n### 删除缓存\n\n```js\nvar cache = new KeyCache();\n\ncache.set('name', 'key-cache');\ncache.set('age', 1);\n\n// 删除单个\ncache.remove('name');\n\nconsole.log(cache.get('name')); // =\u003e null\nconsole.log(cache.get('age')); // =\u003e 1\n\n// 删除全部\ncache.remove();\n\nconsole.log(cache.get('age')); // =\u003e null\n```\n\n\n### md5key配置\n\n\u003e 配置不使用`md5`为缓存文件名\n\n```js\nvar cache = new KeyCache({\n    md5key: false\n});\n\ncache.set('key', 'key-cache'); // =\u003e 文件名是 key.json\ncache.set('age', 1); // =\u003e 文件名是 age.json\ncache.set('this a space +-', 1); // =\u003e 文件名是 thisaspace-.json\ncache.set('中文', 1); // =\u003e filename is 中文.json\n```\n\n\n## 参与开发\n\n\u003e 使用es6开发，依赖[babel 6.x](https://babeljs.io/)编译\n\n```js\n// 运行编译，将es6代码从 src 编译到 lib 目录\nnpm run compile\n\n// 监听文件改动并实时编译\nnpm run watch\n\n// 使用fecs检查代码规范\nnpm run check\n\n// 使用 mocha 运行测试用例\nnpm run test\n\n// 运行测试用例和代码覆盖率\nnpm run test-cov\n```\n\n## 更新日志\n\n### 1.0.0\n\n添加 nodejs v8 测试环境\n\n### 0.3.1\n\n添加 `.getAll()` 方法\n\n### 0.3.0\n\n最低支持`node 4.x+`\n\n### 0.2.9\n\n修改api：`fs.existsSync`=\u003e`fs.statSync`\n\n### 0.2.8\n\n添加nodejs6.x测试环境\n\n### 0.2.7\n\n更新测试用例为es6\n\n### 0.2.6\n\n升级为[babel 6.x](https://babeljs.io/)编译\n\n### 0.2.3\n\n* 修改 `precommit` 为 `prepush`\n* 添加 [release.sh](release.sh), 来自 [vue](https://github.com/vuejs/vue/blob/dev/build/release.sh)\n\n### 0.2.1\n\n修复当参数为`function`时返回值的类型，从`undefined`改成`null`~\n\n### 0.2.0\n\n添加`options.md5key`参数，用来配置是否使用`md5`方式命名缓存文件名\n\n### 0.1.x\n\n优化代码，添加测试用例\n\n## 协议\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuexb%2Fkey-cache","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxuexb%2Fkey-cache","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuexb%2Fkey-cache/lists"}