让laravel支持memcache的配置方法

1:找到这个文件:
Laravel/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php
这是session的一个管理器文件。
我们增加以下代码:

 代码如下 复制代码

/**
  * Create an instance of the Memcached session driver.
  *
  * @return IlluminateSessionStore
  */
 protected function createMemcacheDriver()
 {
  return $this->createCacheBased('memcache');
 }

这个主要是正佳一个memcahce的缓存支持,
我们知道在laravel中个,memcahce的驱动逻辑很多都是走的是cache的驱动逻辑实现的,那么接下来我们就要修改cache这块了
2:找到文件:
Laravel/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php
在该文件中增加以下代码:

 代码如下 复制代码

/**
  * Create an instance of the Memcache cache driver.
  *
  * @return IlluminateCacheMemcachedStore
  */
 protected function createMemcacheDriver()
 {
  $servers = $this->app['config']['cache.memcached'];

  $memcache = $this->app['memcache.connector']->connect($servers);

  return $this->repository(new MemcacheStore($memcache, $this->getPrefix()));
 }

其实session的memcahce最终的驱动走向还是走这个方法的,那么我们在这个方法中看到了”$this->app['memcache.connector']->”这个代码,
那么这连接器又是在哪里存储进app这个属性里面的呢?
它其实是在我们启动app时,版定相关的serviceProvider的时候注册进去的,那么接下来我们找到文件:
Laravel/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
修改如下:

 代码如下 复制代码

/**
  * Register the service provider.
  *
  * @return void
  */
 public function register()
 {
  $this->app['cache'] = $this->app->share(function($app)
  {
   return new CacheManager($app);
  });

  $this->app['memcached.connector'] = $this->app->share(function()
  {
   return new MemcachedConnector;
  });
                // 增加以下代码
  $this->app['memcache.connector'] = $this->app->share(function()
  {
   return new MemcacheConnector;
  });

  $this->registerCommands();
 }

我们看到这个闭包函数中返回了MemcacheContector的对象,那么这个class怎么弄呢?我们创建个吧
文件地址:Laravel/vendor/laravel/framework/src/Illuminate/Cache/MemcacheConnector.php
文件代码如下:其实是拿MemcachedContector的代码改的

 代码如下 复制代码

<?php namespace IlluminateCache;

use Memcache;

class MemcacheConnector {

 /**
  * Create a new Memcached connection.
  *
  * @param array  $servers
  * @return Memcache
  */
 public function connect(array $servers)
 {
  $memcache = $this->getMemcache();

  // For each server in the array, we'll just extract the configuration and add
  // the server to the Memcache connection. Once we have added all of these
  // servers we'll verify the connection is successful and return it back.
  foreach ($servers as $server)
  {
   $memcache->addServer($server['host'], $server['port'], $server['weight']);
  }

  if ($memcache->getVersion() === false)
  {
   throw new RuntimeException("Could not establish Memcache connection.");
  }

  return $memcache;
 }

 /**
  * Get a new Memcache instance.
  *
  * @return Memcached
  */
 protected function getMemcache()
 {
  return new Memcache;
 }
}

那么按照第二步的流程这个文件会执行connect的方法,执行完成之后返回一个Memcache的对象,
这时候第二步那里根据这边来创建了一个MemcacheStore的存储器,那么这个文件也是需要我们创建,很简单,拿一份memcachedSrote改一下就好了。
文件地址:Laravel/vendor/laravel/framework/src/Illuminate/Cache/MemcacheStore.php
拷贝过来之后我们要改以下几个地方:
1:应用的类名:

 代码如下 复制代码

use Memcache;

class MemcacheStore implements StoreInterface {

构造函数的类型处:

 代码如下 复制代码
public function __construct(Memcache $memcache, $prefix = '')
 {
  $this->memcache = $memcache;
  $this->prefix = strlen($prefix) > 0 ? $prefix.':' : '';
 }

get方法的修改,我们直接返回值就可以了。

 代码如下 复制代码
/**
  * Retrieve an item from the cache by key.
  *
  * @param  string  $key
  * @return mixed
  */
 public function get($key)
 {
  return $this->memcache->get($this->prefix.$key);
 }

put方法要修改下:

