>  기사  >  백엔드 개발  >  Laravel Framework_php 기술에서 Alibaba Cloud ACE 캐시 서비스 사용 구현

Laravel Framework_php 기술에서 Alibaba Cloud ACE 캐시 서비스 사용 구현

WBOY
WBOY원래의
2016-05-16 20:23:381501검색

이전에 Laravel 4 프레임워크에서 Alibaba Cloud OCS 캐시 사용이라는 기사를 썼는데, 이 기사에서는 SASL 인증이 필요한 Alibaba Cloud OCS 캐시 서비스를 지원하도록 Laravel 4를 확장하는 방법을 소개했습니다. 일부 네티즌들이 Laravel 4에서 ACE의 캐시를 어떻게 사용하는지 문의해 주셨습니다. 원래는 같은 방법을 사용해야 한다고 생각했는데, 직접 시도해 보니 ACE의 캐시가 많이 다르다는 것을 발견했습니다. 그래서 Laravel 프레임워크에서 Alibaba Cloud ACE의 캐싱 서비스를 사용하는 방법을 소개하는 글을 또 작성하겠습니다.

Laravel의 캐시 드라이버 확장 방법

Laravel 4에서 Cache::get($key), Cache::put($key, $value, $ Minutes)와 같은 코드를 사용하면 실제로 인스턴스화된 IlluminateCacheRepository에 액세스하므로 Cache를 전달합니다. 메소드는 사용자 정의 캐시 드라이버를 확장하는 경우 IlluminateCacheRepository 객체도 반환해야 합니다.

Laravel 4에 내장된 Memcached 캐시 드라이버의 구현 과정은 다음과 같습니다.

1. 표준 Memcached 클래스의 새 객체를 생성합니다
2. 이전 단계에서 생성된 Memcached 객체를 사용하여 IlluminateCacheStoreInterface 인터페이스를 구현하는 IlluminateCacheMemecachedStore 객체를 생성합니다.
3. 이전 단계에서 생성된 MemcachedStore 객체를 사용하여 IlluminateCacheRepository 객체를 생성합니다.

따라서 사용자 정의 캐시 드라이버를 확장할 때 위 단계 중 하나를 선택하여 상황에 따라 사용자 정의하고 궁극적으로 IlluminateCacheRepository 객체를 반환합니다. 예를 들어 이전 글 에서 첫 번째 단계에서는 표준 Memcached 객체를 생성한 후 setSaslAuthData() 메서드를 통해 OCS에서 요구하는 사용자 이름과 비밀번호를 설정했습니다. 이후 2단계와 3단계를 사용자 정의할 필요가 없습니다.

ACE의 캐싱 서비스

Alibaba Cloud ACE의 캐싱 서비스는 기본 OCS와 다릅니다.

1. Alibaba::Cache() 메서드를 통해 Cache 객체를 얻습니다.
2.ACE의 Cache 개체는 표준 Memcached 개체와 다르며 제한된 방법을 지원합니다.

그래서 이번에 첫 번째 단계에서 얻는 것은 표준 Memcached 객체가 아니므로 IlluminateCacheMemcachedStore 객체를 생성할 수 없습니다. IlluminateCacheStoreInterface 인터페이스를 직접 구현해야 합니다.

콘솔에서 캐시 공간이 생성되면 고유한 "캐시 공간 이름"이 생성되며, Alibaba::Cache('캐시 공간 이름')을 통해 Cache 개체를 얻습니다. ACE 캐시 서비스 드라이버를 구현하는 단계는 다음과 같습니다.

1. 수정을 용이하게 하기 위해 app/config/cache.php 구성 파일에 ace라는 키를 추가하여 캐시 공간 이름을 저장했습니다.
2. 그런 다음 IlluminateCacheStoreInterface 인터페이스를 구현하는 AceMemcachedStore 클래스를 생성합니다.
3. 마지막으로 AceMemcachedStore 객체를 사용하여 IlluminateCacheRepository 객체를 생성합니다.

구체적인 코드 구현을 살펴보겠습니다.

사용자 정의 ACE 캐시 드라이버를 구현하기 위한 코딩:

첫 번째 단계는 구성 파일을 수정하는 것입니다. app/config/cache.php를 열고 끝에 다음 줄을 추가하세요:

코드 복사 코드는 다음과 같습니다.

//캐시 공간 이름 지정
'ace' => 'lblog-cache',

두 번째 단계는 편의를 위해 자신만의 클래스 파일을 src/Ace 디렉터리에 넣고 Ace를 네임스페이스로 사용하는 것입니다.

1. app의 동일한 레벨 디렉터리에 src/Ace 디렉터리를 만듭니다.
2. 작곡가.json 파일을 열고 자동 로드 섹션을 수정한 후 클래스맵 아래 psr-0 또는 psr-4를 사용하여 파일을 자동으로 로드합니다.

코드 복사 코드는 다음과 같습니다.

"자동 로드": {
"클래스맵": [
// 클래스 자동 로드
],
"psr-4": {
"에이스\": "src/에이스"
}
},

다음 코드를 사용하여 src/Ace/AceMemcachedStore.php 파일을 생성합니다.

코드 복사 코드는 다음과 같습니다.

 
네임스페이스 Ace;
IlluminateCacheStoreInterface를 사용하세요.
IlluminateCacheTaggableStore를 사용하세요.
 
