b13 / distributed-locks
为TYPO3前端页面生成添加Redis锁定策略,在具有NFS的分布式系统中非常有用。
v2.0.0
2024-06-20 14:16 UTC
Requires
- php: ^8.0
- ext-redis: *
- typo3/cms-core: ^11.0 || ^12.0 || ^13.0
README
TYPO3有三个内置的锁定策略,它们在运行时选择最适合当前系统设置的。
- 信号量锁定策略
- 简单锁定策略
- 文件锁定策略
然而,当处理多层系统和具有多个前端节点以及NFS文件系统的共享文件系统时,使用更合适的格式特别有帮助。Redis是我们处理多节点场景的选择武器,并且与TYPO3和缓存配合得很好。
此扩展提供了一个Redis锁定机制,将锁存储在(共享)Redis数据库中。
要求
此扩展适用于TYPO3 v8+ LTS,需要PHP包php-redis
以及Redis服务器。
安装
通过composer composer require b13/distributed-locks
或extensions.typo3.org / 扩展管理器安装此扩展,并在扩展管理器中激活它。
现在将以下行添加到您的LocalConfiguration / AdditionalConfiguration中,以激活Redis锁定。
$GLOBALS['TYPO3_CONF_VARS']['SYS']['locking']['redis'] = [
'hostname' => '127.0.0.1',
'database' => 12
];
其他选项
'ttl' (numeric, default is 30sec)
'port' (numeric, default is 6379)
'password' (contains the password, necessary for secure authentication if required by redis)
'priority' (numeric, default is 95) - Set priority for this locking strategy. See LockingApi documentation.
在某些上下文中禁用
如果您有不同的TYPO3_CONTEXT
或环境,并且您想关闭整个Redis策略(例如,在您的预发布机器上),您可以在LocalConfiguration / AdditionalConfiguration中设置此选项。
$GLOBALS['TYPO3_CONF_VARS']['SYS']['locking']['redis']['disabled'] = true;
未来开发
应切换到symfony/lock
以允许分布式Redis服务和其他锁。
致谢 & 背景
灵感来源于现在不再维护的扩展“redis_lock_strategy”,我们曾多次使用该扩展,但也有一些缺点。
- 没有为TYPO3 v9在composer模式下提供稳定版本
- 没有提供发布后的维护者
- 销毁对象不会删除锁,导致某些死锁场景在损坏的脚本中
感谢Alexander Miehe为我们最初扩展和概念工作。
分享我们的专业知识
找到更多我们从b13到您开发的TYPO3扩展,这些扩展帮助我们向客户项目交付价值。作为我们工作方式的一部分,我们专注于测试和最佳实践,以确保我们所有代码的长期性能、可靠性和结果。