b1rdex/predis-compressible

Predis 库的客户端 gzip 压缩

1.0 2022-04-18 02:38 UTC

This package is auto-updated.

Last update: 2024-09-03 16:09:43 UTC


README

Software license Latest stable Monthly installs Build status

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

路线图

  • 添加更多命令(至少包括 MSETHSET 及其获取对应命令)
  • 简化初始化过程