Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据

库负载,提升访问速度。Memcached由Danga

Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数

据库负载大幅度降低,更好的分配资源,更快速访问。

=================================================

一、memcached 简介

在很多场合,我们都会听到 memcached 这个名字,可能并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下,memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序。

二、memcached 安装

windows

下载:

首先到下载memcached的windows版本和java客户端jar包,目前最新版本是memcached-1.2.1-win32.zip

和java_memcached-release_1.6.zip,分别解压后即可!首先是安装运行memcached服务器,我们将

memcached-1.2.1-win32.zip解压后,进入其目录,然后运行如下命令:

1. c:>memcached.exe -d install

2. c:>memcached.exe -l 127.0.0.1 -m 32 -d start

第一行是安装memcached成为服务,这样才能正常运行,否则运行失败!第一行是启动memcached的,作为测试我们就简单的只分配32M

内存了,然后监听本机端口和以守护进行运行。执行完毕后,我们就可以在任务管理器中见到memcached.exe这个进程了。

3.下载,请自己查找对应的php版本的文件

4. 在C:\winnt\php.ini 加入一行 ‘extension=php_memcache.dll’

5.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

memcached的基本设置:

-p 监听的端口

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

Memcache环境测试:

运行下面的php文件,如果有输出This is a test!,就表示环境搭建成功。开始领略Memcache的魅力把!

< ?php

$mem = new Memcache;

$mem->connect(”127.0.0.1″, 11211);

$mem->set(’key’, ‘This is a test!’, 0, 60);

$val = $mem->get(’key’);

echo $val;

?>

linux

下载

首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz。除此之外,memcached 用到了 libevent,我下载的是 libevent-1.1a.tar.gz。

接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:

# tar -xzf libevent-1.1a.tar.gz

# cd libevent-1.1a

# ./configure --prefix=/usr

# make

# make install

# cd ..

# tar -xzf memcached-1.1.12.tar.gz

# cd memcached-1.1.12

# ./configure --prefix=/usr

# make

# make install

三、运行 memcached 守护程序

运行 memcached 守护程序很简单,只需一个命令行即可,不需要修改任何配置文件(也没有配置文件给你修改 ):

/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd

参数解释:

-d 以守护程序(daemon)方式运行 memcached;

-m 设置 memcached 可以使用的内存大小,单位为 M;

-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;

-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;

-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。

当然,还有其它参数可以用,man memcached 一下就可以看到了。

四、memcached 的工作原理

首先 memcached

是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括

Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等客户端在与 memcached

服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到

memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached

能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

三、PHP 如何作为 memcached 客户端

有两种方法可以使 PHP 作为 memcached 客户端,调用 memcached 的服务进行对象存取操作。

第一种,PHP 有一个叫做 memcache 的扩展,Linux 下编译时需要带上 –enable-memcache[=DIR] 选项,Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。

除此之外,还有一种方法,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 php-memcached-client。

本文选用第二种方式,虽然效率会比扩展库稍差一些,但问题不大。

四、PHP memcached 应用示例

首先 下载 memcached-client.php,在下载了 memcached-client.php

之后,就可以通过这个文件中的类“memcached”对 memcached 服务进行操作了。其实代码调用非常简单,主要会用到的方法有

add()、get()、replace() 和 delete(),方法说明如下:

add ($key, $val, $exp = 0)

往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间;

get ($key)

从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取;

replace ($key, $value, $exp=0)

使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用;

delete ($key, $time = 0)

删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。

下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:

是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached

中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符

key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):

可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。

之前我曾经写过一篇名为《PHP 实现多服务器共享 SESSION 数据》文章,文中的 SESSION

是使用数据库保存的,在并发访问量大的时候,服务器的负载会很大,经常会超出 MySQL 最大连接数,利用

memcached,我们可以很好地解决这个问题,工作原理如下:

用户访问网页时,查看 memcached 中是否有当前用户的 SESSION 数据,使用 session_id()

作为唯一标识符;如果数据存在,则直接返回,如果不存在,再进行数据库连接,获取 SESSION 数据,并将此数据保存到 memcached

中,供下次使用;

当前的 PHP 运行结束(或使用了 session_write_close())时,会调用 My_Sess::write()

方法,将数据写入数据库,这样的话,每次仍然会有数据库操作,对于这个方法,也需要进行优化。使用一个全局变量,记录用户进入页面时的 SESSION

数据,然后在 write() 方法内比较此数据与想要写入的 SESSION 数据是否相同,不同才进行数据库连接、写入数据库,同时将

memcached 中对应的对象删除,如果相同的话,则表示 SESSION 数据未改变,那么就可以不做任何操作,直接返回了;

那么用户 SESSION 过期时间怎么解决呢?记得 memcached 的 add() 方法有个过期时间参数 $exp

