自定义缓存
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);