nytris / memcached
v0.0.8
2024-08-27 06:32 UTC
Requires
- php: >=8.1
- ext-memcached: *
- asmblah/php-code-shift: ^0.1.14
- nytris/nytris: ^0.1
- react/cache: ^1.2
- react/promise: ^3.2 || ^2.11
- react/socket: ^1.16.0
- tasque/event-loop: ^0.1
Requires (Dev)
- asmblah/fast-cgi: ^0.1.2
- mockery/mockery: 1.6.11
- phpstan/phpstan: ^1.10
- phpstan/phpstan-mockery: ^1.1
- phpunit/phpunit: ^10.2
- symfony/cache: ^5.4
- tedivm/stash: ^1.0
README
标准 PECL ext-memcached
,支持动态模式/自动发现,适用于 Memcached AWS ElastiCache。
为什么?
在利用 AWS ElastiCache 自动发现的同时,使用稳定且性能优异的标准 ext-memcached 从 PECL。
它是如何工作的?
使用 PHP Code Shift 将 ext-memcached
的 Memcached
类引用替换为该包中 src/Memcached/MemcachedHook.php
类的引用。
此外,会话连接也可以利用自动发现。
添加服务器时,如果已启用此包在 nytris.config.php
中的动态模式,将使用 AWS ElastiCache 自动发现功能,并将所有发现的节点添加到 Memcached
实例。
目前,默认将以下对 Memcached
的引用钩子连接,但可以使用 new MemcachedPackage(memcachedClassHookFilter: ...)
进行自定义。
使用方法
使用 Composer 安装此包
$ composer require nytris/memcached tasque/tasque tasque/event-loop
配置 Nytris 平台
nytris.config.php
<?php declare(strict_types=1); use Nytris\Boot\BootConfig; use Nytris\Boot\PlatformConfig; use Nytris\Memcached\Library\ClientMode; use Nytris\Memcached\MemcachedPackage; use Tasque\EventLoop\TasqueEventLoopPackage; use Tasque\TasquePackage; $bootConfig = new BootConfig(new PlatformConfig(__DIR__ . '/var/cache/nytris/')); $bootConfig->installPackage(new TasquePackage( // Disabled for this example, but also works with Tasque in preemptive mode. preemptive: false )); $bootConfig->installPackage(new TasqueEventLoopPackage()); $bootConfig->installPackage(new MemcachedPackage( // Use dynamic mode/auto-discovery when connecting to an AWS ElastiCache cluster. clientMode: ClientMode::DYNAMIC )); return $bootConfig;
会话支持
通过 Nytris\Memcached\Session\NativeMemcachedSessionHandler
使用原生 ext-memcached
会话处理支持会话。
如果启用自动发现,当配置端点提供 session.save_path
INI 设置或 $savePath
构造函数参数时,将执行自动发现。
<?php use Nytris\Memcached\Session\NativeMemcachedSessionHandler; session_set_save_handler(new NativeMemcachedSessionHandler());