亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Laravel框架中實現使用阿里云ACE緩存服務

2024-05-04 23:31:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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 文件,代碼如下:

復制代碼代碼如下:

<?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;
    }
}

 

這段代碼比較簡單,不過要特別注意一下 get($key) 方法的實現。標準 memcached 以及 ACE 的緩存對象的 get 方法都是key有效時返回對應的緩存值,否則返回false,而在 Laravel 4 中,是通過檢測 get 方法返回的是否 null 來做判斷,所以這里需要處理一下,返回緩存值或者null。

AceMemcachedStore類已經創建好了,接下來在 bootstrap/start.php 文件中擴展 Cache:

打開 bootstrap/start.php, 添加以下代碼:

復制代碼代碼如下:

// 擴展名為 ace 的緩存驅動
Cache::extend('ace', function($app)
{
    // 從 app/config/cache.php 文件中讀取 "ace" 的值
    $space = $app['config']['cache.ace'];
     
    // 從 app/config/cache.php 文件中讀取 "prefix" 的值
    $prefix = $app['config']['cache.prefix'];
     
    // 創建 /Ace/AceMemcachedStore 對象
    $store = new /Ace/AceMemcachedStore($space, $prefix);
     
    // 創建并返回 /Illuminate/Cache/Repository 對象
    return new /Illuminate/Cache/Repository($store);
 
});

 

指定系統使用 'ace' 作為緩存驅動:打開 app/config/cache.php,找到 'driver' => '...' 所在行,修改為:'driver' => 'ace'.

使用和限制

通過以上操作,就可以在 Laravel 4 中調用 ACE 的緩存服務,使用上與平常的用法完全一致,比如:

復制代碼代碼如下:

// 添加緩存,有效時間10分鐘
Cache::put('my_key', 'my value', 10);
 
// 讀取緩存
Cache::get('my_key')
 
// 判斷緩存是否存在
Cache::has('my_key')
 
// 數據查詢緩存
$users = DB::table('users')->remember(10)->get();

 

