如何有效地使缓存无效?

时间:2015-05-29 15:02:52

标签: mysql caching lua redis mysql-proxy

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

由于我们无法触及代码,因此我看到 mysql-proxy 可以放在应用服务器和数据库服务器之间,在那里可以缓存查询结果,访问 redis o memchached 通过 lua 。我的想法是缓存一切。但是,问题是缓存无效。更新记录后,如何使所有缓存的结果集无效?

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

查询:

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

缓存实例A

 3b98ab273f45af78849db563df6598d1– {result set}

缓存实例B

products - 3b98ab273f45af78849db563df6598d1
users - 3b98ab273f45af78849db563df6598d1

因此,一旦在这些表上发出UPDATE或INSERT或DELETE,它将使查询特定表的所有结果集无效。

我看到了相当多的工作,我想知道是否有更简单的方法来实现这一目标。

0 个答案:

没有答案