在 Node.js 中访问缓存

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

您可以使用 apigee-access 模块从 Node.js 应用内访问边缘分布式缓存。该模块包含用于获取缓存以及 putting获取移除数据的方法。

借助 Apigee Edge 分布式缓存,您可以存储字符串或其他数据。与大多数缓存一样,它也是最近最少使用且具有最大大小的缓存。在 Apigee Edge 中,缓存分布在执行 Node.js 应用的所有节点中。您可以通过 Apigee Edge API 管理缓存。您可以使用 API 手动创建缓存资源,也可以使用默认资源。如需了解如何在 Apigee Edge 上进行缓存,请参阅 Edge 中的持久性工具。如需详细了解分布式缓存,请参阅示例:通用缓存

有关 apigee-access 模块及其其他功能的介绍,请参阅使用 apigee-access 模块

方法


(1) getCache

var cache = apigee.getCache(cacheName);

查找已命名的缓存,并在必要时创建该缓存。生成的缓存使用一组适合大多数情况的预定义配置参数。

参数:

cacheName - 一个字符串,缓存的名称。(不是缓存资源的名称)。

返回

缓存对象。

示例

var apigee = require('apigee-access');
var cache = apigee.getCache('cache');

(2) getCache

var customCache = apigee.getCache(cacheName, options );

访问配置对象中指定的自定义缓存资源。如需了解如何创建缓存资源,请参阅创建和修改环境缓存

参数:

cacheName - 一个字符串,自定义缓存的名称。(不是缓存资源的名称)

options - 一个配置对象。该对象可以为空,也可以包含以下可选参数:

  • resource:存储缓存数据的 Apigee“缓存资源”的名称。缓存资源用于微调内存分配和其他缓存参数。如果未指定,系统将使用默认资源。如果缓存资源不存在,则该方法会抛出错误。

  • scope:指定是否为缓存条目添加前缀以防止冲突。有效值为 globalapplicationexclusive

    • global:所有 Node.js 应用都可以在同一 Apigee“环境”中看到所有缓存条目。

    • application:属于同一 Apigee Edge 应用的所有 Node.js 缓存都可以看到所有缓存条目。

    • exclusive:(默认)缓存条目只能由同一应用中的具有相同名称的 Node.js 缓存看到。这是默认值。

  • prefix:如果缓存键名称包含前缀(如填充缓存政策使用缓存键中所述),请使用此参数进行指定。Edge 会自动为前缀名称添加双下划线后缀。因此,如果使用前缀“UserToken”创建缓存键,则在此处指定的前缀为“UserToken__”。

  • defaultTtl:指定缓存条目的默认存留时间(以秒为单位)。如果未指定,将使用缓存资源中的默认 TTL。

  • timeout:从分布式缓存中提取结果的等待时间(以秒为单位)。默认值 30 秒。对延迟敏感的应用可能希望缩短这一时间,以防在缓存基础架构过载时响应缓慢。

返回

自定义缓存对象。

示例

var apigee = require('apigee-access');
var customCache = apigee.getCache('doesNotMatter',
  { resource: 'MyCustomResource', scope: 'global', prefix: 'UserToken'} );
customCache.put("myCacheKey", "xyz");

这适用于按如下方式配置的 LookupCache 政策:

<LookupCache name="Lookup-Cache-1">
  <CacheKey>
    <Prefix>UserToken</prefix>    
    <KeyFragment>myCacheKey</KeyFragment>
  </CacheKey>
  <CacheResource>MyCustomResource</CacheResource>
  <Scope>Global</Scope>
  <AssignTo>contextVariable</AssignTo>
</LookupCache>

放置

cache.put('key', data, ttl, function(error));

将数据放入缓存。

参数:

  • key:(必需)用于唯一标识缓存中的项的字符串。缓存键的大小限制为 2 KB。

  • data:(必需)表示要缓存的数据的字符串、缓冲区或对象。任何其他数据类型都将导致错误。为方便起见,将使用“JSON.stringify”将对象转换为字符串。

  • ttl:(可选)数据在缓存中保留的最长时间(以秒为单位)。如果未指定,系统将使用默认 TTL。

  • callback:(可选)如果指定,则表示当数据安全地存储在缓存中后将调用的函数。如果存在插入错误,系统将以 Error 对象作为第一个参数来调用该方法,否则调用时不使用任何参数。

示例

var apigee = require('apigee-access');
var cache = apigee.getCache();
// Insert a string into cache using the default TTL
cache.put('key1', 'Buenos dias, Mundo!');
// Insert a string into cache using a TTL of 120 seconds
cache.put('key2', 'Hello, World!', 120);
// Insert a string with the default TTL, and get notified when the insert is complete
cache.put('key3', 'Ciao, Mondo!', function(error) {
  // "error" will be falsy unless there was an error on insert
});
// Insert a string with a TTL of 600 seconds, and get notified when the insert is complete
cache.put('key4', 'Hallo Wereld!', 600, function(error) {
  // "error" will be falsy unless there was an error on insert
});

获取

cache.get('key', function(error, data));

从缓存中检索数据。

参数:

  • key(必需):用于唯一标识缓存中的项的字符串。

    对于根据 Apigee Edge 政策(例如填充缓存政策)保存到缓存的缓存条目,您需要通过根据政策为条目创建键的特定方式进行推断来构建缓存键。为此,您需要了解此政策的配置方式。虽然使用缓存键介绍了政策如何创建缓存键,但请注意,您不应指定与范围相关的字符串值;在 Node.js 的调用中,范围已经是上下文的一部分。

  • callback(必需):在数据可用时调用的函数。如果有缓存的数据,则会在第二个参数中返回。

    • error - Error 对象。如果从缓存中检索时出错,则将在此处设置 Error 对象。否则,此参数将设置为“undefined”。

    • data - 检索到的数据(如果有)。它将是以下四个值之一:

      • 如果插入了字符串,则它将是字符串。
      • 如果插入了一个 Buffer,则它是一个 Buffer。
      • 如果插入了一个对象,它将是一个字符串,其中包含“JSON.stringify”生成的对象的 JSON 版本。
      • 如果找不到任何结果,该值将为“undefined”。

示例

var apigee = require('apigee-access');
var cache = apigee.getCache();
cache.get('key', function(error, data) {
  // If there was an error, then "error" will be set.
  // If error is falsy, "data" is the item that was retrieved:
  //   - undefined, in the case of cache miss, or
  //   - a Buffer, or
  //   - a String
});

移除

cache.remove('key', function(error));

使缓存内容失效。一个键失效后,后续的 get() 请求将返回“undefined”,除非插入了其他值。

参数:

  • key(必需):一个字符串,用于唯一标识缓存中要使之失效的项。

    对于根据 Apigee Edge 政策(例如填充缓存政策)保存到缓存的缓存条目,您需要通过根据政策为条目创建键的特定方式进行推断来构建缓存键。为此,您需要了解此政策的配置方式。虽然使用缓存键介绍了政策如何创建缓存键,但请注意,您不应指定与范围相关的字符串值;在 Node.js 的调用中,范围已经是上下文的一部分。

  • callback(必需):如果发生错误,系统将使用 Error 对象作为第一个参数来调用回调函数。

示例

var apigee = require('apigee-access');
var cache = apigee.getCache();
cache.remove('key', function(error) {
});