吗?把这个参数值设置成小于 SESSION 最大存活时间即可。另外别忘了给那些一直在线的用户延续 SESSION 时长,这个可以在

write() 方法中解决,通过判断时间,符合条件则更新数据库数据。

php缓存memclear,PHP内存缓存加速功能memcached安装与用法相关推荐

  1. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )

    文章目录 一.Bitmap 内存缓存策略 二.LruCache 内存缓存 三.LruCache 常用操作 四.LruCache 工具类 五.源码及资源下载 官方参考 : Google 官方提供的 内存 ...

  2. iOS开发缓存机制之—内存缓存机制

    在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制. 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇 ...

  3. Android Glide图片加载-缓存机制(内存缓存和磁盘缓存)

    前言 glide的缓存机制.Glide的缓存设计是非常的先进的,考虑的场景也很周全.Glide 的缓存分为两种,一是内存缓存,另一个是硬盘缓存. 这两种缓存的作用各不相同,内存缓存的主要作用是防止应用 ...

  4. Glide清除缓存(清除内存缓存、本地缓存、清除所有缓存等)

    Glide使用讲解 https://blog.csdn.net/bzlj2912009596/article/details/81702367 Glide的图片缓存在/data/data/项目包名/c ...

  5. 剖析Picasso中的内存缓存机制——LruCache

    众所周知,Picasso是一个优秀的Android图片加载库.本篇并不讨论picasso的使用,而是来谈一谈picasso的缓存机制. 我们知道,目前主流的图片解决方案大部分都是三级缓存,即内存缓存. ...

  6. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  7. Android-Universal-Image-Loader学习笔记(3)--内存缓存

    前面的两篇博客写了文件缓存.如今说说Android-Universal-Image-Loader的内存缓存.该内存缓存涉及到的类如图所看到的 这些类的继承关系例如以下图所看到的: 如同文件缓存一样,内 ...

  8. Android UIL图片加载缓存源码分析-内存缓存

    本篇文章我们来分析一下著名图片加载库Android-Universal-Image-Loader的图片缓存源码. 源码环境 版本:V1.9.5 GitHub链接地址:https://github.co ...

  9. Glide 缓存策略 内存缓存和磁盘缓存

    感恩原创:http://www.cnblogs.com/baiqiantao/p/6808457.html Glide 缓存策略 内存缓存和磁盘缓存 官方文档:https://github.com/b ...

  10. android glide不缓存,Glide中的缓存

    本文主要介绍了如何配置和管理Glide中的缓存,其中大部分内容都可以直接在官方Wiki中找到,这里只是进行了整理和汇总.言归正传,Glide支持图片的二级缓存(并不是三级缓存,因为从网络加载并不属于缓 ...

最新文章

  1. 【转载】知乎答案----孙志岗----Google 发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐...
  2. MINA与JMX集成(翻译)
  3. linux运维之道基础命令,Linux运维之道(7)——Linux管理类命令
  4. 2.4、准备Spring Boot的环境 prepareEnvironment
  5. ReactNative之Realm预加载数据
  6. C语言之volatile用法(二十一)
  7. 部署项目在Tomcat出现,tomcat报错More than one fragment with the name [org_apache_tomcat_websocket]
  8. java转发_Java中Request请求转发详解
  9. hadoop的filesplit
  10. Mac/Win 下浏览器网页长截屏(不安装截图软件实现)
  11. 个人总结 - JS逆向解析
  12. 从零开始安装和配置vim (还是vscode香)
  13. SAP ERP 与 Oracle ERP 比较(转)
  14. 基于AlexNet网络的猫十二分类
  15. 阿里程序员常用的 15 款开发者工具
  16. firefox手动设置火狐浏览器的默认主页
  17. 百度地图定位+卫星定位
  18. 凿 壁 偷 光 是白话文的,不要文言文的
  19. Alfred数据室读者群,等你来!
  20. [-128,127]内十进制转二进制

热门文章

  1. 为什么.class文件查看不了_恕我直言,这可能是你见过最详细的class文件结构分析
  2. win7工作组无法查看计算机名,win7系统无法查看工作组计算机怎么解决
  3. 华为harmonyos官方微博账号,华为 EMUI 官方微信和微博更名为 HarmonyOS
  4. 数学问题(一):进制转换
  5. vb6 英文和中文长度不同_PPT里中文排版就是没英文好看?你怕是假酒喝多了…...
  6. 买什么手提电脑好_玉米种子买什么品种好?
  7. html链接描述,HTML常用文本标记,超级链接和路径描述
  8. python横向输出字符串_Python字符串拼接和格式化输出
  9. Anaconda下载和安装指南(超全)
  10. edp协议 netty_EdpProtoDebugger-EdpProtoDebugger(EDP协议调试分析工具)下载 v2.0官方版--pc6下载站...