 代码如下 复制代码

/**
  * Store an item in the cache for a given number of minutes.
  *
  * @param  string  $key
  * @param  mixed   $value
  * @param  int     $minutes
  * @return void
  */
 public function put($key, $value, $minutes)
 {
  $compress = is_bool($value) || is_int($value) || is_float($value) ? false : MEMCACHE_COMPRESSED;

  $this->memcache->set($this->prefix.$key, $value, $compress, $minutes * 60);
 }

这样子就基本改完了。
那么我么在用cache和session的时候就可以使用memcahe作为驱动了,那么这个memcache的配置信息怎么办呢?
还是跟memcached的配置一样,在cache.php的memcached索引中配置即可。

这里说明下,上篇文章中说到的关于redis无法使用指定的服务器的问题,实际上在cache和session.php的配置文件中,都有一个connection的索引
配置项,那么只要在这里指定就可以了,比如:connection=>session,就说明是用database.php的redis的session这个key指定的配置信息了。

时间: 2024-09-09 04:35:55

让laravel支持memcache的配置方法的相关文章

linux memcache安装配置方法_Linux

基本原理: ① 客户端第一次访问应用程序时,会到数据库(RDBMS)中取出数据,返回给客户端:同时也将取出的数据保存到memcached中. ② 第二次访问时,因为数据已经缓存,就不用去数据库查询了,直接从memcached中取. RDBMS是文件型的数据库,最终还是以文件的形式保存在磁盘上:而memcached则不一样,它是key:value关系型的数据库,是保存在内存中的.内存的读写速度要比磁盘的读写速度快得多,前者是后者的10的6次方倍. memcached是基于libevent的事件处理

新手学习:让IIS支持PHP的配置方法

iis 这个怎么不可能?事实上网上大量的DZ论坛就是采用PHP+IIS,下面是配置IIS支持PHP的流程: 1.将 PHP 安装为 ISAPI 模式: 在"控制面板"的"管理工具"中选择"Internet 服务管理器",打开 IIS 后停止服务,然后在左侧"默认Web站点"上单击右键选择"属性",在打开的"默认 Web 站点属性"窗口的"ISAPI 筛选器"标签里找到

在windows 20003 下IIS6.0支持PHP的配置方法

目前许多主机系统为了方便,在IIS的基础上同时解析了ASP.PHP等脚本语言,从而为用户提供了一种全能空间.本文里就写写IIS下如何配置PHP环境,前提是win2003服务器,IIS6.0.     首先,从PHP官方网站:http://www.php.net/downloads.php下 载PHP压缩包,在写这篇文章的时候,最新版本是PHP 5.3.0.因为是win2003环境,我们下载Windows Binaries下的 "PHP 5.2.10 zip package [10,242Kb]&

apache 支持 php5 的配置方法_Linux

1.下载apache安装包,并执行安装. 2.下载php5的zip包,并解压到c:\php 3.修改apache的配置文件httpd.conf,添加以下: 复制代码 代码如下: #load the php main library to avoid dll hell Loadfile "C:\php\php5ts.dll" #load the sapi so that apache can use php LoadModule php5_module "C:\php\php5

让Apache支持SHTML(SSI)的配置方法

shtml和asp有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来. 服务器采用shtml速度会比html慢,比php快.shtml的特点就是能够进行页面包含,能够局部更新页面包含部分.广泛采用可以很容易解决网页中的广告问题,不需要更新全面静态页面.而只需更新一个包含页面即可.下面我们来看看Apache

Apache下开启SSI配置使html支持include包含的方法_Linux

写页面的同学通常会遇到这样的烦恼,就是页面上的 html 标签越来越多的时候,寻找指定的部分就会很困难,那么能不能像 javascript 一样写在不同的文件中引入呢?答案是有的,apache 能做到. 举个简单的例子,比如有如下的 html 文件(命名为 index.html): <input type='text' /> <input type='button' value='press' /> 一个简单的文本框和按钮,我现在想把按钮部分的 html 写在另一个 .html 的

使IIS支持PHP,ISAPI或CGI,FastCGI完全配置教程(最新php5.2.13配置方法)_win服务器

在Windows Server 2003的IIS6下配置ISAPI方式的PHP,配置方法是,在IIS的"WEB服务扩展"中,添加一个新的WEB服务扩展,程序后缀为PHP,ISAPI程序为php5isapi.dll,然后再我的电脑->属性->高级->"环境变量"-"系统变量"中增加变量名PHPRC,数值为php.ini的路径,在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择"属性&

Linux下Memcache安装配置的方法

安装配置方法一 个人理解: 1.它是基于C语言的Libevent库进行开发的 2.Memcache是一款C/S软件,这款软件是维护内存的. 3.是将数据在内存中使用,从内存中读取要比从硬盘中读取要快. 4.读取内存会减少对I/O设备的调用,从而加大访问速度. 5.内存是一个高速临时存储信息的硬件,断电后里面的信息将被清除. 6.硬盘是一个低速长期存储信息的硬件,断电后里面的信息将被保留. Linux下Memcache服务器端的安装 Memcache用到了libevent这个库用于Socket的处

让apache 支持 shtml 配置方法

什么是SSI? SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思.从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针.SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能. 如何使你的Apache服务器支持SSI? Apache默认是不支持SSI的,需要我们更改httpd.conf来进行配置.我这里以windows平台的Apache