但是由于 ACE 緩存對象本身的限制,只能刪除指定 key 的緩存對象,不能遍歷、全量操作,因此 Cache::flush() 方法就不能使用。在上面的 AceMemcachedStore 對象中,flush 方法沒有做任何操作,只是返回 false.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久天堂电影网| 成人中文字幕+乱码+中文字幕| 国产精品99久久久久久久久久久久| 日韩欧美亚洲范冰冰与中字| 中文字幕亚洲一区| 亚洲自拍偷拍视频| 26uuu亚洲国产精品| 亚洲一级一级97网| 国产亚洲成精品久久| 成人激情在线播放| 欧美做爰性生交视频| 亚洲加勒比久久88色综合| 中文字幕日韩欧美| 亚洲人成在线观看| 午夜精品久久久久久久男人的天堂| 日韩av影片在线观看| 亚洲精品小视频| 国产一区玩具在线观看| 国产在线精品一区免费香蕉| 日韩三级成人av网| 91大神福利视频在线| 91美女福利视频高清| 6080yy精品一区二区三区| 日韩一区二区精品视频| 成人性教育视频在线观看| 2019最新中文字幕| www.国产精品一二区| 欧美另类高清videos| 日韩中文字幕免费| 久久国产精品影视| 精品国产自在精品国产浪潮| 精品久久久久久国产| 久久国产加勒比精品无码| 欧美电影《睫毛膏》| 91精品国产综合久久男男| 亚洲精品91美女久久久久久久| 亚洲精品成人免费| 大胆人体色综合| 欧美尤物巨大精品爽| 亚洲欧美一区二区三区情侣bbw| 欧美成人精品一区二区三区| 亚洲v日韩v综合v精品v| 国产亚洲a∨片在线观看| 久久免费精品视频| 国产精品一区专区欧美日韩| 国产精品久久久久久久久男| 欧美成人精品xxx| 91九色国产社区在线观看| 国模精品一区二区三区色天香| 欧美大片大片在线播放| 成人有码在线视频| 亚洲最大成人在线| 午夜精品国产精品大乳美女| 欧美亚洲视频在线观看| 亚洲激情视频在线播放| 日韩免费av一区二区| 国产成+人+综合+亚洲欧美丁香花| 国产999精品久久久| 亚洲天堂久久av| 久久亚洲一区二区三区四区五区高| 欧美大片欧美激情性色a∨久久| 久久久99久久精品女同性| 国产精品久久av| 日本欧美一级片| 88国产精品欧美一区二区三区| www国产精品视频| 亚洲三级 欧美三级| 久久免费福利视频| 亚洲精品av在线播放| 欧美亚洲日本网站| 3344国产精品免费看| 国产成人精品久久久| 精品毛片三在线观看| 粗暴蹂躏中文一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 91精品国产高清久久久久久久久| 91精品久久久久久久久青青| 精品国产一区二区三区久久久狼| 亚洲社区在线观看| 色综合91久久精品中文字幕| 亚洲福利在线播放| 疯狂做受xxxx欧美肥白少妇| 欧美老肥婆性猛交视频| 久青草国产97香蕉在线视频| 欧美日韩另类在线| 久久九九亚洲综合| 欧美成人在线免费| 欧美性理论片在线观看片免费| 91情侣偷在线精品国产| 国产精品视频免费在线观看| 日韩精品久久久久久久玫瑰园| 精品亚洲男同gayvideo网站| 疯狂做受xxxx欧美肥白少妇| 日韩欧美在线视频| 精品调教chinesegay| 欧美视频在线观看 亚洲欧| 26uuu另类亚洲欧美日本一| 亚洲人成欧美中文字幕| 国产精品老女人视频| 国产亚洲在线播放| 中文字幕精品影院| 日韩激情片免费| 国产婷婷色综合av蜜臀av| 久久香蕉精品香蕉| 亚洲第一福利网| 日韩动漫免费观看电视剧高清| 国产精品稀缺呦系列在线| 欧美丝袜一区二区三区| 日韩中文第一页| 久久精品国产亚洲精品2020| 欧美日韩国产精品专区| 91亚洲精品在线| 亚洲图片在线综合| 日韩大胆人体377p| 欧美成人免费全部观看天天性色| 欧美成年人视频网站| 亚洲天堂久久av| 91精品久久久久久久久久久| 国产成人一区二区三区电影| 国产精品1区2区在线观看| 精品国内产的精品视频在线观看| 欧美福利视频网站| 亚洲高清不卡av| 日韩av电影在线免费播放| 亚洲国产小视频在线观看| 亚洲第一免费播放区| 亚洲国产精彩中文乱码av| 欧美激情视频网| 久久久亚洲国产| 热久久免费视频精品| 国产专区欧美专区| 色妞色视频一区二区三区四区| 久久精品视频va| 欧美日韩国产综合新一区| 欧美色欧美亚洲高清在线视频| 欧美成人国产va精品日本一级| 国产成人精品久久二区二区91| 国产精品一区av| 亚洲a级在线播放观看| 亚洲女在线观看| 国产精品入口免费视频一| 成人在线视频网| 国产z一区二区三区| 在线观看视频亚洲| 亚洲精品99久久久久中文字幕| 欧美乱妇40p| 欧美午夜激情视频| 欧美激情精品久久久久久| 情事1991在线| 中文字幕日本精品| 亚洲一区亚洲二区亚洲三区| 日韩av综合中文字幕| 在线观看免费高清视频97| 日韩av网址在线| 亚洲精品视频免费在线观看| 国产91精品久久久久久久| 国产免费一区二区三区香蕉精| 国产日产欧美a一级在线| 欧美精品午夜视频| 亚洲欧美激情一区| 国产精品久久久久久影视| 午夜精品福利视频| 国精产品一区一区三区有限在线| 欧美日韩在线免费|