PHP:如何在redis中缓存大表?

标签 php mysql caching redis

假设我有一个很大的(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/

相关文章:

Java Hibernate JPA 删除 OneToMany 关系和 MapKeyJoinColumn 关系对象

CLI 模式下的 PHP APC

sql - 优化mysql表?

php - 在 php 中显示 c++ 代码

mysql - 如何通过日常交易获得不同的用户

mysql - 连接三个表 MySQLWhere

Django缓存一个大列表

c - 如何增加 C 语言进程的 Windows 和/或 Linux 读取缓存大小

PHP - 显示表中最后 3 行 SQL 行(不起作用)

php - Laravel 5 Namespace 问题 fatal error 异常