bmack / local-caches
为TYPO3提供基于SQLite的自定义缓存后端
Requires
- php: ^7.2 || ^8.0
- typo3/cms-core: ^9.3 || ^10.0 || ^11.0 || ^12.0
README
为TYPO3提供缓存后端,将所有缓存信息存储在SQLite中。
另一个侧项目...
为什么这个包?
TYPO3自带“数据库缓存后端”,用于存储页面缓存的版本、页树等信息,最终将大量代码与实际内容存储在同一数据库中,通常是MySQL/MariaDB。典型的缓存页面仍然需要数据库进行少量查询,以及“数据库缓存”中的数十次检查。
然而,当数据库系统存储在单独的内部服务器(即“数据库服务器”)上时(这是99.999%的共享主机提供商的情况),网络延迟(即数据通过局域网电缆传输的时间)会增加,这是很自然的事情。然后有几个人开始尝试使用基于文件系统的缓存,这也由TYPO3默认提供,但不用于典型的页面缓存。当有数百个缓存条目(这可能会很快发生)时,您的文件系统和实际硬盘(SSD,请)需要非常出色。
这个包试图将两者的优点结合起来
从TYPO3 v9开始,TYPO3支持SQLite。SQLite可以用作数据库,但所有信息都存储在一个单独的文件中,理想情况下这个文件在项目所在的服务器上。尽管它的名字叫“Lite”,但它是一个功能齐全的RDBMS,非常适合我们的需求,而且它非常快。
这个包背后的主要思想是提供一个SQLite缓存后端,它会自动处理创建数据库模式和SQLite文件。如果文件被删除(通过部署或意外删除),模式将被重新创建。
在b13.com工作期间,我们仅在我们的项目中使用基于内存的缓存后端,如Redis,我构建了这个小包来演示即使是小的TYPO3项目也可以从优化的缓存后端中受益。也许这个包甚至会被维护者认为是值得的,从而被纳入TYPO3。
安装
您需要TYPO3 v9.3或更高版本才能使用此功能。此外,请确保已激活“php-sqlite”包,这样就完成了。
使用composer安装此包 composer req bmack/local-caches
。
配置
SQLite数据库文件
安装后,编辑您的AdditionalConfiguration.php以定义使用SQLite缓存后端。以下是TYPO3 v10+的示例:
$caches = [
'hash',
'pages',
'pagesection',
'rootline',
'extbase',
];
foreach ($caches as $cacheName) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheName]['backend'] = \Bmack\LocalCaches\SqliteCacheBackend::class;
}
侧注
- 我已经在几个较小的网站上使用了这个包,它“有点工作”
- 如果不存在,它会创建DB文件和DB结构,也许有更好的方法来做这件事
- 我使用类似的方法在b13.com的生产环境中使用了一段时间,通过分析我发现,使用完全缓存的页面比使用Redis更快。我可能需要再次尝试并展示一些统计数据。
许可证
本包根据GPL v2+授权,与TYPO3核心相同。有关详细信息,请参阅此存储库中的LICENSE文件。
开放问题
如果您发现任何问题,请随时在GitHub上创建一个问题或拉取请求。
鸣谢
这个包由Benni Mack于2023年为b13 GmbH创建。
灵感来源于来自工程展示播客的Andy Grunwald和Wolfgang Gassler。
了解更多我们开发的TYPO3扩展,这些扩展有助于我们在客户项目中提供价值。作为我们工作方式的一部分,我们注重测试和最佳实践,以确保所有代码的长期性能、可靠性和结果。