【问题标题】:Looking for advice on effectively using REDIS Cache in a large application寻找在大型应用程序中有效使用 REDIS Cache 的建议
【发布时间】:2021-10-26 04:41:45
【问题描述】:

我们有一个用例,我们必须在 REDIS 中存储一些用户 ID (testUserId) 并将它们临时标记为测试用户,并将 testingMode 标志标记为活动/非活动。然后我们必须在 API 中检查 testingMode 是否处于活动状态,然后传递的用户 ID 是否是测试用户。

到目前为止,我所做的是存储一个标志和一个包含用户列表的数组。

这个实现的问题是,在检查时,我们必须从 REDIS 获取整个数据并将其转换为 List(array) 并查看 testUserId 是否存在。有些人对此无效表示担忧。

有没有更好的方法来做到这一点?

我曾想过将testUserId 存储为键,将testingMode 标志存储为值,但这样会创建太多行。这是最好的方法还是有更好的方法?

【问题讨论】:

  • 简单更好,不用担心 Redis 中有很多键。对于 Redis,您的限制是您的记忆,这对所有内容(值)都有效,而不仅仅是键。在您的用例中,我将简单地以testuser:666 格式存储密钥(具有任何值)(在此示例中,666 是您的内部用户标识符)。确定某个用户是否是测试用户的业务逻辑将仅仅是密钥的存在。此外,Redis 中没有“行”的概念。无论您有多少条记录,对特定记录的访问(通过密钥)都是在线性时间内完成的。
  • @nitrin0 我相信您的意思是访问是在恒定时间内完成的,而不是线性的。请参阅redis.io/topics/data-types 进行验证。
  • @btilly 应该使用 0-notation :)
  • 与@btilly 建议和使用的套装一起去

标签: algorithm caching data-structures redis hashtable


【解决方案1】:

我建议存储一组测试用户,并使用https://redis.io/commands/exists 来查看您当前的用户是否是测试用户。

这只需要查找测试用户。由于预计您的用户中很少有人是测试用户,因此它存储的数据非常少。

请注意,您应该密切注意 Redis 的空间使用情况。它运行得非常好......直到你的数据变得对于 RAM 来说太大了,然后它的表现就很糟糕。所以尽量避免它不必要地变得太大!

【讨论】:

  • 谢谢。我分别使用集合和存储 userId 并分别标记来做到这一点。我还添加了第二层缓存来保存标志。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多