• 缓存
    • 以 redis 为例
      • Symfony 4.3 +
      • Symfony 3.4 +
      • Laravel 中使用
      • Symfony 4.3 +
      • Symfony 3.4 +
    • 使用自定义的缓存方式

    缓存

    本项目使用 symfony/cache 来完成缓存工作,它支持基本目前所有的缓存引擎。

    在我们的 SDK 中的所有缓存默认使用文件缓存,缓存路径取决于 PHP 的临时目录,如果你需要自定义缓存,那么你需要做如下的事情:

    你可以参考symfony/cache官方文档 来替换掉应用中默认的缓存配置:

    以 redis 为例

    Symfony 4.3 +

    请先安装 redis 拓展:composer require predis/predis

    1. use Symfony\Component\Cache\Adapter\RedisAdapter;
    2. // 创建 redis 实例
    3. $client = new \Predis\Client('tcp://10.0.0.1:6379');
    4. // 创建缓存实例
    5. $cache = new RedisAdapter($redis);
    6. // 替换应用中的缓存
    7. $app->rebind('cache', $cache);

    Symfony 3.4 +

    请先安装 redis 拓展:https://github.com/phpredis/phpredis

    1. use Symfony\Component\Cache\Simple\RedisCache;
    2. // 创建 redis 实例
    3. $redis = new Redis();
    4. $redis->connect('redis_host', 6379);
    5. // 创建缓存实例
    6. $cache = new RedisCache($redis);
    7. // 替换应用中的缓存
    8. $app->rebind('cache', $cache);

    Laravel 中使用

    在 Laravel 中框架使用 predis/predis:

    Symfony 4.3 +

    请先安装 redis 拓展:composer require predis/predis

    1. use Symfony\Component\Cache\Adapter\RedisAdapter;
    2. // 创建缓存实例
    3. $cache = new RedisAdapter(app('redis')->connection()->client());
    4. $app->rebind('cache', $cache);

    Symfony 3.4 +

    1. use Symfony\Component\Cache\Simple\RedisCache;
    2. $predis = app('redis')->connection()->client(); // connection($name), $name 默认为 `default`
    3. $cache = new RedisCache($predis);
    4. $app->rebind('cache', $cache);

    上面提到的 app('redis')->connection($name), 这里的 $name 是 laravel 项目中配置文件 database.phpredis 配置名 default:https://github.com/laravel/laravel/blob/master/config/database.php#L118如果你使用的其它连接,对应传名称就好了。

    使用自定义的缓存方式

    如果你发现 symfony 提供的十几种缓存方式都满足不了你的需求的话,那么你可以自己建立一个类来完成缓存操作,前提这个类得实现接口:PSR-16

    该接口有以下方法需要实现:

    1. public function get($key, $default = null);
    2. public function set($key, $value, $ttl = null);
    3. public function delete($key);
    4. public function clear();
    5. public function getMultiple($keys, $default = null);
    6. public function setMultiple($values, $ttl = null);
    7. public function deleteMultiple($keys);
    8. public function has($key);

    下面为一个示例:

    1. <?php
    2. use Psr\SimpleCache\CacheInterface;
    3. class MyCustomCache implements CacheInterface
    4. {
    5. public function get($key, $default = null)
    6. {
    7. // your code
    8. }
    9. public function set($key, $value, $ttl = null)
    10. {
    11. // your code
    12. }
    13. public function delete($key)
    14. {
    15. // your code
    16. }
    17. public function clear()
    18. {
    19. // your code
    20. }
    21. public function getMultiple($keys, $default = null)
    22. {
    23. // your code
    24. }
    25. public function setMultiple($values, $ttl = null)
    26. {
    27. // your code
    28. }
    29. public function deleteMultiple($keys)
    30. {
    31. // your code
    32. }
    33. public function has($key)
    34. {
    35. // your code
    36. }
    37. }

    然后实例化你的缓存类并在 EasyWeChat 里使用它:

    1. $app->rebind('cache', new MyCustomCache());

    OK,这样就完成了自定义缓存的操作。