当前位置: 首页 > 知识库问答 >
问题:

我应该如何在Redis中存储多个会话?

云和同
2023-03-14

共有1个答案

杜海
2023-03-14

您可以对此使用排序集

密钥:用户: :tokens

成员名为令牌,成员分数为其过期时间戳

获取具有有效时间zRangeByScore +inf 的令牌

删除所有令牌del

清理代码示例

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
}
 类似资料:
  • 问题内容: 我正在使用ExpressJS,Mongodb(Mogoose)构建应用程序。应用程序包含访问用户之前必须对其进行身份验证的路由。 目前,我已经编写了一个快速的中间件来做同样的事情。在这里,借助JWT令牌,我正在进行mongodb查询以检查用户是否已通过身份验证。但是感觉这可能会在我的数据库上增加不必要的请求负载。 我应该针对此特定任务集成redis吗? 会改善API性能吗?还是应该继续

  • 我在一个在线订餐应用程序中使用Redux和React。 当用户从购物篮中删除一个商品时,我需要向服务器发出一个XHR请求,以计算购物篮的新总价。当这个XHR完成时,我更新redux存储并呈现新的价格。我使用Redux thunk来管理这个异步操作。 有一个问题是,用户连续快速地从购物篮中取出两件物品。用户删除第一项,我启动XHR以获得新价格。然后,用户单击一个按钮以删除第二个项目,并启动第二个XH

  • 我自己想了一个实现,但觉得有点过头了,而且笨重? 我将使用用户ID作为密钥 Id然后在value部分中存储JWT令牌的hashmap。 示例 null null 这意味着在每个对受保护的apiendpoint的请求中,我必须按userId进行搜索,反序列化hashmap,循环遍历hashmap并尝试匹配在头中发送的JWT。这看起来像是一个很大的工作?还有别的办法吗? 如果一个用户想要注销,那么这个

  • 问题内容: 我正在将node.js的猫鼬模式与express-validator(具有node-validator santiziations和Validator)一起使用。 存储商品价格的好方法是什么? 我目前有 价格是可选的,所以我有: express-validator给了我isNumeric(允许0填充),isDecimal和isInt …我宁愿只是将其转换为十进制并去除所有字符,所以我总

  • 数据是非常小的,就像水果的列表,不会经常改变,也只有一个服务将使用这个数据和服务到其他服务,请提到您的方法的优点和缺点。

  • 问题内容: 我有一些产品数据需要在Redis缓存中存储多个版本。数据是JSON序列化的。获取纯(基本)数据的过程非常昂贵,将其自定义为不同版本的过程也很昂贵,因此我想缓存所有版本以尽可能进行优化。假设自定义基于单个参数,我可以将该参数用作缓存键的一部分。 我计划用来检索产品数据的过程是这样的: 一切都很好,但是我现在正在尝试找出在基础数据源发生更改时使缓存数据无效的最佳方法。如果基本产品信息发生变