高效查询 Redis

Posted

技术标签:

【中文标题】高效查询 Redis【英文标题】:Efficiently query Redis 【发布时间】:2022-01-04 05:04:55 【问题描述】:

我正在构建一个钱包应用程序,我正在使用 redis 来缓存用户的当前钱包余额。我被要求检索使用该应用程序的所有用户的全部余额的总和。我一直在寻找一种方法来查询 redis 中的这些数据,因为它已经缓存在那里。

我用来保存它们的密钥是user_id-current-balance。有没有办法让我获得所有以-current-balance 结尾的键,然后检索它们持有的所有数据?有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您可以获取所有匹配的键,然后在循环中对键的值求和。使用以下方法之一获取密钥:

KEYS pattern: O(N) 其中 N 是数据库中的键数

这通常不是一个高性能的解决方案(但如果你的数据库很小,你可以测试查询成本)。

SMEMBERS key: O(N) 其中 N 是集合基数

使用这种技术,您可以在 key 创建一个集合,然后添加每个持有用户余额的键(例如 user_id_1-current-balanceuser_id_2-current-balance 等)。

【讨论】:

相比KEYSSMEMBERSSCANSSCAN更好,尤其是对于大型数据集。

以上是关于高效查询 Redis的主要内容,如果未能解决你的问题,请参考以下文章

Redis5.0:这些场景下使用,高效还降低成本!

在Redis中进行分页排序查询

图文结合!Redis延迟队列golang高效实践

Redis实现分页和多条件模糊查询方案

五Redis源码数据结构之跳表skiplist

初学redis分页缓存方法实现