如何解决如何在Redis中存储多个会话?
我是Redis的新手。我想将用户ID /会话令牌对存储在Redis上。但是,一个用户可以有多个会话令牌。例如,您可能认为,当用户更改密码时,我要删除该用户的所有会话对。 此外,每个会话对都必须具有到期日期。推荐的方法不应破坏这一点。
如何最有效,最正确地执行此操作?
谢谢。
解决方法
您可以为此使用排序集
key
:user:<id>:tokens
成员名称是令牌,成员分数是其过期时间戳记
-
添加新令牌
zadd <key> <token> <expire_timestamp>
-
以获得用户
zrange user:1:tokens 0 -1
的所有令牌。如果需要过期时间戳记和令牌,请添加WITHSCORES
。 -
以获取具有有效时间
的令牌zrangebyscore <key> <current_ts> +inf
-
删除所有令牌
del <key>
清除代码示例
async function getTokens(userId) {
const lastCleanupTsKey = `user:${userId}:tokens:cleants`
const tokenKey = `user:${userId}:tokens`
cosnt [[lastCleanTimestamp,err1],[size,err2] = await redis.pipeline()
.get(lastCleanupTsKey)
.zcount(tokenKey)
.exec()
if (!lastCleanTimestamp) {
await redis.set(lastCleanupTsKey,<current_timestamp>)
}
if (size !== null && size > CLEANUP_SIZE_THRES_HOLD) { // you can also check if lastCleanup is more than 5 minutes for example here.
await redis.ZREMRANGEBYSCORE(tokenKey,'-inf',<current_timestamp>)
}
// do your logic
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。