扩展类库 - 缓存支持

优质
小牛编辑
132浏览
2023-12-01

一个轻量级的缓存实现,目前已支持 Redis Memcache Memcached File 四种储存模式

仓库地址: Github

安装

  1. composer require easyswoole/cache

注意: 请确保框架已经引入了 composerautoload.php 文件,否则报类不存在的错误

快速入门

如果不做任何设置,默认使用File驱动,开箱即用

  1. use easySwoole\Cache\Cache;
  2. // 获取缓存
  3. Cache::get('name', 'default');
  4. // 设置缓存(10秒后过期)
  5. Cache::set('name', 'value', 10);
  6. // 判断缓存是否存在
  7. Cache::has('name');
  8. // 删除缓存值
  9. Cache::delete('name');
  10. // 清空所有缓存
  11. Cache::clear();
  12. // 对于数值类型的缓存可以使用自增自减方法
  13. // 缓存值自增+1
  14. Cache::inc('name');
  15. // 缓存值自增+10
  16. Cache::inc('name', 10);
  17. // 缓存值自减-1
  18. Cache::dec('name');
  19. // 缓存值自减-10
  20. Cache::dec('name', 10);
  21. // 另外还有两个语法糖
  22. // 获取并删除缓存(相当于pop操作)
  23. Cache::pull('name', 'default');
  24. // 不存在则插入 存在则返回值
  25. Cache::remember('name', 'value', 10);

初始化缓存驱动

驱动初始化是非常简单的,只需要定义好配置数组,然后在框架初始化完成事件中进行初始化,可以直接复制以下代码进行修改!

文件系统驱动

  • 缓存过期时间设置为0,则缓存永不过期,其他驱动也一样
  • 如果没有设置缓存path,则自动获取PHP的临时目录创建缓存
  • 数据压缩仅在支持gzcompress的状态下可用,否则打开了也不会压缩
  • 线程安全模式是指操作读写之前会进行上锁 避免脏读
  1. use easySwoole\Cache\Cache;
  2. use easySwoole\Cache\Connector\Files;
  3. function frameInitialized()
  4. {
  5. $fileSystemOptions = [
  6. 'expire' => 0, // 缓存过期时间
  7. 'cache_subdir' => true, // 开启子目录存放
  8. 'prefix' => '', // 缓存文件后缀名
  9. 'path' => '', // 缓存文件储存路径
  10. 'hash_type' => 'md5', // 文件名的哈希方式
  11. 'data_compress' => false, // 启用缓存内容压缩
  12. 'thread_safe' => false, // 线程安全模式
  13. 'lock_timeout' => 3000, // 文件最长锁定时间(ms)
  14. ];
  15. $FilesConnector = new Files($fileSystemOptions);
  16. Cache::init($FilesConnector);
  17. }

Redis驱动

  • 需要PHP扩展redis支持,PECL库地址 : http://pecl.php.net/package/redis
  • 设置了全局的expire,在Set操作的时候没有指定过期时间,所有key都会以全局为准
  1. use easySwoole\Cache\Cache;
  2. use easySwoole\Cache\Connector\Redis;
  3. function frameInitialized()
  4. {
  5. $redisOptions = [
  6. 'host' => '127.0.0.1', // Redis服务器
  7. 'port' => 6379, // Redis端口
  8. 'password' => '', // Redis密码
  9. 'select' => 0, // Redis库序号
  10. 'timeout' => 0, // 连接超时
  11. 'expire' => 0, // 默认缓存超时
  12. 'persistent' => false, // 是否使用长连接
  13. 'prefix' => 'cache:', // 缓存前缀
  14. ];
  15. $redisConnector = new Redis($redisOptions);
  16. Cache::init($redisConnector);
  17. }

Memcache驱动

  • 支持集群连接,集群模式下的hostport用逗号分开,上下对应即可
  1. use easySwoole\Cache\Cache;
  2. use easySwoole\Cache\Connector\Memcache;
  3. function frameInitialized()
  4. {
  5. $memcacheOptions = [
  6. 'host' => '127.0.0.1', // Memcache服务器
  7. 'port' => 11211, // Memcache端口
  8. 'expire' => 0, // 默认缓存过期时间
  9. 'timeout' => 0, // 连接超时
  10. 'persistent' => true, // 是否启用长连接
  11. 'prefix' => '', // 缓存前缀
  12. ];
  13. $memcacheConnector = new Memcache($memcacheOptions);
  14. Cache::init($memcacheConnector);
  15. }

Memcached驱动

  • 同样支持集群连接,如果memcache编译的时候启用了SASL支持,则支持账号密码认证
  1. use easySwoole\Cache\Cache;
  2. use easySwoole\Cache\Connector\Memcached;
  3. function frameInitialized()
  4. {
  5. $memcachedOptions = [
  6. 'host' => '127.0.0.1', // Memcache服务器
  7. 'port' => 11211, // Memcache端口
  8. 'expire' => 0, // 默认缓存过期时间
  9. 'timeout' => 0, // 超时时间(单位:毫秒)
  10. 'prefix' => '', // 缓存后缀
  11. 'username' => '', // Memcache账号
  12. 'password' => '', // Memcache密码
  13. 'option' => [], // Memcache连接配置
  14. ];
  15. $memcachedConnector = new Memcached($memcacheOptions);
  16. Cache::init($memcachedConnector);
  17. }

传入配置直接实例化

可以将配置保存到 Conf\Config.php 文件,然后载入配置进行初始化,从1.1.0版本开始支持在配置中指定driver选项,自动识别驱动进行配置,以文件驱动为例,参照如下代码进行配置

  1. private function userConf()
  2. {
  3. return array(
  4. 'cache' => [
  5. 'driver' => 'files', // 驱动名称
  6. 'expire' => 0, // 缓存过期时间
  7. 'cache_subdir' => true, // 开启子目录存放
  8. 'prefix' => '', // 缓存文件后缀名
  9. 'path' => '', // 缓存文件储存路径
  10. 'hash_type' => 'md5', // 文件名的哈希方式
  11. 'data_compress' => false, // 启用缓存内容压缩
  12. 'thread_safe' => false, // 线程安全模式
  13. 'lock_timeout' => 3000, // 文件最长锁定时间(ms)
  14. ]
  15. );
  16. }

框架初始化完成事件中读取配置文件进行初始化

注意: 如果使用 Redis Memcache 等驱动 请勿在 onWorkerStart 事件之前进行除了初始化以外的操作 否则造成进程共用相同的连接

  1. use easySwoole\Cache\Cache;
  2. function frameInitialized()
  3. {
  4. $CacheOptions = Config::getInstance()->getConf('cache');
  5. Cache::init($CacheOptions);
  6. }