Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
存储方式:
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
使用技巧:
许多语言都实现了连接memcached的客户端,其中以Perl、PHP为主。
一、这里介绍windows环境的安装。
1、下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached
2、在cmd下输入 'c:\memcached\memcached.exe -d install' 安装
3、再输入: 'c:\memcached\memcached.exe -d start' 启动。
以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
4、很简单。不过还没完,你只是安装了一个memcached caching server,还没有和php建立关联。所以在php程序里还不能运用。
由于我的php版本是5.2.17的,下载的php_memcache.dll也要是对应的。如果你的php是5.3+的,可以在这里下载
php_memcache-cvs-20090703-5.3-nts-VC6-x86.zip
安装与平时添加扩展完全一样,把dll文件拷到你的php目录的ext目录下,然后,
在php.ini中添加extension=php_memcache.dll,重启服务器,在phpinfo里面就应该可以看到配置信息。
二、CentOS 下的安装
安装 yum -y install memcached
设置为开机启动 chkconfig --level 2345 memcached on
启动和停止 /etc/init.d/memcached start|stop
补充:如果安装缺少其他支持,可以:
yum groupinstall "Development Tools"
常用操作
Memcache::add 添加一个值,如果已经存在,则返回false
Memcache::addServer 添加一个可供使用的服务器地址
Memcache::close 关闭一个Memcache对象
Memcache::connect 创建一个Memcache对象
Memcache::debug 控制调试功能
Memcache::decrement 对保存的某个key中的值进行减法操作
Memcache::delete 删除一个key值
Memcache::flush 清除所有缓存的数据
Memcache::get 获取一个key值
Memcache::getExtendedStats 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus 获取运行服务器的参数
Memcache::getStats 返回服务器的一些运行统计信息
Memcache::getVersion 返回运行的Memcache的版本信息
Memcache::increment 对保存的某个key中的值进行加法操作
Memcache::pconnect 创建一个Memcache的持久连接对象
Memcache::replace R对一个已有的key进行覆写操作
Memcache::set 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold 对大于某一大小的数据进行压缩
Memcache::setServerParams 在运行时修改服务器的参数
<?<span>php </span><span>//</span><span>连接Memcache </span> <span>$mem</span> = <span>new</span><span> Memcache; </span><span>$mem</span>->connect("localhost", 11211<span>); </span><span>//</span><span>保存数据 </span> <span>$mem</span>->set('key1', 'This is first value', 0, 60<span>); </span><span>$val</span> = <span>$mem</span>->get('key1'<span>); </span><span>echo</span> "Get key1 value: " . <span>$val</span> ."<br>"<span>; </span><span>//</span><span>替换数据 </span> <span>$mem</span>->replace('key1', 'This is replace value', 0, 60<span>); </span><span>$val</span> = <span>$mem</span>->get('key1'<span>); </span><span>echo</span> "Get key1 value: " . <span>$val</span> . "<br>"<span>; </span><span>//</span><span>保存数组数据 </span> <span>$arr</span> = <span>array</span>('aaa', 'bbb', 'ccc', 'ddd'<span>); </span><span>$mem</span>->set('key2', <span>$arr</span>, 0, 60<span>); </span><span>$val2</span> = <span>$mem</span>->get('key2'<span>); </span><span>echo</span> "Get key2 value: "<span>; </span><span>print_r</span>(<span>$val2</span><span>); </span><span>echo</span> "<br>"<span>; </span><span>//</span><span>删除数据 </span> <span>$mem</span>->delete('key1'<span>); </span><span>$val</span> = <span>$mem</span>->get('key1'<span>); </span><span>echo</span> "Get key1 value: " . <span>$val</span> . "<br>"<span>; </span><span>//</span><span>清除所有数据 </span> <span>$mem</span>-><span>flush</span><span>(); </span><span>$val2</span> = <span>$mem</span>->get('key2'<span>); </span><span>echo</span> "Get key2 value: "<span>; </span><span>print_r</span>(<span>$val2</span><span>); </span><span>echo</span> "<br>"<span>; </span><span>//</span><span>关闭连接 </span> <span>$mem</span>-><span>close(); </span>?>
memcached 的工作原理:
首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。
PHP 等客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
memcachedb:
MemcacheDB是一个分布式、key-value形式的持久存储系统。它不是一个缓存组件,而是一个基于对象存取的、可靠的、快速的持久存储引擎。协议跟memcache一致(不完整),所以很多memcached客户端都可以跟它连接。MemcacheDB采用Berkeley DB作为持久存储组件,故很多Berkeley DB的特性的他都支持。
我们是站在巨人的肩膀上的。MemcacheDB的前端缓存是Memcached
前端:memcached的网络层
后端:BerkeleyDB存储
memcached和smarty的关系及区别是什么啊?
Memcache是一个高性能的分布式的内存对象缓存系统,把缓存记录到内存的系统.。
例如,从数据库中获取列表显示,但并不想每次都读取数据库,这样就需要用到缓存,而memcache就是其中的一种,它是把记录保存在内存中使用
例如要重db获取数据显示出来, db -> memcache -> client
首先先判断memcache有没有数据,如果没有则读取DB,然后把db获取到的记录保存在memcache
下次再需要读取记录时,就可以直接在memcache中读取,这样就可以分担数据库的负担,而且速度快很多。
Smarty是一个使用PHP写出来的模板引擎,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计。
smarty是运行在MVC结构的view中。
例如 php 我们要显示一个变量,需要这样写 echo $a;
而用smarty则需要这样写 {$a} ,经过编译后,会自动显示出 echo $a;,是一样的,smarty中的缓存,php要运行后,才可以输出到浏览器,php运行生成html输出是需要运算的,而smarty则会把之前运行过的php生成后的html保存起来,如果再调用这个php则会直接输出之前的html.起到缓存作用。
memcache 和 smarty没有关系,两者作用是不一样的,没有联系的。