具有数据源、用户和查询的 Redis 缓存

标签 redis stackexchange.redis

我开始使用 Redis 作为缓存,但我不确定我的应用程序的最佳结构。整体结构如下:

enter image description here

我需要做的一些事情是:

  1. 刷新数据源的所有内容(所有用户和所有查询)。
  2. 刷新特定用户的所有内容(例如:我需要删除用户 1 及其来自数据源 1 和数据源 2 的查询)。

树中列出的所有内容都是关键的一部分,用于访问针对特定数据源为用户运行查询的结果。我是 Redis 的新手,一直在使用哈希和集合之间来回切换。

选项 1(集):

DataSource1 => user1, user2, user3, user4
DataSource1:user1 => Query1, Query2, Query3
DataSource1:user1:Query1 => Results

刷新东西会很昂贵,因为我必须找到匹配 user1 或 DataSource1 的所有键。

部分选项 2(哈希):

users:user1 DataSource1:Query1 Results1 DataSource2:Query1 Results2

仍然不确定刷新数据源或用户在这里如何工作。

有没有人有其他想法/修改?

最佳答案

根据这些信息,我会有一个数据源集 -> 用户,以及一个用户散列 -> 查询。这样刷新用户只是删除哈希,刷新数据源(你可能做的更少)循环遍历集合并删除用户,然后删除数据源 ->用户集。

如果您使用集合的第一个选项,那么每次您刷新来自用户的查询时都会有更多的操作,但这实际上取决于访问的数据。

另外,取决于您为每个用户存储的查询数量,散列比集合更有效。

关于具有数据源、用户和查询的 Redis 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41600647/

相关文章:

python - django channels 仅在尝试使用 User_login 时出现连接错误

redis - redis集群需要AOF还是RDB?

c# - Redis C# - 在事务中使用 Incr 值

python - 当有大量数据要发送时,如何在 Redis 中实现事务?

javascript - 使用前缀/通配符删除 Redis/Node

django - Celery 将多个任务组合在一个设计中

azure - Azure 上的 StackExchange.Redis 抛出执行获取超时且无连接可用异常

c# - 如何使用 StackExchange.Redis 存储列表?

php - Redis session disable_locking 为真

c# - Redis 因内存不足而中止