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

首頁 > 編程 > PHP > 正文

Laravel框架如何使用阿里云ACE緩存服務

2020-03-22 19:19:10
字體:
來源:轉載
供稿:網友
  • 之前我寫了一篇在 Laravel 4 框架中使用阿里云 OCS 緩存的文章,介紹了如何通過擴展 Laravel 4 來支持需要 SASL 認證的阿里云 OCS 緩存服務。有網友問我,ACE 的緩存怎么在 Laravel 4 中使用。我本來覺得應該可以完全用相同的辦法,后來自己嘗試的時候才發現,ACE 的緩存差別非常大。所以再寫一篇,介紹一下如何在 Laravel 框架中使用阿里云 ACE 的緩存服務。

    如何擴展 Laravel 的緩存驅動

    在 Laravel 4 中使用 Cache::get($key), Cache::put($key, $html' target='_blank'>value, $minutes) 這樣的代碼時,實際上是訪問 實例化的 IlluminateCacheRepository, 所以我們通過 Cache::extend 方法擴展自定義緩存驅動時,同樣應該返回一個 IlluminateCacheRepository 對象。

    Laravel 4 內置的 Memcached 緩存驅動,實現的流程是這樣的:

    1.創建一個標準 Memcached 類的新對象

    2.用上一步創建的 Memcached 對象創建一個實現了 IlluminateCacheStoreInterface 接口的 IlluminateCacheMemecachedStore 對象。

    3.用上一步創建的 MemcachedStore 對象創建一個 IlluminateCacheRepository 對象。
    所以我們在擴展自定義的 Cache 驅動時,根據自己的情況,選擇上面的某一個步驟自定義,最終還是要返回 IlluminateCacheRepository 對象。比如上一篇文章中,我就是在第一步,創建標準 Memcached 對象之后,通過 setSaslAuthData() 方法設定 OCS 需要的用戶名密碼。之后第2步、第3步并不需要自定義。

    ACE 的緩存服務

    阿里云 ACE 的緩存服務,跟默認的 OCS 有所不同:

    1.通過 Alibaba::Cache() 方法獲得 Cache 對象。

    2.ACE 的 Cache 對象與標準 Memcached 對象不同,支持的方法有限。
    所以,這次第一步得到的不是標準 Memcached 對象,因此就不能創建 IlluminateCacheMemcachedStore 對象。需要自己實現 IlluminateCacheStoreInterface 接口。

    控制臺創建了緩存空間之后,會有唯一的“緩存空間名稱”,然后通過 Alibaba::Cache('緩存空間名稱') 來獲得 Cache 對象。以下就是實現 ACE 緩存服務驅動的步驟:

    1.為了方便修改,我在配置文件 app/config/cache.php 中增加一個名為 ace 的鍵,存儲緩存空間名稱。

    2.然后創建一個 AceMemcachedStore 類,這個類實現 IlluminateCacheStoreInterface 接口。

    3.最后,用 AceMemcachedStore 對象來創建 IlluminateCacheRepository 對象。
    下面來看具體的代碼實現:

    編碼實現自定義 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 IlluminateCacheStoreInterface;use IlluminateCacheTaggableStore; 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:http://www.lai18.com/content/368670.html

    打開 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'];         // 創建 AceAceMemcachedStore 對象    $store = new AceAceMemcachedStore($space, $prefix);         // 創建并返回 IlluminateCacheRepository 對象    return new IlluminateCacheRepository($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.

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美午夜片在线免费观看| 亚洲综合第一页| 欧美夫妻性生活xx| 亚洲女同精品视频| 亚洲天堂av在线免费观看| 性欧美长视频免费观看不卡| 中文字幕亚洲欧美一区二区三区| 国产丝袜高跟一区| 777777777亚洲妇女| 色综合久久中文字幕综合网小说| 亚洲九九九在线观看| 最近日韩中文字幕中文| 国产日韩在线免费| 欧美二区在线播放| 欧美极度另类性三渗透| 久久国产精品久久久久久| 久久影院免费观看| 另类天堂视频在线观看| 欧美性生活大片免费观看网址| 一区国产精品视频| 欧美激情亚洲国产| 97在线精品视频| 在线观看久久久久久| 亚洲第一区在线| 日本亚洲精品在线观看| 日韩成人在线电影网| 欧美激情国产日韩精品一区18| 国产成人综合亚洲| 欧美激情精品久久久久久| 欧美日韩一区二区免费在线观看| 国产一区二区三区在线观看视频| 91麻豆国产精品| 欧美激情亚洲一区| 美日韩丰满少妇在线观看| 亚洲欧美日韩天堂| 精品美女久久久久久免费| 91成品人片a无限观看| 亚洲自拍偷拍色片视频| 欧美猛男性生活免费| 欧美激情一级二级| 91精品国产自产在线观看永久| 精品国产老师黑色丝袜高跟鞋| 亚洲日本欧美中文幕| 欧美视频专区一二在线观看| 黑丝美女久久久| 国产精品都在这里| 欧洲中文字幕国产精品| 中文综合在线观看| 国产成+人+综合+亚洲欧洲| 午夜精品久久久99热福利| 亚洲精品一区中文字幕乱码| 国产在线精品一区免费香蕉| 国产一区二区三区高清在线观看| 国产精品高精视频免费| 国产精品一区二区久久久| 欧洲亚洲免费在线| 91在线观看免费观看| 91精品国产自产在线观看永久| 亚洲毛片在线免费观看| 色在人av网站天堂精品| 日韩中文视频免费在线观看| 国产精品6699| 亚洲一区二区三区视频播放| 欧美性极品少妇精品网站| 日韩亚洲一区二区| 亚洲情综合五月天| 欧美日韩亚洲成人| 亚洲综合日韩在线| 日韩国产在线播放| 日韩电影在线观看中文字幕| 中文字幕日韩免费视频| 亚洲人成网7777777国产| 日韩精品在线影院| 中文字幕国内精品| 91久久夜色精品国产网站| 国产视频欧美视频| 亚洲人午夜色婷婷| 久久久91精品国产| 色妞一区二区三区| 国产第一区电影| 久久精品中文字幕一区| 精品久久久国产精品999| 欧美精品久久久久| 欧美成人精品激情在线观看| 欧美激情网站在线观看| 欧美视频免费在线观看| 亚洲国产三级网| 久久久精品视频在线观看| 成人av色在线观看| 欧洲亚洲女同hd| 国产香蕉97碰碰久久人人| 日韩欧美中文字幕在线观看| 一本色道久久88精品综合| 亚洲aⅴ男人的天堂在线观看| 亚洲成色999久久网站| 国产精品电影在线观看| 7m第一福利500精品视频| 亚洲自拍偷拍一区| 亚洲无亚洲人成网站77777| 久久香蕉频线观| 91成人在线观看国产| 成人免费视频在线观看超级碰| 最近2019中文字幕大全第二页| 国产精品第二页| 亚洲激情小视频| 日韩精品极品在线观看| 福利二区91精品bt7086| 国产欧美婷婷中文| 久久国产精品久久国产精品| 久久精品国产2020观看福利| 欧美性xxxx极品高清hd直播| 日本国产高清不卡| 日韩一区二区av| 欧美性受xxxx黑人猛交| 欧美激情精品久久久久久免费印度| 亚洲国产欧美精品| 欧美成年人视频| 亚洲国产精品久久久久| 日韩精品久久久久久久玫瑰园| 欧美日韩国产成人在线观看| 91中文在线观看| 国产精品美乳一区二区免费| 久久人人爽人人爽人人片av高请| 中文字幕日韩免费视频| 欧美黑人一级爽快片淫片高清| 亚洲欧洲国产精品| 国产成人精品电影| 高清欧美性猛交xxxx| 欧美—级a级欧美特级ar全黄| 永久555www成人免费| 日韩av手机在线观看| 亚洲成人久久久| 国产精品一二三视频| 成人在线免费观看视视频| 国产精品美女www| 久久久av免费| 欧美激情亚洲激情| 久久精品视频亚洲| 中文字幕日韩欧美在线视频| 欧美裸体男粗大视频在线观看| 亚洲丝袜在线视频| 欧美成人精品影院| 91九色单男在线观看| www.亚洲免费视频| 久久男人资源视频| 欧美日韩福利电影| 国产精欧美一区二区三区| 亚洲精品乱码久久久久久金桔影视| 日韩视频在线免费观看| 国产精品久久久久久影视| 亚洲高清色综合| 中文字幕在线亚洲| 亚洲人成欧美中文字幕| 欧美久久久精品| 欧美一级视频免费在线观看| 欧美国产第一页| 久久久99久久精品女同性| 2019中文在线观看| 26uuu日韩精品一区二区| 欧美激情性做爰免费视频| 日韩中文字幕在线精品| 亚洲男人av在线| 国产精品免费一区豆花| 日韩亚洲欧美中文高清在线|