用于Electron/Nodejs的数据持久缓存库

栏目: Node.js · 发布时间: 6年前

内容简介:lndb是基于本地文件系统封装的一套灵活的持久化存储数据库,支持Node、Electron等。Github:使用文件系统作为基础存储方式,并在上层读写时提供灵活的插件机制,这意味着你可以根据自己的需求定制读写功能,详细信息查看。

lndb是基于本地文件系统封装的一套灵活的持久化存储数据库,支持Node、Electron等。

Github: github.com/yansenlei/l…

使用文件系统作为基础存储方式,并在上层读写时提供灵活的插件机制,这意味着你可以根据自己的需求定制读写功能,详细信息查看。

安装

$ npm install lndb
复制代码

使用

const LNDB = require('lndb')
const db = new LNDB('your/path')
// 初始类型
const pg = db.init('page')
// 写入数据
pg.set('key', {hello: 'lndb!'})

// 读取类型信息
pg.get('key')

// 删除指定key的缓存
pg.remove('key')

// 清空类型下所有缓存
pg.clear()
复制代码

读写信息说明

  1. 默认情况下不论存入何种数据类型,通过 .get(key) 获取到的都是一个文件结构,这是为了可以自由的获取文件信息。 如上面举例那样的 Object 类型数据默认存入 data.json 中:
    __lndb__/page/
        └── key
            └── data.json
    复制代码
    你通过 .get(key) 获取到的数据像这样:
    {
      "data.json": {
        "path": "pro/__lndb__/page/key/data.json"
      },
      "data": {
        "hello": "lndb!"
      }
    }
    复制代码
    如果使用内的 unzip 这样的插件来存入文件,文件树像这样:
    __lndb__/page/
        └── key
            └── files
                ├── index.html
                └── about.html
    复制代码
    你通过 .get(key) 获取到的数据像这样:
    {
      "files": {
        "path": "pro/__lndb__/page/key/files/",
        "child": {
          "index.html": {
            "path": "pro/__lndb__/page/key/files/index.html"
          },
          "about.html": {
            "path": "pro/__lndb__/page/key/files/about.html"
          }
        }
      }
    }
    复制代码
  2. 如果存入数据是如上面举例那样的 Object 类型,在读取时会默认加载数据信息可以通过 get(key).data 获取,如果需要更灵活的操作数据信息可以使用 lodash 插件。
  3. 由于使用的是文件命名,所以命名上对符号( \ / ) 是很敏感的,虽然程序会默认使用 __lndb__ 来替换敏感符号后再命名文件,但是希望你在使用的时候注意规避敏感符号以保证程序正常运行。

插件机制

也许默认的读写操作并不能满足你的需求,值得一提的是,Lndb 的核心是可以灵活的扩展读写功能,你可以引入符合标准的插件来替换现有的读写功能:

const demoPlugin = require('demo-plugin')
// add plugin
db.use('demo-plugin', demoPlugin, { "options": true})

const pg = db.init('page')

pg.set('key', { hello: 'lndb!'}, {
  name: 'demo-plugin',
  options: {}
})
复制代码
  • .use(name, plugin, options)
    name
    plugin
    options
    
  • .set/.get(k, v, {name, options})
    • name 唯一名称
    • options 插件参数,替换 db.use() 时的预制参数

插件规范

现在你可以根据自己的需求编写自己的读取方式,但是你必须遵循必要的规范,插件模板看起来像这样:

module.exports = {
  install(Ln, params = {}, options = {}){
    // 你的自定义操作

    // 调用文件获取
    Ln.fls.get(id)
    // 调用文件写入
    Ln.fls.set(params.id, params.value)
    // 获取当前数据保存路径
    Ln.fls.datapath

    return true
  }
}
复制代码

目前插件允许你在 set() , get() 上做自定义操作。 插件内是一个对象,对象内函数名为 install ,函数带有三个参数:

  • install(Ln, params, options)
    • Ln 当前读写上下文
    • params 读写时的参数 {id, value}
    • options 传入插件的配置信息

内置插件

内置插件默认已经存在于系统插件列表中,可以在 .get() .set() 直接使用

lodash

读取扩展,使用lodash插件灵活读写,该插件参考了 lowdb 的使用方式,这可以很灵活的处理单个文件,具体参考lodash文档

const pg = db.init('page')

const _ = pg.get('key', ['lodash'])
_.setState({hello: 'lndb!'}).write()
_.getState() // { hello: 'lndb!'}
_.has("hello").value() // true
_.update("hello", n => n.toUpperCase()).write() // update -> { hello: 'LNDB!!'}
复制代码

lodash plugin API

  • _.setState()
    • 写入数据到实例中
  • _.getState()
    • 获取当前实例的数据
  • _.update()
    • 更新数据
  • _.read()
    • 读取磁盘中的数据到实例,返回实例
  • _.write()
    • 所有写入操作需要调用 .write() 后才写入磁盘
unzip

写入扩展,使用unzip写入zip文件时解压到指定目录下,意味着可以通过 .get() 方法获取到解压后的路径,便可使用里面的文件

pg.set('key', value, {
  name: 'unzip'
})

pg.get('key')
复制代码
  • value <Buffer> | <Base64>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

金融数量分析

金融数量分析

郑志勇 / 北京航空航天大学出版社 / 2014-7-1 / CNY 58.00

《金融数量分析——基于MATLAB编程(第3版)》一书中的案例均来源于作者的工作实际,并充分体现“案例的实用性、程序的可模仿性”,程序中附有详细的注释。例如,投资组合管理、KMV模型计算、期权定价模型与数值方法、风险价值VaR的计算等案例程序,读者可以直接使用或根据需要在源代码的基础上修改、完善。 本书共23章。前两章分别对金融市场的基本概况与MATLAB的基础知识进行概述;接下来为20个金......一起来看看 《金融数量分析》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具