data-structures - 是否有更好的数据结构可用于在 Redis 中索引这些数据?

标签 data-structures redis

我正在使用 Redis 在哈希中存储一堆“Foos”:

foo:<id> => {
    name = 'whatever',
    status = 'incomplete|complete|removed',
    user = <user_id>,
    ...
}

我想设置一个索引,以便为特定用户提取具有特定状态的 Foos。我想出的最好的办法是使用这样命名的集合:

foo:user:<user_id>:status:<status> => [ <foo_id>, <foo_id2>, ... ]

但这看起来很笨拙,我必须确保跟踪旧状态并在更改状态时将其从一组中删除,以保持数据一致。我可以在这里使用更聪明的结构吗?

最佳答案

我认为您考虑存储这些东西的方式很好。您可以随时更改 foo:user:<user_id>:status:<status>名字,如果你觉得它太长,但这个想法是有道理的。我要添加的一件事是你应该制作一个简短的 lua 函数,通过从 foo 获取旧状态,将 foo 的状态更新为新状态,然后更新旧状态集和新状态来为你更新状态' 放。这些操作每个都是 O(1),所以它不会很昂贵(尤其是因为它是 Lua),并且由于所有内容都将由一个小脚本管理,因此您无需担心每次都在代码中完成所有操作.

关于data-structures - 是否有更好的数据结构可用于在 Redis 中索引这些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217779/

相关文章:

java - 布隆过滤器实现

string - 从三角不等式理解 BK 树 : How do we derive the (d-n, d+n) 范围?

c++ - QMap 和 QPair,C++,Qt

javascript - 如何使用具有不同跳过和限制值的相同查询对搜索结果进行分页

node.js - 使用 Redis 异步等待函数存储 token 不起作用。 async await 是否适用于 Redis?

java - PriorityQueue addAll() 的复杂度

arrays - 如何使用笛卡尔树将数组从索引 i 多次反转到索引 j?

redis - 在不重启的情况下更改 Redis 服务器的 'bind' 配置

asp.net-core - Microsoft.Extensions.Caching.Redis 和 Microsoft.Extensions.Caching.StackExchangeRedis.Redis 缓存之间的区别

Redis与Optimistic并发控制: is it possible?