如何高效地使缓存失效?

我一直在尝试优化一个基于php和mysql的巨大软件的性能。我已经通过Apache缓存和MySQL索引进行了优化,但这还不够。 由于此软件中的所有表单都是从数据库中的配置动态构建和打印的,因此该软件发送大量SQL和执行许多连接,这会在很多并发用户连接时导致整个软件变慢(平均200-300个)。

由于我们无法更改代码,我已经发现mysql-proxy可以放置在应用服务器和数据库服务器之间,然后通过lua访问redismemchached来缓存查询结果。我的想法是缓存所有内容。然而,问题在于如何使缓存失效。一旦记录被更新,如何使所有已缓存的结果集失效?

其中一个想法是将SQL查询转换为md5,并将结果存储为集合的键。但是还要对查询进行分析,并将相同的md5键和对表的引用存储下来。例如:

查询:

select * from products left join users on products.user_id = user.id

缓存实例A

3b98ab273f45af78849db563df6598d1- {结果集}

缓存实例B

产品- 3b98ab273f45af78849db563df6598d1
用户- 3b98ab273f45af78849db563df6598d1

因此,一旦在其中一个表上发出UPDATE或INSERT或DELETE,则会使查询特定表的所有结果集失效。

我觉得这需要进行相当多的工作,我想知道是否有更简单的方法来实现这一点。

点赞