跳到主要内容

SQLite缓存

SQLite缓存是JitStorage框架提供的轻量级文件缓存解决方案,基于diskcache库和SQLite数据库实现高性能的键值对缓存服务。它负责提供零配置部署、跨平台兼容和SQL查询支持,无需额外的数据库服务器即可实现完整的缓存功能。

SQLite缓存元素分层结构为Meta(caches.Meta) → Type(caches.SqliteType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建SQLite缓存实例元素。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的caches.SqliteType元素,以实现自己的封装。

快速开始

创建实例元素

目录结构

推荐目录结构
myapp/
└── caches/
└── DefaultCache/
├── e.json
└── DefaultCache.json

e.json文件

元素声明文件
{
"backendBundleEntry": ".",
"title": "默认缓存",
"type": "caches.SqliteType"
}

业务配置文件

DefaultCache.json
{
"directory": "appData/caches/DefaultCache/sqlite.db"
}

调用示例

基本使用示例
# 获取缓存实例
cache = app.getElement('caches.DefaultCache')

# 写入缓存
cache.set('user:123', 'John Doe', 3600)

# 读取缓存
user_name = cache.get('user:123')

# 删除缓存
cache.delete('user:123')

元素配置

e.json配置

属性类型必填说明
backendBundleEntrystr后端入口路径,固定为"."
titlestr缓存元素的显示标题
typestr固定为"caches.SqliteType"

业务配置文件配置

属性类型必填说明
directorystrSQLite数据库文件的存储路径,支持相对路径和绝对路径

路径规则

  • 相对路径:相对于应用根目录,如 appData/caches/cache.db
  • 绝对路径:使用完整文件系统路径,如 /var/cache/myapp/cache.db

方法

get

从缓存中获取字符串值。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名

返回值

str - 缓存的字符串值,不存在时返回None

使用示例

获取缓存值
cache = app.getElement('caches.DefaultCache')
value = cache.get('config:theme')
if value:
print(f"当前主题: {value}")

set

写入数据到缓存中,支持字符串、数字、列表、字典等多种数据类型。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名
string-str/list/dict缓存值,自动序列化复杂数据类型
tsNumericint过期时间(秒),None表示永不过期

返回值

bool - 操作成功返回True,失败返回False

使用示例

设置不同类型的缓存值
cache = app.getElement('caches.DefaultCache')

# 字符串缓存
cache.set('user:name', 'Alice', 3600)

# 字典缓存
user_data = {'id': 123, 'name': 'Alice', 'role': 'admin'}
cache.set('user:data:123', user_data, 7200)

# 列表缓存
cache.set('recent:orders', [1001, 1002, 1003], 1800)

delete

删除指定的缓存项。

参数详解

参数名类型对应原生类型必填说明
nameStextstr要删除的缓存键名

返回值

bool - 删除成功返回True,键不存在也返回True

使用示例

删除缓存
cache = app.getElement('caches.DefaultCache')
success = cache.delete('temp:session:abc123')
print(f"删除操作: {'成功' if success else '失败'}")

expire

更新缓存项的过期时间。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名
tsNumericint新的过期时间(秒)

返回值

bool - 更新成功返回True,键不存在返回False

使用示例

延长缓存时间
cache = app.getElement('caches.DefaultCache')
# 将缓存延长到1小时后过期
cache.expire('session:user123', 3600)

exists

检查缓存键是否存在。

参数详解

参数名类型对应原生类型必填说明
nameStextstr要检查的缓存键名

返回值

bool - 存在返回True,不存在返回False

使用示例

检查缓存存在性
cache = app.getElement('caches.DefaultCache')
if cache.exists('user:permission:123'):
permissions = cache.get('user:permission:123')
else:
# 从数据库重新加载权限数据
permissions = load_user_permissions(123)
cache.set('user:permission:123', permissions, 1800)

incr

原子性地增加数值类型的缓存值。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名
amountNumericint增加的数值,默认为1

返回值

int - 增加后的新值

使用示例

计数器操作
cache = app.getElement('caches.DefaultCache')

# 页面访问计数
views = cache.incr('page:views:home')
print(f"首页访问次数: {views}")

# 批量增加
cache.incr('api:calls:today', 10)

keys

获取匹配指定模式的所有缓存键。

参数详解

参数名类型对应原生类型必填说明
patternStextstr匹配模式,支持通配符,默认"*"

返回值

generator - 匹配的键名生成器

使用示例

批量操作缓存键
cache = app.getElement('caches.DefaultCache')

# 获取所有用户缓存键
user_keys = list(cache.keys('user:*'))
print(f"用户缓存数量: {len(user_keys)}")

# 清理临时缓存
temp_keys = cache.keys('temp:*')
for key in temp_keys:
cache.delete(key)

getNumeric

获取数值类型的缓存值。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名

返回值

int - 数值结果,不存在时返回0

使用示例

获取数值缓存
cache = app.getElement('caches.DefaultCache')
count = cache.getNumeric('daily:login:count')
print(f"今日登录人数: {count}")

setNumeric

设置数值类型的缓存值。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名
nNumericint数值,默认为0
tsNumericint过期时间(秒)

返回值

bool - 设置成功返回True

使用示例

设置数值缓存
cache = app.getElement('caches.DefaultCache')
cache.setNumeric('system:status', 1, 300) # 5分钟后过期

属性

暂无

高级特性

键名前缀机制

SQLite缓存自动为所有键名添加应用ID前缀,确保不同应用间的缓存隔离。

键名前缀示例
# 实际存储的键名格式: {appId}:{name}
cache = app.getElement('caches.DefaultCache')
cache.set('user:123', 'data') # 实际存储为 "myapp:user:123"

数据序列化支持

自动处理复杂数据类型的序列化和反序列化。

复杂数据类型缓存
cache = app.getElement('caches.DefaultCache')

# 嵌套数据结构
complex_data = {
'users': [
{'id': 1, 'name': 'Alice', 'roles': ['admin', 'user']},
{'id': 2, 'name': 'Bob', 'roles': ['user']}
],
'metadata': {
'total': 2,
'updated_at': '2024-01-15T10:30:00Z'
}
}

cache.set('report:users', complex_data, 3600)
retrieved_data = cache.get('report:users') # 自动反序列化为原始数据结构

缓存路径自动管理

系统会自动创建缓存目录并初始化SQLite数据库文件。

多环境缓存配置
# 开发环境
{
"directory": "appData/caches/dev/cache.db"
}

# 生产环境
{
"directory": "/var/cache/myapp/prod.db"
}