假设我有一个很大的(MySQL-)表(>10k 行),其中包含 id -> 字符串。我可以将它们全部放入一个数组中并缓存该数组。但问题是:如何高效地缓存?
a) 将其缓存为一个大项目。所以我会执行
$redis->set("array", $array);
非常简短且简单。但对于我需要的每个条目,我都必须获取整个内容。绝对低效。
b) 缓存每个条目本身:
foreach( $array as $id => $str )
$redis->set( "array:$id", $str );
使用这种方式,我将在 Redis 中拥有超过 10k 的条目。这感觉不太好。如果我有 10 个这样的表,我将有 100k 个条目....
那么你的建议是什么?如何缓存大数组?
最佳答案
只有当您计划始终将其作为一个整体进行检索时,缓存大数组才有用。然而,缓存失效将是一个非常“繁重”的操作,因为任何时候当你更改某些内容时,你都必须使整个数组失效并从数据库中重新读取它。
10k对于redis来说根本不算多。您可以毫无问题地拥有数百万个条目。
我会选择 b) 版本。单独缓存每个条目。应用程序端更易于维护、更简单的应用程序代码和更小的内存占用,当您想要扩展应用程序时,这一点变得越来越重要。
关于PHP:如何在redis中缓存大表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226249/