b1rdex / predis-compressible
Predis 库的客户端 gzip 压缩
1.0
2022-04-18 02:38 UTC
Requires
- php: >=8.0
- ext-zlib: *
- predis/predis: ^1.1.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpstan/phpstan: ^1.5
- phpunit/phpunit: ^9.5
README
为 Predis 提供的插件,可以透明地压缩/解压缩存储的值。
目前支持的命令
- SET
- SETEX
- SETNX
- GET
安装
composer require b1rdex/predis-compressible
示例用法
<?php use B1rdex\PredisCompressible\Command\StringGet; use B1rdex\PredisCompressible\Command\StringGetMultiple; use B1rdex\PredisCompressible\Command\StringSet; use B1rdex\PredisCompressible\Command\StringSetExpire; use B1rdex\PredisCompressible\Command\StringSetMultiple; use B1rdex\PredisCompressible\Command\StringSetPreserve; use B1rdex\PredisCompressible\Compressor\ConditionalCompressorWrapper; use B1rdex\PredisCompressible\Compressor\GzipCompressor; use B1rdex\PredisCompressible\CompressProcessor; use Predis\Client; use Predis\Configuration\OptionsInterface; use Predis\Profile\Factory; use Predis\Profile\RedisProfile; // strings with length > 2048 bytes will be compressed $compressor = new ConditionalCompressorWrapper(2048, new GzipCompressor()); $client = new Client([], [ 'profile' => static function (OptionsInterface $options) use ($compressor) { $profile = Factory::getDefault(); if ($profile instanceof RedisProfile) { $processor = new CompressProcessor($compressor); $profile->setProcessor($processor); $profile->defineCommand('SET', StringSet::class); $profile->defineCommand('SETEX', StringSetExpire::class); $profile->defineCommand('PSETEX', StringSetExpire::class); $profile->defineCommand('SETNX', StringSetPreserve::class); $profile->defineCommand('GET', StringGet::class); $profile->defineCommand('MGET', StringGetMultiple::class); $profile->defineCommand('MSET', StringSetMultiple::class); $profile->defineCommand('MSETNX', StringSetMultiple::class); } return $profile; }, ]);
压缩后的值以原样存储。默认的 GzipCompressor
使用 gzencode
php 函数以默认参数压缩值,并使用 gzdecode
解压缩。您可以创建自己的压缩器,通过实现 CompressorInterface
。
路线图
- 添加更多命令(至少包括
MSET
、HSET
及其获取对应命令) - 简化初始化过程