async setStore(accessToken, refreshToken, users) {
const expireResult = await this.cache.set(
`expire-${users.uid + accessToken}`,
users.uid,
'EX',
this.authConf.signOutAuto,
);
const atResult = await this.cache.set(
`at-${users.uid + accessToken}`,
JSON.stringify(users),
'EX',
this.authConf.sign.expires,
);
const rtResult = await this.cache.set(
`rt-${users.uid + refreshToken}`,
accessToken,
'EX',
this.authConf.resign.expires,
);
// For Session Limit
const sessionResult = await this.cache.rpush(
`session-${users.uid}`,
`${accessToken}/${refreshToken}`,
);
return expireResult === 'OK' && atResult === 'OK' && rtResult === 'OK' && sessionResult > 0;
}
async setStore(accessToken, refreshToken, users) {
const pipeline = this.cache.pipeline();
pipeline.set(
`expire-${users.uid + accessToken}`,
users.uid,
'EX',
this.authConf.signOutAuto,
);
pipeline.set(
`at-${users.uid + accessToken}`,
JSON.stringify(users),
'EX',
this.authConf.sign.expires,
);
pipeline.set(
`rt-${users.uid + refreshToken}`,
accessToken,
'EX',
this.authConf.resign.expires,
);
// For Session Limit
pipeline.rpush(
`session-${users.uid}`,
`${accessToken}/${refreshToken}`,
);
const results = await pipeline.exec();
// pipeline 처리 결과 기존 로직 대비 8ms -> 2ms로 성능 향상
const error = results.some((result) => !(result[1] === 'OK' || result[1] > 0));
return !error;
}
https://redis.io/docs/manual/pipelining/
https://dev.to/jilcimar/performance-no-redis-com-pipelining-2ocg