简介
在 Node.js 环境下,缓存是一个非常常见的问题。为了解决这个问题,开发者可以使用 cache-manager 这个 npm 包。cache-manager 是一个针对 Node.js 的通用缓存 API,支持支持多种缓存后端(比如 Memory、Redis、Memcached 等)。使用 cache-manager,可以方便地实现缓存的存取、失效、过期等操作。
安装
使用 npm 安装:
npm install cache-manager --save
快速开始
首先,我们需要引入并初始化一个 cache-manager 实例。
const cacheManager = require('cache-manager'); const memoryCache = cacheManager.caching({ store: 'memory', max: 100, ttl: 10 // 10 seconds });
上面的代码将初始化一个 memoryCache 实例,其使用的缓存后端为 Memory(即常驻内存),最多存储 100 个键值对,每个键值对的存活时间为 10 秒。
接着,我们可以用 set
方法向缓存中添加一个键值对。
memoryCache.set('myKey', { my: 'value' }, function(err) { if (err) throw err; console.log('value stored'); });
使用 get
方法可以获取一个键值对。
memoryCache.get('myKey', function(err, result) { if (err) throw err; console.log(result); });
以上示例只是个简单的使用示例。cache-manager 的更多用法和选项请参考官方文档。
多种缓存后端的支持
cache-manager 支持多种缓存后端。可以通过以下几种方式进行设置:
- 使用默认的 Memory 缓存后端
const cacheManager = require('cache-manager'); const memoryCache = cacheManager.caching({ store: 'memory' // 默认即为 'memory' });
- 使用 Redis 缓存后端
const cacheManager = require('cache-manager'); const redis = require('redis'); const redisClient = redis.createClient(6379, 'localhost'); const redisCache = cacheManager.caching({ store: redisStore, client: redisClient, ttl: 600 // 10 minutes });
- 使用 Memcached 缓存后端
const cacheManager = require('cache-manager'); const memcachedStore = require('cache-manager-memcached-store'); const memcachedCache = cacheManager.caching({ store: memcachedStore, servers: ['localhost:11211', 'localhost:11211'], ttl: 600 // 10 minutes });
TTL 的设置方法
在 cache-manager 中,存储的每个键值对都可以有不同的失效时间(即 TTL)。
这里介绍两种设置 TTL 的方法。
- 通过初始化选项中的
ttl
来设置缓存全局 TTL。
const cacheManager = require('cache-manager'); const memoryCache = cacheManager.caching({ store: 'memory', ttl: 60 // 全局 TTL 1 分钟 });
- 调用
set
方法传入ttl
参数来设置某个键值对的 TTL。
memoryCache.set('myKey', { my: 'value' }, { ttl: 60 }, function(err) { if (err) throw err; console.log('value stored'); });
键名的深度处理
在 cache-manager 中,键名可以是一个字符串或者它的一个数组。如果键名是一个数组,则 cache-manager 会对它进行“深度处理”。
例如:
-- -------------------- ---- ------- ----- ------------ - ------------------------- ----- ----------- - ---------------------- ------ -------- --- ---------------------- ------- ----- - ----- ------- -- ------------- - ---------------------- ------- ----- ------------- ------- - -------------------- --- ---展开代码
上面的代码中,键名为 ['my', 'user', '1']
,即表示一个深度为 3 的键名。cache-manager 会在内部将它拼接成一个字符串,作为存储的键名。
学习意义
cache-manager 是一个通用的缓存 API,实现了多种缓存后端的支持,可以方便快捷地进行缓存相关的操作。cache-manager 还提供了 TTL 和键名深度处理等特性,增强了其灵活性和可用性。在实际的 Node.js 项目中,cache-manager 可以为我们提供强大的缓存功能,优化系统性能。
示例代码
-- -------------------- ---- ------- ----- ------------ - ------------------------- ----- ----------- - ---------------------- ------ --------- ---- ----- ---- -- -- - ------ --- ------------------------ - --- ------- -- ------------- - -- ----- ----- ---- ------------------------ ------------- ------- - -------------------- --- ---展开代码
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/57900