AceMemcachedStore 클래스는 TaggedableStore를 확장하고 StoreInterface를 구현합니다. {
 
    보호된 $memcached;
    보호된 $접두사;
 
    공용 함수 __construct($space, $prefix = '') {
        $this->memcached = Alibaba::캐시($space);
        $this->prefix = strlen($prefix) > 0? $prefix.':' : '';
    }
 
    /**
     * 키로 캐시에서 항목을 검색합니다.
     *
     * @param  문자열 $key
     * @return 혼합
    */
    공개 함수 get($key)
    {
        $value = $this->memcached->get($this->prefix.$key);
        if(is_bool($value) && $value === false) {
            null을 반환합니다.
        }
        $값 반환;
    }
 
    /**
     * 특정 시간 동안 캐시에 항목을 저장합니다.
     *
     * @param  문자열 $key
     * @param  $값 혼합
     * @param  int $분
     * @return 부울
    */
    공개 함수 put($key, $value, $ Minutes)
    {
        return $this->memcached->set($this->prefix.$key, $value, $ Minutes);
    }
 
    /**
     * 캐시에 있는 항목의 값을 증가시킵니다.
     *
     * @param  문자열 $key
     * @param  $값 혼합
     * @return 부울
    */
    공개 함수 증가($key, $value = 1)
    {
        return $this->memcached->increment($this->prefix.$key, $value);
    }
 
    /**
     * 캐시에 있는 항목의 값을 감소시킵니다.
     *
     * @param  문자열 $key
     * @param  $값 혼합
     * @return 부울
    */
    공용 함수 감소($key, $value = 1)
    {
        return $this->memcached->decrement($this->prefix.$key, $value);
    }
 
    /**
     * 캐시에 항목을 무기한 저장합니다.
     *
     * @param  문자열 $key
     * @param  $값 혼합
     * @return 부울
    */
    공개 함수 영원히($key, $value)
    {
        return $this->memcached->set($key, $value, 0);
    }
 
    /**
     * 캐시에서 항목을 제거하세요.
     *
     * @param  문자열 $key
     * @return 부울
    */
    공개 함수 잊어버리기($key)
    {
        return $this->memcached->delete($this->prefix.$key);
    }
 
    /**
     * 캐시에서 모든 항목을 제거하세요.
     *
     * @return 무효
    */
    공개 함수 플러시()
    {
        //$this->memcached->flush();
        false를 반환합니다.
    }

공개 함수 getMemcached()
{
          return $this->memcached;
}
/**
     * 캐시 키 접두사를 가져옵니다.
     *
     * @return 문자열
    */
공개 함수 getPrefix()
{
          $this->접두사 반환
}
}

이 코드는 비교적 간단하지만 get($key) 메소드 구현에 특별한 주의를 기울여야 합니다. 표준 memcached 및 ACE 캐시 객체의 get 메소드는 키가 유효할 때 해당 캐시 값을 반환하고 그렇지 않으면 false를 반환합니다. Laravel 4에서는 get 메소드가 null을 반환하는지 여부를 감지하여 판단하므로 여기서 처리해야 합니다. . 캐시된 값 또는 null을 반환합니다.

AceMemcachedStore 클래스가 생성되었습니다. 다음으로 bootstrap/start.php 파일에서 캐시를 확장하세요.

bootstrap/start.php를 열고 다음 코드를 추가하세요.

코드 복사 코드는 다음과 같습니다.

// 확장자 ace가 있는 캐시 드라이버
캐시::extend('에이스', function($app)
{
// app/config/cache.php 파일에서 "ace" 값을 읽습니다.
$space = $app['config']['cache.ace'];
​  
// app/config/cache.php 파일에서 "prefix" 값을 읽습니다.
$prefix = $app['config']['cache.prefix'];
​  
//AceAceMemcachedStore 객체 생성
$store = 새로운 AceAceMemcachedStore($space, $prefix);
​  
//IlluminateCacheRepository 객체 생성 및 반환
새로운 IlluminateCacheRepository($store)를 반환합니다.

});

시스템이 'ace'를 캐시 드라이버로 사용하도록 지정합니다. app/config/cache.php를 열고 'driver' => '...' 행을 찾아 'driver' => '로 수정합니다. 에이스'

이용 및 제한

위 작업을 통해 Laravel 4에서 ACE의 캐시 서비스를 호출할 수 있으며 사용법은 다음과 같이 일반적인 사용법과 완전히 동일합니다.

코드 복사 코드는 다음과 같습니다.

// 캐시 추가, 10분간 유효
Cache::put('my_key', '내 값', 10);

// 캐시 읽기
캐시::get('my_key')

// 캐시가 존재하는지 확인
캐시::has('my_key')

//데이터 쿼리 캐시
$users = DB::table('users')->remember(10)->get();

그러나 ACE 캐시 객체 자체의 한계로 인해 지정된 키를 가진 캐시 객체는 삭제만 가능하고, 순회하거나 완전하게 동작할 수 없으므로 Cache::flush() 메서드를 사용할 수 없습니다. 위의 AceMemcachedStore 개체에서 플러시 메서드는 아무 작업도 수행하지 않고 false를 반환합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.