• LuatOS-SOC接口文档(air780E)-- fskv - kv数据库,掉电不丢数据


    示例

    -- 本库的目标是替代fdb库
    -- 1. 兼容fdb的函数
    -- 2. 使用fdb的flash空间,启用时也会替代fdb库
    -- 3. 功能上与EEPROM是类似的
    fskv.init()
    fskv.set("wendal", 1234)
    log.info("fskv", "wendal", fskv.get("wendal"))
    
    --[[ 
    fskv与fdb的实现机制导致的差异
    
                        fskv          fdb
    1. value长度        4096           255
    2. key长度          63             64
    3. 空间利用率(对比)  较低           较高
    4. 读取速度         恒定           脏数据影响速度,非恒定
    5. 写入数据         恒定           脏数据影响速度,非恒定
    6. 均衡擦除         自动           自动
    ]]
    

    fskv.init()

    初始化kv数据库

    参数

    返回值

    返回值类型

    解释

    boolean

    成功返回true,否则返回false

    例子

    if fskv.init() then
        log.info("fdb", "kv数据库初始化成功")
    end
    
    -- 关于清空fdb库
    -- 下载工具是没有提供直接清除fdb数据的途径的, 但有办法解决
    -- 写一个main.lua, 执行 fskv.kvdb_init 后 执行 fskv.clear() 即可全清fdb数据.
    

    fskv.set(key, value)

    设置一对kv数据

    参数

    传入值类型

    解释

    string

    key的名称,必填,不能空字符串

    string

    用户数据,必填,不能nil, 支持字符串/数值/table/布尔值, 数据长度最大4095字节

    返回值

    返回值类型

    解释

    boolean

    成功返回true,否则返回false

    例子

    -- 设置数据, 字符串,数值,table,布尔值,均可
    -- 但不可以是nil, function, userdata, task
    log.info("fdb", fskv.set("wendal", "goodgoodstudy"))
    log.info("fdb", fskv.set("upgrade", true))
    log.info("fdb", fskv.set("timer", 1))
    log.info("fdb", fskv.set("bigd", {name="wendal",age=123}))
    

    fskv.sett(key, skey, value)

    设置table内的键值对数据

    参数

    传入值类型

    解释

    string

    key的名称,必填,不能空字符串

    string

    table的key名称, 必填, 不能是空字符串

    string

    用户数据,必填,不能nil, 支持字符串/数值/table/布尔值, 数据长度最大4095字节

    返回值

    返回值类型

    解释

    boolean

    成功返回true,否则返回false/nil

    例子

    -- 本API在2023.7.26新增,注意与set函数区别
    -- 设置数据, 字符串,数值,table,布尔值,均可
    -- 但不可以是nil, function, userdata, task
    log.info("fdb", fskv.sett("mytable", "wendal", "goodgoodstudy"))
    log.info("fdb", fskv.sett("mytable", "upgrade", true))
    log.info("fdb", fskv.sett("mytable", "timer", 1))
    log.info("fdb", fskv.sett("mytable", "bigd", {name="wendal",age=123}))
    
    -- 下列语句将打印出4个元素的table
    log.info("fdb", fskv.get("mytable"), json.encode(fskv.get("mytable")))
    -- 注意: 如果key不存在, 或者原本的值不是table类型,将会完全覆盖
    -- 例如下列写法,最终获取到的是table,而非第一行的字符串
    log.info("fdb", fskv.set("mykv", "123")
    log.info("fdb", fskv.sett("mykv", "age", "123")) -- 保存的将是 {age:"123"}
    -- 
    

    fskv.get(key, skey)

    根据key获取对应的数据

    参数

    传入值类型

    解释

    string

    key的名称,必填,不能空字符串

    string

    可选的次级key,仅当原始值为table时有效,相当于 fskv.get(key)[skey]

    返回值

    返回值类型

    解释

    any

    存在则返回数据,否则返回nil

    例子

    if fskv.init() then
        log.info("fdb", fskv.get("wendal"))
    end
    
    -- 若需要"默认值", 对应非bool布尔值, 可以这样写
    local v = fskv.get("wendal") or "123"
    

    fskv.del(key)

    根据key删除数据

    参数

    传入值类型

    解释

    string

    key的名称,必填,不能空字符串

    返回值

    返回值类型

    解释

    bool

    成功返回true,否则返回false

    例子

    log.info("fdb", fskv.del("wendal"))
    

    fskv.clear()

    清空整个kv数据库

    参数

    返回值

    返回值类型

    解释

    bool

    成功返回true,否则返回false

    例子

    -- 清空
    fskv.clear()
    

    fskv.iter()

    kv数据库迭代器

    参数

    返回值

    返回值类型

    解释

    userdata

    成功返回迭代器指针,否则返回nil

    例子

    -- 清空
    local iter = fskv.iter()
    if iter then
        while 1 do
            local k = fskv.next(iter)
            if not k then
                break
            end
            log.info("fdb", k, "value", fskv.kv_get(k))
        end
    end
    

    fskv.iter(iter)

    kv迭代器获取下一个key

    参数

    传入值类型

    解释

    userdata

    fskv.iter()返回的指针

    返回值

    返回值类型

    解释

    string

    成功返回字符串key值, 否则返回nil

    例子

    -- 清空
    local iter = fskv.iter()
    if iter then
        while 1 do
            local k = fskv.next(iter)
            if not k then
                break
            end
            log.info("fskv", k, "value", fskv.get(k))
        end
    end
    

    fskv.status()

    获取kv数据库状态

    参数

    返回值

    返回值类型

    解释

    int

    已使用的空间,单位字节

    int

    总可用空间, 单位字节

    int

    总kv键值对数量, 单位个

    例子

    local used, total,kv_count = fskv.status()
    log.info("fdb", "kv", used,total,kv_count)
  • 相关阅读:
    该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定
    Android Graphics 显示系统 - 如何模拟多(物理)显示屏?
    【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)
    Proteus中单片机IO口外接LED输出低电平时,引脚却一直保持高电平的问题(已解决)
    程序员地理系列知识点总结
    《低代码指南》——维格云小程序开发简介
    Java 第二阶段提升编程能力【IO流】
    java基础详解1----package引入&CLASSPATH
    二、初识FreeRTOS之FreeRTOS入门
    day01:数据库DDL
  • 原文地址:https://blog.csdn.net/l531798151/article/details/133657835