设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Laravel框架中实现使用阿里云ACE缓存服务

发布时间:2022-07-27 12:48 所属栏目:121 来源:互联网
导读:这篇文章主要介绍了Laravel框架中实现使用阿里云ACE缓存服务,本文扩展了一个ACE缓存驱动,以便使用阿里云ACE缓存服务,需要的朋友可以参考下 之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章,介绍了如何通过扩展 Laravel 4 来支持需要 SASL 认证
       这篇文章主要介绍了Laravel框架中实现使用阿里云ACE缓存服务,本文扩展了一个ACE缓存驱动,以便使用阿里云ACE缓存服务,需要的朋友可以参考下
 
  之前我写了一篇在 Laravel 4 框架中使用阿里云 OCS 缓存的文章,介绍了如何通过扩展 Laravel 4 来支持需要 SASL 认证的阿里云 OCS 缓存服务。有网友问我,ACE 的缓存怎么在 Laravel 4 中使用。我本来觉得应该可以完全用相同的办法,后来自己尝试的时候才发现,ACE 的缓存差别非常大。所以再写一篇,介绍一下如何在 Laravel 框架中使用阿里云 ACE 的缓存服务。
 
  如何扩展 Laravel 的缓存驱动
 
  在 Laravel 4 中使用 Cache::get($key), Cache::put($key, $value, $minutes) 这样的代码时,实际上是访问 实例化的 Illuminate/Cache/Repository, 所以我们通过 Cache::extend 方法扩展自定义缓存驱动时,同样应该返回一个 Illuminate/Cache/Repository 对象。
 
  Laravel 4 内置的 Memcached 缓存驱动,实现的流程是这样的:
 
  1.创建一个标准 Memcached 类的新对象
 
  2.用上一步创建的 Memcached 对象创建一个实现了 Illuminate/Cache/StoreInterface 接口的 Illuminate/Cache/MemecachedStore 对象。
 
  3.用上一步创建的 MemcachedStore 对象创建一个 Illuminate/Cache/Repository 对象。
 
  所以我们在扩展自定义的 Cache 驱动时,根据自己的情况,选择上面的某一个步骤自定义,最终还是要返回 Illuminate/Cache/Repository 对象。比如上一篇文章中,我就是在第一步,创建标准 Memcached 对象之后,通过 setSaslAuthData() 方法设定 OCS 需要的用户名密码。之后第2步、第3步并不需要自定义。
 
  ACE 的缓存服务
 
  阿里云 ACE 的缓存服务,跟默认的 OCS 有所不同:
 
  1.通过 Alibaba::Cache() 方法获得 Cache 对象。
 
  2.ACE 的 Cache 对象与标准 Memcached 对象不同,支持的方法有限。
 
  所以,这次第一步得到的不是标准 Memcached 对象,因此就不能创建 Illuminate/Cache/MemcachedStore 对象。需要自己实现 Illuminate/Cache/StoreInterface 接口。
 
  在控制台创建了缓存空间之后,会有唯一的“缓存空间名称”,然后通过 Alibaba::Cache('缓存空间名称') 来获得 Cache 对象。以下就是实现 ACE 缓存服务驱动的步骤:
 
  1.为了方便修改,我在配置文件 app/config/cache.php 中增加一个名为 ace 的键,存储缓存空间名称。
 
  2.然后创建一个 AceMemcachedStore 类,这个类实现 Illuminate/Cache/StoreInterface 接口。
 
  3.最后,用 AceMemcachedStore 对象来创建 Illuminate/Cache/Repository 对象。
 
  下面来看具体的代码实现:
 
  编码实现自定义 ACE 缓存驱动:
 
  第一步,修改配置文件。打开 app/config/cache.php,在最后增加一行:
 
  代码如下:
 
  // 指定缓存空间名称
 
  'ace' => 'lblog-cache',
 
  第二步,为了方便,把自己的类文件放在 src/Ace 目录下,使用 Ace 作为命名空间。
 
  1.在 app 的同级目录创建目录 src/Ace。
 
  2.打开 composer.json 文件,修改 autoload 节,在 classmap 下面用 psr-0 或者 psr-4 来自动加载文件。
 
  代码如下:
 
  "autoload": {
 
  "classmap": [
 
  // autoload class
 
  ],
 
  "psr-4": {
 
  "Ace//": "src/Ace"
 
  }
 
  },
 
  创建 src/Ace/AceMemcachedStore.php 文件,代码如下:
 
  代码如下:
 
  namespace Ace;
 
  use Illuminate/Cache/StoreInterface;
 
  use Illuminate/Cache/TaggableStore;
 
  class AceMemcachedStore extends TaggableStore implements StoreInterface {
 
  protected $memcached;
 
  protected $prefix;
 
  public function __construct($space, $prefix = '') {
 
  $this->memcached = /Alibaba::Cache($space);
 
  $this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
 
  }
 
  /**
 
  * Retrieve an item from the cache by key.
 
  *
 
  * @param string $key
 
  * @return mixed
 
  */
 
  public function get($key)
 
  {
 
  $value = $this->memcached->get($this->prefix.$key);
 
  if(is_bool($value) && $value === false) {
 
  return null;
 
  }
 
  return $value;
 
  }
 
  /**
 
  * Store an item in the cache for a given number of minutes.
 
  *
 
  * @param string $key
 
  * @param mixed $value
 
  * @param int $minutes
 
  * @return boolean
 
  */
 
  public function put($key, $value, $minutes)
 
  {
 
  return $this->memcached->set($this->prefix.$key, $value, $minutes);
 
  }
 
  /**
 
  * Increment the value of an item in the cache.
 
  *
 
  * @param string $key
 
  * @param mixed $value
 
  * @return boolean
 
  */
 
  public function increment($key, $value = 1)
 
  {
 
  return $this->memcached->increment($this->prefix.$key, $value);
 
  }
 
  /**
 
  * Decrement the value of an item in the cache.
 
  *
 
  * @param string $key
 
  * @param mixed $value
 
  * @return boolean
 
  */
 
  public function decrement($key, $value = 1)
 
  {
 
  return $this->memcached->decrement($this->prefix.$key, $value);
 
  }
 
  /**
 
  * Store an item in the cache indefinitely.
 
  *
 
  * @param string $key
 
  * @param mixed $value
 
  * @return boolean
 
  */
 
  public function forever($key, $value)
 
  {
 
  return $this->memcached->set($key, $value, 0);
 
  }
 
  /**
 
  * Remove an item from the cache.
 
  *
 
  * @param string $key
 
  * @return boolean
 
  */
 
  public function forget($key)
 
  {
 
  return $this->memcached->delete($this->prefix.$key);
 
  }
 
  /**
 
  * Remove all items from the cache.
 
  *
 
  * @return void
 
  */
 
  public function flush()
 
  {
 
  //$this->memcached->flush();
 
  return false;
 
  }
 
  public function getMemcached()
 
  {
 
  return $this->memcached;
 
  }
 
  /**
 
  * Get the cache key prefix.
 
  *
 
  * @return string
 
  */
 
  public function getPrefix()
 
  {
 
  return $this->prefix;
 
  }
 
  }。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读