跳到主要内容

内置缓存

内置缓存是平台提供的智能缓存解决方案,基于环境自适应机制实现开箱即用的缓存能力。它在桌面版环境下自动使用SQLite缓存,在服务器版环境下自动使用容器内置的Redis。内置缓存主要用于开发和测试阶段,为开发者提供无需配置的缓存服务。

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

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

快速开始

创建实例元素

目录结构

推荐目录结构
caches/
└── Default/
├── e.json
└── __init__.py

e.json文件

e.json配置示例
{
"title": "默认缓存",
"type": "caches.BuiltinsType"
}

调用示例

基础缓存操作
# 获取缓存实例
cache = app.getElement("caches.Default")

# 基础字符串操作
cache.set("user_token", "abc123", 3600) # 设置带过期时间
value = cache.get("user_token") # 获取值
cache.delete("user_token") # 删除键

# 数值操作
cache.setNumeric("view_count", 100) # 设置数值
count = cache.getNumeric("view_count") # 获取数值
new_count = cache.incr("view_count", 5) # 递增操作

# 键管理
exists = cache.exists("user_token") # 检查键是否存在
cache.expire("user_token", 1800) # 设置过期时间
keys = cache.keys("user_*") # 获取匹配的键列表

元素配置

e.json配置

配置项类型必填说明
titlestring缓存实例显示名称
typestring固定值"caches.BuiltinsType"

方法

get

从缓存中获取字符串值。

参数详解

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

返回值

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

使用示例

获取缓存值
cache = app.getElement("caches.Default")
token = cache.get("user_session_token")
if token:
print(f"用户令牌: {token}")
else:
print("令牌不存在或已过期")

set

将字符串数据写入缓存。

参数详解

参数名类型对应原生类型必填说明
nameStextstr缓存键名
stringStextstr要缓存的字符串值
tsNumericint过期时间(秒),不设置则永不过期

返回值

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

使用示例

设置缓存值
cache = app.getElement("caches.Default")

# 永久缓存
cache.set("app_config", '{"theme": "dark", "lang": "zh-CN"}')

# 带过期时间的缓存
cache.set("verification_code", "123456", 300) # 5分钟后过期

getNumeric

获取数值类型的缓存数据。

参数详解

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

返回值

int - 缓存的数值,键不存在时返回0

使用示例

获取数值
cache = app.getElement("caches.Default")
current_count = cache.getNumeric("daily_visits")
print(f"今日访问量: {current_count}")

setNumeric

设置数值类型的缓存数据。

参数详解

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

返回值

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

使用示例

设置数值
cache = app.getElement("caches.Default")

# 设置初始访问量
cache.setNumeric("page_views", 0)

# 设置带过期时间的计数器
cache.setNumeric("login_attempts", 0, 3600) # 1小时后重置

incr

递增数值缓存数据。

参数详解

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

返回值

int - 递增后的新值

使用示例

递增操作
cache = app.getElement("caches.Default")

# 增加1
new_views = cache.incr("page_views")

# 增加指定数量
bulk_views = cache.incr("page_views", 10)

print(f"当前浏览量: {new_views}")

delete

删除指定的缓存键。

参数详解

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

返回值

bool - 删除成功返回True,键不存在或删除失败返回False

使用示例

删除缓存
cache = app.getElement("caches.Default")

# 删除用户会话
success = cache.delete("user_session_123")
if success:
print("会话已清除")
else:
print("会话不存在或清除失败")

expire

为指定键设置过期时间。

参数详解

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

返回值

bool - 设置成功返回True,键不存在或设置失败返回False

使用示例

设置过期时间
cache = app.getElement("caches.Default")

# 为现有键设置过期时间
cache.set("temp_data", "some_value")
cache.expire("temp_data", 1800) # 30分钟后过期

exists

检查指定键是否存在。

参数详解

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

返回值

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

使用示例

检查键存在性
cache = app.getElement("caches.Default")

if cache.exists("user_preferences"):
preferences = cache.get("user_preferences")
print("找到用户偏好设置")
else:
print("用户偏好设置不存在,使用默认值")

keys

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

参数详解

参数名类型对应原生类型必填说明
patternStextstr匹配模式,默认为"*"(所有键)

返回值

iterator - 匹配的键名迭代器

使用示例

获取匹配键
cache = app.getElement("caches.Default")

# 获取所有用户会话键
session_keys = list(cache.keys("session_*"))
print(f"当前活跃会话数: {len(session_keys)}")

# 获取所有缓存键
all_keys = list(cache.keys())
print(f"缓存中总键数: {len(all_keys)}")

ping

检查缓存服务连接状态。

返回值

bool - 连接正常返回True,异常返回False

使用示例

检查连接状态
cache = app.getElement("caches.Default")

if cache.ping():
print("缓存服务连接正常")
# 执行缓存操作
cache.set("health_check", "ok")
else:
print("缓存服务连接异常,使用备用方案")

属性

暂无

高级特性

智能环境适配

内置缓存根据部署环境自动选择最适合的底层技术实现,无需手动配置。

配置示例和使用示例

环境自适应缓存
# 同样的代码在不同环境下使用不同的缓存技术
cache = app.getElement("caches.Default")

# 服务器环境:自动使用Redis缓存(高性能,支持分布式)
# 桌面环境:自动使用SQLite缓存(零配置,文件存储)

# 开发者无需关心底层实现差异
cache.set("business_data", json.dumps(data))
cached_data = cache.get("business_data")

应用级键前缀管理

内置缓存自动为所有键添加应用标识前缀,避免不同应用间的键冲突。

配置示例和使用示例

自动键前缀
# 应用ID为"MyApp"时的键管理
cache = app.getElement("caches.Default")

# 实际存储的键名会自动添加应用前缀
cache.set("user_config", "config_data")
# 实际键名: "MyApp:user_config"

# 获取时无需指定前缀,自动处理
config = cache.get("user_config")

# 键匹配也会自动处理前缀
user_keys = cache.keys("user_*")
# 实际匹配: "MyApp:user_*"

性能优化和容错处理

内置缓存针对不同环境进行了性能优化,并提供了完善的容错机制。

配置示例和使用示例

性能优化使用
cache = app.getElement("caches.Default")

# 批量操作时的性能优化
user_data = {
"profile": json.dumps(user_profile),
"preferences": json.dumps(user_prefs),
"permissions": json.dumps(user_perms)
}

# 高效的批量写入
for key, value in user_data.items():
cache.set(f"user_{user_id}_{key}", value, 7200)

# 容错处理示例
try:
result = cache.get("critical_data")
if result is None:
# 缓存未命中,从数据库获取
result = fetch_from_database()
cache.set("critical_data", result, 3600)
except Exception as e:
# 缓存服务异常,直接使用数据库
result = fetch_from_database()