跳到主要内容
版本:v3

Redis存储适配器

通过redis存储数据,支持分布式集群。使用ioredis实现。

Tips

仅 alova 3.0+ 支持

安装

# npm
npm install alova @alova/storage-redis --save
# yarn
yarn add alova @alova/storage-redis
# npm
pnpm install alova @alova/storage-redis

使用

基础用法

创建RedisStorageAdapter并指定redis服务器连接信息。

const { createAlova } = require('alova');
const RedisStorageAdapter = require('@alova/storage-redis');

const redisAdapter = new RedisStorageAdapter({
host: 'localhost',
port: '6379',
username: 'default',
password: 'my-top-secret',
db: 0
});
const alovaInstance = createAlova({
// ...
l2Cache: redisAdapter
});

构造函数参数与new Redis()时传入的参数一致,详情请参考ioredis#Redis options

可以通过redisAdapter.client访问Redis实例。

设置存储key前缀

默认情况下,存储key前缀为alova:,可以通过keyPrefix设置。

const redisAdapter = new RedisStorageAdapter({
host: 'localhost',
port: '6379',
username: 'default',
password: 'my-top-secret',
db: 0,

keyPrefix: 'my-app:'
});

设置redis集群

[v3.4.0+]可以通过nodes设置redis集群节点,options设置ioredis的配置项。

const redisAdapter = new RedisStorageAdapter({
nodes: [
{ host: 'localhost', port: 6379 },
{ host: 'localhost', port: 6380 },
{ host: 'localhost', port: 6381 }
]
options: {
// ...
}
});

构造函数参数的nodesoptions将会分别传入new Cluster(nodes, options),详情请参考ioredis#Cluster options

可以通过redisAdapter.client访问Cluster实例。

使用外部redis实例

如果你的项目中已经存在ioredis实例,并希望使用它进行操作,可以通过client设置,支持Redis实例和Cluster实例。

const redisAdapter = new RedisStorageAdapter({
client: originalRedisClient
});

作为原子锁

[v3.4.0+]此存储适配器内置了基于@sesamecare-oss/redlock的进程锁,可与atomize策略一起使用,确保多进程环境中的请求原子性。详情请参考原子化请求

你可以设置@sesamecare-oss/redlock的配置项,具体参数请参考@sesamecare-oss/redlock#configuration

const redisAdapter = new RedisStorageAdapter({
// ...
redlockOptions: {
retryCount: 5 // 重试次数
// ...
}
});

过滤节点

redisAdapter.client为Redis实例时,此实例会作为@sesamecare-oss/redlock的节点,当redisAdapter.client为Cluster实例时,Cluster的所有节点默认会作为@sesamecare-oss/redlock的节点,你可以通过redlockFilter过滤需要的节点。

const redisAdapter = new RedisStorageAdapter({
// ...
// redisNode为Redis实例
redlockFilter: redisNode => {
// 过滤掉某个节点
return redisNode.options.port !== 6380;
}
});

设置redis锁的TTL

你可以通过redlockTTL设置redis锁的TTL,默认值为5000ms

const redisAdapter = new RedisStorageAdapter({
// ...
redlockTTL: 10000 // 设置锁的TTL为10秒
});