Skip to content

自定义缓存

v3版本支持自定义缓存,你可以通过 setCache 选项来配置缓存。

Redis 适配器

php
use Kkokk\Poster\Cache\RedisCacheAdapter;

// 替换成你的 Redis 实例
$redis = new \Redis();
$redis->connect('127.0.0.1');

$redisAdapter = new RedisCacheAdapter($redis);

// 获取验证码
$result = Captcha::setCache($redisAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($redisAdapter)
        ->type('input')
        ->check($key, $code);

Predis 适配器

php
use Kkokk\Poster\Cache\PredisCacheAdapter;

// 替换成你的 Predis 实例
$predis = new Predis();
$predis->addServer('127.0.0.1', 11211);

$predisAdapter = new PredisCacheAdapter($predis);

// 获取验证码
$result = Captcha::setCache($predisAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($predisAdapter)
        ->type('input')
        ->check($key, $code);

Memcache 适配器

php
use Kkokk\Poster\Cache\MemcacheCacheAdapter;

// 替换成你的 Memcache 实例
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);

$memcacheAdapter = new MemcacheCacheAdapter($memcache);

// 获取验证码
$result = Captcha::setCache($memcacheAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($memcacheAdapter)
        ->type('input')
        ->check($key, $code);

Memcached 适配器

php
use Kkokk\Poster\Cache\MemcachedCacheAdapter;

// 替换成你的 Memcached 实例
$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);

$memcachedAdapter = new MemcacheCacheAdapter($memcached);

// 获取验证码
$result = Captcha::setCache($memcachedAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($memcachedAdapter)
        ->type('input')
        ->check($key, $code);

session 适配器

session 适配器不需要任何配置,直接使用即可。

php
use Kkokk\Poster\Cache\SessionCacheAdapter;

$sessionAdapter = new SessionCacheAdapter();

// 获取验证码
$result = Captcha::setCache($sessionAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($sessionAdapter)
        ->type('input')
        ->check($key, $code);

自定义缓存适配器

当然,你可以自定义缓存适配器,只需要继承 Kkokk\Poster\Cache\AbstractCacheAdapter 抽象类并实现 Kkokk\Poster\Cache\CacheInterface 接口即可。

举个栗子,假设你需要重新定义 Session 缓存适配器,你可以这样写:

php
use Kkokk\Poster\Cache\AbstractCacheAdapter;
use Workerman\Protocols\Http\Session;

// 定义一个 webman 的 session 缓存适配器
class WebmanSessionCacheAdapter extends AbstractCacheAdapter
{
    /**
     * @var Session
     */
    protected $session;

    public function __construct(Session $session)
    {
        $this->session = $session;
    }

    public function get($key, $default = null)
    {
        return $this->session->get($key, $default);
    }

    public function pull($key, $default = null)
    {
        return $this->session->pull($key, $default);
    }

    public function put($key, $value, $ttl = null)
    {
        $this->session->put($key, $value);
        return true;
    }

    public function forget($key)
    {
        $this->session->forget($key);
        return true;
    }

    public function flush()
    {
        $this->session->flush();
        return true;
    }

    public function has($key)
    {
        return $this->session->has($key);
    }
}

// 使用自定义的缓存适配器
$webmanSessionCacheAdapter = new WebmanSessionCacheAdapter(request()->session());
// 获取验证码
$result = Captcha::setCache($webmanSessionCacheAdapter)
        ->type('input')
        ->get();

// 验证结果
$key    = '缓存 key';
$code   = '验证码结果';
$result = Captcha::setCache($webmanSessionCacheAdapter)
        ->type('input')
        ->check($key, $code);

微不足道,绵薄之力