firehed/redis-psr16

PSR-16接口的Redis实现

0.5.0 2022-07-25 18:04 UTC

README

这是一个为PSR-16 SimpleCache接口编写的Redis实现。

这个库实际上使用了Redis支持的多个键操作符(如mget等),与当时大多数其他实现不同。

安装和用法

安装: composer require firehed/redis-psr16

用法

$redis = new \Redis();
$redis->connect('yourhost', 6379);
$redis->auth(['user' => 'youruser', 'pass' => 'yourpass']);

$cache = new \Firehed\Cache\RedisPsr16($redis);
// Use like any other PSR-16 implementation

如果未设置Redis::OPT_SERIALIZER(或使用默认的Redis::SERIALIZER_NONE),则此库将自动将其设置为Redis::SERIALIZER_PHP。这将确保非字符串值被正确存储和检索。请注意,这意味着如果缓存了任何对象,则在缓存操作期间将调用与序列化相关的任何魔术方法(__sleep()__wakeup()__serialize()__unserialize())。在向此库提供Redis之前设置该选项为任何其他值将使用设置的序列化器

use Firehed\Cache\RedisPsr16;
use Redis;

// Automatically sets SERIALIZER_PHP:
$redis = new Redis();
// connect/auth
$cache = new RedisPsr16($redis);

// Uses specified SERIALIZER_JSON
$redis = new Redis();
// connect/auth
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_JSON);
$cache = new RedisPsr16($redis);

配置

可以通过构造函数参数$mode设置运行时模式

use Firehed\Cache\RedisPsr16;

$cache = new RedisPsr16($redis, RedisPsr16::MODE_THROW);
  • RedisPsr16::MODE_THROW在出现网络问题时可能会抛出异常(与直接使用Redis扩展的方式相同)。抛出的异常将实现Psr\SimpleCache\CacheException,符合PSR-16的要求。这将有助于暴露网络问题,并可能对日志记录和错误处理有益,但需要调用库来处理它们。这是默认模式。

  • RedisPsr16::MODE_FAIL将防止抛出异常。任何错误,包括网络错误(当Redis扩展抛出时),都将被视为失败。这可能会导致缓存未命中周围的误导性行为;如果您的应用程序需要知道“未命中”和“Redis不可用”之间的区别,请勿使用此模式。

可以通过RedisPsr16::setMode($mode)在运行时调整模式。