Redis存储适配器
通过redis存储数据,支持分布式集群。使用ioredis实现。
仅 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: {
// ...
}
});
构造函数参数的nodes和options将会分别传入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秒
});
alova使用调查,花3分钟填下,求你了!
alova用在项目里了吗?快来告诉我