Skip to main content

stacks-cache

Use when implementing caching in Stacks - memory cache, Redis cache, cache-aside pattern (getOrSet), TTL management, cache stats, or cache configuration. Covers @stacksjs/cache and config/cache.ts.

来源信息

仓库
stacksjs/stacks
最近来源活动
2026年8月29日 17:05
检测到的 SKILL.md 语言
英语
星标
631
分支
20

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
stacks-cache
description
Use when implementing caching in Stacks - memory cache, Redis cache, cache-aside pattern (getOrSet), TTL management, cache stats, or cache configuration. Covers @stacksjs/cache and config/cache.ts.
license
MIT
compatibility
Bun >= 1.3.0, TypeScript
allowed-tools
Read Edit Write Bash Grep Glob
# Stacks Cache ## Key Paths - Core package: `storage/framework/core/cache/src/` - Configuration: `config/cache.ts` - Cache storage: `storage/framework/cache/` ## Cache API (StacksCache) ```typescript import { cache, memory } from '@stacksjs/cache' // Get/Set await cache.get<string>('key') // T | undefined await cache.set('key', 'value', 3600) // TTL in seconds await cache.setForever('key', 'value') // no expiry await cache.mget<string>(['key1', 'key2']) // T[] await cache.mset([{ key: 'k1', value: 'v1', ttl: 60 }, ...]) // Cache-aside pattern const value = await cache.getOrSet('expensive-key', async () => { return await computeExpensiveValue() }, 3600) // Delete await cache.del('key') await cache.del(['key1', 'key2']) await cache.deleteMany(['key1', 'key2']) await cache.remove('key') // Existence await cache.has('key') // boolean await cache.missing('key') // boolean // Take (get and delete) const value = await cache.take<string>('key') // TTL management await cache.getTtl('key') // remaining TTL await cache.ttl('key', 7200) // update TTL // Clear await cache.clear() await cache.flush() // Stats const stats = await cache.getStats() // { hits, misses, keys, size, hitRate } // Keys const keys = await cache.keys('user:*') // pattern matching // Cleanup await cache.close() await cache.disconnect() ``` ## Factory Functions ```typescript import { createMemoryCache, createRedisCache, createCache } from '@stacksjs/cache' const memCache = createMemoryCache({ stdTTL: 3600, // default TTL (seconds) checkPeriod: 120, // eviction check interval maxKeys: -1, // -1 = unlimited useClones: true, // clone on get/set prefix: 'app:' // key prefix }) const redisCache = createRedisCache({ url: 'redis://localhost:6379', // or individual: host: 'localhost', port: 6379, username: undefined, password: undefined, database: 0, tls: false, stdTTL: 3600, prefix: 'app:' }) // Auto-detect from config const cache = createCache('memory') const cache = createCache('redis', { host: 'localhost' }) ``` ## config/cache.ts ```typescript { driver: 'memory', // 'memory' | 'redis' prefix: 'stacks', ttl: 3600, // 1 hour default maxKeys: -1, // unlimited useClones: true, drivers: { redis: { host: 'localhost', port: 6379 }, memory: {} } } ``` ## Default Instance - `cache` — default memory cache (pre-configured) - `memory` — alias for `cache` ## Gotchas - Default driver is `memory` — data lost on restart - Redis driver requires a running Redis server - `getOrSet()` is the cache-aside pattern — fetches only on miss - `useClones: true` means mutations to retrieved objects don't affect cache - `take()` atomically gets and deletes — useful for one-time tokens - Cache stats track hits, misses, and hit rate — useful for tuning - `keys()` supports glob patterns for key listing - Framework caches (auto-imports, discovered packages) are in `storage/framework/cache/` - Use `buddy clean` or `buddy fresh` to clear framework caches
在 GitHub 查看