zoukankan      html  css  js  c++  java
  • laravel自定义缓存memcache(自带memcached,windows不支持)

    1、首先弄清楚memcache和memcached的区别(自行搜索)

    2、安装memcache服务端(参照https://www.cnblogs.com/winstonsias/p/10190745.html)及php扩展(参照https://www.cnblogs.com/winstonsias/p/10193781.html)

    3、添加服务提供类 MemcacheServiceProvider ,记得在app.php配置文件添加提供者注册

     1   namespace AppProviders;
     2 
     3     use Cache;
     4     use AppExtensionsMemcacheStore;
     5     use IlluminateSupportServiceProvider;
     6 
     7     class MemcacheServiceProvider extends ServiceProvider
     8     {
     9         public function boot()
    10         {
    11             Cache::extend('memcache', function ($app) {
    12                 return Cache::repository(new MemcacheStore($app['memcache.connector']));
    13             });
    14         }
    15 
    16         public function register()
    17         {
    18             //注册memcache连接的单例
    19             $this->app->singleton('memcache.connector', function ($app) {
    20                 $config = $app['config']["cache.stores.memcache"];
    21                 $servers = $config['servers'][0];
    22                 return memcache_connect($servers['host'], $servers['port']);
    23             });
    24         }
    25 
    26 
    27     }

    4、完善存储类MemcacheStore(可在app添加Extensions文件夹存放)

     1  namespace AppExtensions;
     2     class MemcacheStore implements IlluminateContractsCacheStore
     3     {
     4         //memcache资源
     5         protected $memcache_conn;
     6         public  function __construct($conn)
     7         {
     8             $this->memcache_conn=$conn;
     9         }
    10 
    11         public function __destruct()
    12         {
    13             // TODO: Implement __destruct() method.
    14             $this->memcache_conn=null;//释放资源
    15         }
    16 
    17         public function get($key)
    18         {
    19             return $this->memcache_conn->get($key);
    20         }
    21 
    22         public function put($key, $value, $minutes)
    23         {
    24         }
    25 
    26         public function increment($key, $value = 1)
    27         {
    28         }
    29 
    30         public function decrement($key, $value = 1)
    31         {
    32         }
    33 
    34         public function forever($key, $value)
    35         {
    36         }
    37 
    38         public function forget($key)
    39         {
    40         }
    41 
    42         public function flush()
    43         {
    44         }
    45 
    46         public function getPrefix()
    47         {
    48         }
    49 
    50         /**
    51          * Retrieve multiple items from the cache by key.
    52          *
    53          * Items not found in the cache will have a null value.
    54          *
    55          * @param  array $keys
    56          * @return array
    57          */
    58         public function many(array $keys)
    59         {
    60             // TODO: Implement many() method.
    61         }
    62 
    63         /**
    64          * Store multiple items in the cache for a given number of minutes.
    65          *
    66          * @param  array $values
    67          * @param  int $minutes
    68          * @return void
    69          */
    70         public function putMany(array $values, $minutes)
    71         {
    72             // TODO: Implement putMany() method.
    73         }
    74     }

    5、在cache.php配置文件中添加自定义缓存store

     1  /**
     2          * 自定义memcache,不用memcached by winston
     3          */
     4         'memcache' => [
     5             'driver' => 'memcache',
     6             'servers' => [
     7                 [
     8                     'host' => env('MEMCACHED_HOST', 'xx.xx.xx.xx'),
     9                     'port' => env('MEMCACHED_PORT', 11211),
    10                     'weight' => 100,
    11                 ],
    12             ],
    13         ],

    6、在控制器中使用

    1  $val=Cache::store('memcache')->get('xxxx');
     
  • 相关阅读:
    临时表的问题
    List集合和Set集合互转
    mysql数据库事件
    mysql存储过程事务
    N皇后问题
    递归实现字符数组的全排列及组合
    判断一个序列是否为某二叉搜索树的后续遍历结果
    递归实现两个有序链表的合并
    递归实现字符串反转
    根据字节数截取字符串
  • 原文地址:https://www.cnblogs.com/winstonsias/p/10193804.html
Copyright © 2011-2022 走看看