如何在Redis中分析约500K个密钥的最佳方法?
我有一个处理针对逻辑对象的读操作的数据库系统,这些对象由OID(对象标识符)标识。例如,1.2.4.3.544。有由GUID标识的用户。API从数据库中获取结果并将它们放入Redis中。密钥示例为
SomePrefix_<oid>1.2.4.3.544</oid>_somedetails_<user>1f0c6cfe-ee9d-472c-b320-190df55f9527</user>
系统中大约有数百个唯一的OID和约一百个注册用户。还可以为匿名请求设置没有用户部分的密钥。密钥数量可以从80K到..我想是500K。 我需要向UI提供按OID和按用户的统计数据,并实现按OID删除的可能性(对于用户是相同的)。所以这项任务被分成两个部分。我最初实施的第一个版本失败了——我在c#应用程序中使用了.Keys("\ * ")方法,它会转换为Redis扫描*以获取所有键,以便将它们传递到应用程序中运行,收集和区分OID /用户,并在UI中显示它们。这个操作花费太多时间提取所有键到应用程序中,所以我换了一种方法——在每次保存/删除密钥时,我会增加/减少存储在Redis中的另一个DB中的计数器。计数器只是有键的整数。这几乎可以,但是我得到了设置每个缓存请求的TTL的要求,所以我面临着一个问题,如何存储/跟踪我的统计信息,以使其与实际存储的密钥保持最新?我认为的选项
A)运行LUA脚本来扫描所有密钥并获取所有唯一OIDS和唯一用户以及计数,并将它们返回给应用程序。对于删除选项-在LUA脚本内运行SCAN并删除与模式匹配的所有密钥。利弊-不需要单独的统计跟踪。缺点-需要每次调用都扫描所有键。我有一个用于通过我的应用程序请求的显示统计信息的Zabbix仪表板,可能每秒扫描键会非常痛苦。这些是缺点。
B)在单独的Redis DB中,使用键作为OID(或对于用户,键作为GUID)存储键和集合,集合内存储缓存请求的键。但是当缓存请求的键过期时,我该如何删除它们?我可以以某种方式将存储在集合中的值与另一个DB中的键关联起来,并在键过期时使该值从集合中消失吗?
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?