weakbit / lucene-cache
Provides a cache backend for TYPO3 that stores all cache information in Lucene
Installs: 1 322
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
Type:typo3-cms-extension
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- typo3/cms-core: ~11.5.0 || ~12.4.0
- zf1s/zend-search-lucene: ^1.15.5
Requires (Dev)
- nimut/testing-framework: ^6.0.1
- phpstan/extension-installer: ^1.1
- pluswerk/grumphp-config: ^6.8.0
- rybakit/msgpack: *
- saschaegerer/phpstan-typo3: ^1.1
- ssch/typo3-rector: ^1.1.3
- typo3/cms-adminpanel: ^11.0 || ^12.0
Suggests
- rybakit/msgpack: To get a smaller and faster serialization of data
This package is not auto-updated.
Last update: 2024-10-14 12:12:05 UTC
README
Provides a cache backend for TYPO3 that stores all cache information in Lucene.
Key Features of lucene-cache for TYPO3
- Efficient Caching: Uses Lucene's indexing and search capabilities to store and retrieve cached content quickly.
- Scalability: Can handle large volumes of data and perform well under high load, making it suitable for large TYPO3 installations.
- Flexibility: Provides flexible configuration options to tailor the caching behavior to specific needs.
- Integration: Seamlessly integrates with TYPO3's caching framework, allowing for easy setup and use within TYPO3 projects.
Installation and Configuration
To use the lucene-cache backend in your TYPO3 project, follow these steps:
Install the Extension
You can install the lucene-cache extension via Composer:
composer require andersundsehr/lucene-cache
Configure the Cache Backend
In your TYPO3 configuration, typically in LocalConfiguration.php or AdditionalConfiguration.php, additional.php, settings.php or even ext_localconf.php you need to configure the cache backend to use Lucene. Here is an example configuration:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [ 'frontend' => \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend::class, 'backend' => \Weakbit\LuceneCache\Cache\Backend\LuceneCacheBackend::class, 'options' => [ 'defaultLifetime' => 604800, 'indexName' => 'pages', 'maxBufferedDocs' => 1000, ], 'groups' => [ 'pages', ] ];
Example Usage
After configuring the lucene-cache backend, TYPO3 will use Lucene for caching pages or other cache configurations you have specified. You can verify the caching behavior by checking the specified index path for Lucene index files and monitoring the performance improvements in your TYPO3 installation.
Additional Resources For more detailed information, refer to the following resources:
Lucene-cache GitHub Repository TYPO3 Documentation on Caching Framework
These resources provide comprehensive documentation and examples to help you get started with the lucene-cache backend for TYPO3.
Example Configuration for the Cache
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [ 'frontend' => \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend::class, 'backend' => \Weakbit\LuceneCache\Cache\Backend\LuceneCacheBackend::class, 'options' => [ 'defaultLifetime' => 604800, 'indexName' => 'pages', 'maxBufferedDocs' => 1000, ], 'groups' => [ 'pages', ] ];
The Option "indexName" must not contain other than the following chars: a-zA-Z0-9-_
Performance
The issue to develop that cache was a usage of very many cache Tags.
maxBufferedDocs is set to 1000 here, that means that up to 1000 documents are buffered before the writeout, that is good for large imports if you have some spare ram. But keep in mind that a lookup (has,get,remove,flush) will always commit the buffer first to have a full index to search in.
Keep in mind
This extenion relies on using the SingleSpaceTokenizer with the lucene package, so if you already use lucene in your project, your tokenizer is overwritten which could lead into problems. This is a todo we work on
Considerdations
In the example
'frontend' => \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend::class,
Was set, that is the default frontend. This extension ships with the dropin replacement
'frontend' => \Weakbit\LuceneCache\Cache\Frontend\VariableFrontend::class,
Which uses igbinary if installed, or msgpack if installed. These have some improvements in performance, but you may go with the default frontent as well.
To be done:
- implement metrics (hits/misses/inserts/deletions)
This extension is inpired by Benni Mack's https://github.com/bmack/local-caches