mysql - 将 MySQL 中的主键映射到 Redis

标签 mysql redis predis

我有一个 mysql 数据库,其中一个表具有以下属性: p1、p2、p3、c1、c2、c3,其中 p1、p2 和 p3 是主键。现在的问题是,我想以一种“节省时间”的方式将其映射到 Redis,如果可能的话,还要“节省空间”。 是这样想的:

场景 1: p1 -​​> HashMap (c1, c2, c3)
p2 -> p1
p3 -> p1

但在这里,我需要两次操作(66% 的概率)来获取所需的 c1、c2、c3 值。 p1(两次)占用的额外空间也是一个问题。

场景 2: p1:p2:p3 -> HashMap(c1, c2, c3)

但这里的问题是我无法在不知道所有主键的情况下获取 HashMap 。

简而言之,我的目标是以时间有效的方式获取 c1、c2 和 c3,使用 p1、p2 或 p3 中的任何一个(不是一起)。

最佳答案

采用第一种方法。的确,它会在内存方面花费更多,是的,在 66% 的情况下你必须执行两个操作(假设要获取的 p1、p2、p3 值的均匀分布)但是替代方案,就像你有指出的是,键的名称中包含所有 p。替代方案虽然在技术上可行(例如,您可以从数据库中获取所有 key [当然使用 SCAN,而不是 KEYS] 并在应用程序中过滤它们以根据您拥有的 p 找到您需要的 key ),但要多得多在操作/性能方面昂贵。

换句话说,这是 Space-Time tradeoff 的经典案例.

关于mysql - 将 MySQL 中的主键映射到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599690/

相关文章:

MySQL - 如果任何行中都不存在另一表中的值,则删除一个表中的行

redis - Resque/Redis 的套接字权限问题

redis - 带有redis的 celery - unix超时

php - 为什么我的 Predis 客户端的 PHPUnit 模拟不符合我的预期?

php - Predis 空批量回复

php - Predis 使用 PHP : How to get which Redis node ( host ) that holds a particular key?

MySQL触发器以某种方式导致提交

mysql - SQL中的SQL连接和子查询

mysql - 测试前如何从开发数据库加载数据?

sql-server-2008 - SQL Server 在线程中触发并运行 CLR 方法