fontcolor_theme
Deepkit Broker

Broker 缓存

Deepkit Broker Cache 类是一个多级(2 级)缓存,它在内存中保留易失性的本地缓存,只有当数据不在缓存中、已过期或被失效时,才会从 broker 服务器获取数据。这样可以在数据获取时实现非常高的性能和低延迟。

该缓存被设计为类型安全,并会自动(使用 BSON)序列化和反序列化数据。它还支持缓存失效与清理。该实现确保在每个进程中,即使有多个请求同时尝试访问同一缓存项,缓存也只会重建一次。

数据不会持久化到服务器,仅保存在内存中。若服务器重启,所有数据都会丢失。

用法

请务必阅读入门页面,以了解如何正确设置应用,使 BrokerCache 在依赖注入容器中可用。

Deepkit Broker 中的缓存抽象与简单的键/值存储截然不同。它通过定义一个缓存名称和一个构建器函数工作:当缓存为空或过期时,会自动调用该函数。该构建器函数负责构建随后存储到缓存中的数据。

import { BrokerCache, BrokerCacheItem } from '@deepkit/broker';

const cache = new BrokerCache(adapter);

const cacheItem = cache.item('my-cache', async () => {
  // 当缓存为空或过期时会调用的构建器函数
  return 'hello world';
});


// 检查缓存是否过期或为空
await cacheItem.exists();

// 从缓存中获取数据,或从 broker 服务器获取。
// 如果缓存为空或过期,将调用构建器函数,
// 并返回结果,同时将结果发送到 broker 服务器。
const topUsers = await cacheItem.get();

// 使缓存失效,以便下一次调用 get() 时
// 再次调用构建器函数。
// 会清理本地缓存和服务器缓存。
await cacheItem.invalidate();

// 手动向缓存中设置数据
await cacheItem.set(xy);

在应用中的用法

一个在应用中使用 BrokerCache 的完整示例。 如果导入了 FrameworkModule,该类会自动在依赖注入容器中可用。 更多信息参见入门页面。

import { BrokerCache, BrokerCacheItem } from '@deepkit/broker';
import { FrameworkModule } from '@deepkit/framework';

// 最好将这些类型定义在一个公共文件中,以便复用
// 并将它们注入到你的服务中
type MyCacheItem = BrokerCacheItem<User[]>;

function createMyCache(cache: BrokerCache, database: Database) {
  return cache.item<User[]>('top-users', async () => {
    // 当缓存为空或过期时会调用的构建器函数
    return await database.query(User)
      .limit(10).orderBy('score').find();
  });
}

class Service {
  constructor(private cacheItem: MyCacheItem) {
  }

  async getTopUsers() {
    return await this.cacheItem.get();
  }
}

const app = new App({
  providers: [
    Service,
    Database,
    provide<MyCacheItem>(createMyCache),
  ],
  imports: [
    new FrameworkModule(),
  ],
});

const cacheItem = app.get<MyCacheItem>();

// 从缓存中获取数据,或从 broker 服务器获取
const topUsers = await cacheItem.get();
English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)