r/crewai 帖子描述了异步 SQLite 缓存在 50 毫秒内返回 JSON 以进行重复查询。本教程在 Scavio 的类型化 JSON 输出上连接相同的模式。
前置条件
- Python 3.10+
- Scavio API 密钥
操作指南
步骤 1: 初始化缓存表
键=查询+表面;值=JSON;通过时间戳的 TTL。
Python
import sqlite3, time
conn = sqlite3.connect('cache.db')
conn.execute('CREATE TABLE IF NOT EXISTS cache(key TEXT PRIMARY KEY, payload TEXT, ts REAL)')步骤 2: 使用 TTL 进行缓存查找
默认 TTL:SERP 为 1 小时,静态页面为 6 小时。
Python
def get(key, ttl=3600):
row = conn.execute('SELECT payload, ts FROM cache WHERE key=?', (key,)).fetchone()
if row and time.time() - row[1] < ttl:
import json
return json.loads(row[0])
return None步骤 3: 缓存写入未命中
更新插入模式。
Python
def set_(key, payload):
import json
conn.execute('INSERT OR REPLACE INTO cache VALUES (?, ?, ?)', (key, json.dumps(payload), time.time()))
conn.commit()步骤 4: 结束 Scavio 搜索通话
缓存键包括端点+查询。
Python
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def search_cached(query, ttl=3600):
key = f'search::{query}'
cached = get(key, ttl)
if cached: return cached
data = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY}, json={'query': query}).json()
set_(key, data)
return data步骤 5: 衡量命中率
跟踪点击率以了解缓存是否得到了回报。
Python
stats = {'hits': 0, 'misses': 0}
# increment in get() when row exists, increment misses otherwise.Python 示例
Python
# Use search_cached('your query') as the drop-in replacement for direct Scavio calls.
result = search_cached('mcp server best practices 2026')
print(len(result.get('organic_results', [])))JavaScript 示例
JavaScript
// JS equivalent uses better-sqlite3 with the same key/value/ttl shape.预期输出
JSON
Cache hit returns in single-digit ms. Cache miss costs one Scavio query. For agents that repeat queries, hit rate of 40-70% is common.