memcache的简单应用

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作;作为PHP开发人员,我们一般能想到的方法有页面静态化处理、防盗链、CDN内容分发加速访问、mysql数据库优化建立索引、架设apache服务器集群、还有就是现在流行的各种分布式缓存技术:如memcached/redis;
1.什么是Memcached?
a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
b.Memcached的键key一般是字符串,该值不能重复;value可以放入字符串、数组、数值、对象、布尔,二进制数据和图片视频
c.Memcached默认服务端口是11211
2.PHP使用Memcached步骤
<1>准备:参照配置
<2>开始实践,memcached主要有crud操作(即创建、读取、更新、删除值操作,具体可以查阅手册),下面弄个简单的设置值,然后读取值的操作
a.设置值页面

[PHP] 纯文本查看 复制代码

?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

<?php

header("Content-type:text/html;charset=utf-8");

//创建Memcache对象

$mem = new Memcache(); 

//连接Memcache服务器

if(!$mem--->connect("127.0.0.1")) {

    echo "连接Memcache服务器失败!";

}

 

//设置,‘myword‘参数代表键key,‘hello world‘代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒

if ($mem->set(‘myword‘,‘hello world‘,MEMCACHE_COMPRESSED,50))

{

    echo "设置值成功!";

}

 

?>

注:如果值在内存存放的时间要超过30天,要用时间戳来设置100天:如time()+3600*24*100;设置0则表示永不过期

b.读取值页面

[PHP] 纯文本查看 复制代码

?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

<?php

header("Content-type:text/html;charset=utf-8");

$mem = new Memcache(); 

if(!$mem--->connect("127.0.0.1")) {

    echo "连接Memcache服务器失败!";

}

 

//读取键myword值

$value = $mem->get(‘myword‘);

if(!$value)

{

    echo "读取失败!";

}

else

{

    echo "读取的值=".$value;

}

c.删除、更新例子:

[PHP] 纯文本查看 复制代码

?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<?php

header("Content-type:text/html;charset=utf-8");

//创建Memcache对象

$mem = new Memcache(); 

//连接Memcache服务器

if(!$mem--->connect("127.0.0.1")) {

    echo "连接Memcache服务器失败!";

}

 

//设置,‘myword‘参数代表键key,‘hello world‘代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒

if ($mem->set(‘myword‘,‘hello world‘,MEMCACHE_COMPRESSED,50))

{

    echo "设置值成功!";

}

 

//读取键myword值

$value = $mem->get(‘myword‘);

if(!$value)

{

    echo "读取失败!";

}

else

{

    echo "读取的值=".$value;

}

 

//更新键值

$mem->replace(‘myword‘,‘hello everybody!‘);

 

$value = $mem->get(‘myword‘);

if(!$value)

{

    echo "读取失败!";

}

else

{

    echo "读取的值=".$value;

}

 

//删除键myword值

$mem->delete(‘myword‘);

 

$value = $mem->get(‘myword‘);

if(!$value)

{

    echo "读取失败!";

}

else

{

    echo "读取的值=".$value;

}

 

//关闭

$mem->close(); 

?>

注:mem对象下还有许多方法,可以通过翻阅手册了解。

<3>多个memcached服务器设置,其实就比一个memcached服务器改变一点点,就是把多个memcached的服务器通过方法addserver添加到连接池中,这样设置完后,crud操作时,内部就会通过相应算法均衡连接相应服务器并执行相应操作中。

[PHP] 纯文本查看 复制代码

?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<?php

header("Content-type:text/html;charset=utf-8");

//创建Memcache对象

$mem = new Memcache();

//添加多台memcached服务器

$mem->addserver(‘192.168.0.1‘,11211);

$mem->addserver(‘192.168.0.2‘,11211);

$mem->addserver(‘192.168.0.3‘,11211);

$mem->addserver(‘192.168.0.4‘,11211);

 

 

//设置,‘myword‘参数代表键key,‘hello world‘代表存放的值,MEMCACHE_COMPRESSED代表压缩内容,50代表存放时间,单位秒

if ($mem->set(‘myword‘,‘hello world‘,MEMCACHE_COMPRESSED,50))

{

    echo "设置值成功!";

}

 

//读取键myword值

$value = $mem->get(‘myword‘);

if(!$value)

{

    echo "读取失败!";

}

else

{

    echo "读取的值=".$value;

}

 

?>

<4>memcache的访问是无用户状态,安全性需要考虑,一般通过放在内网,并通过防火墙限制外网访问memcache端口来达到安全
<5>通过修改php.ini,可以把session的值放入memcache服务器中
session.save_handler = files改成session.save_handler = memcached
session.save_path = "N;MODE;/path"改成 session.save_path = "tcp://127.0.0.1:11211"

时间: 2024-08-06 16:00:54

memcache的简单应用的相关文章

Memcache的简单笔记

一.原理和流程 Memcache是高性能的分布式的内存缓存系统,一般作为数据库的前端cache使用,来减轻数据库的压力,提高系统对数据的响应速度: 其特征如下: (1)协议简单,基于libevent的事件处理: (2)内置的内存管理方式:使用LRU算法,当数据快占满指定的内存空间时,新数据会重用过期数据的内存空间: (3)每个MEMCACHE服务器相对独立,互不通信: 在系统应用中,其操作流程如下: (1)当客户端查询数据时,先查看memcache是否存在,如果存在,直接把请求的数据返回给客户端

cmem、redis、memcache的简单比较

性能上: 三者都是使用共享内存对数据进行cache来提升数据的读写能力,性能比较高效(还有个ttserver) 操作的便利性上: memcache数据结构比较单一,都是key-value cmem比memcache多一个按列模式和局部模式 redis 丰富一些,提供 list,set,hash 等数据结构的存储. 可用性上: Memcache 本身没有数据冗余机制,对于故障预防,采用依赖成熟的 hash 或者环状的算法,解决单点故障引起的抖动问题 redis依赖客户端来实现分布式读写:主从复制时

Unix环境下简单的部署memchache

在很多大型网站或者是资讯类站点下往往都会有海量的查询,那么为了减小数据库的压力就出现了缓存系统,现在比较流行的缓存系统有很多,如memcache.Xcache.redis等等,在这里就简单的说说开源的memcache的简单部署和使用. memcache的使用要依赖于libevent网络库,所以在安装memcache之前必需要先安装libevent网络库然后再安装memcache,这里在二者的官网上都有稳定版的二进制包下载.libevent官网:http://libevent.org/,memca

redis与memcache的区别2

总结一: memcache官方定义 Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. redis官方定义 Redis is an open source, BSD lic

PHP中的数据库二、memcache

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

Redis简介 &amp; 与Memcache的区别

redis 是一个基于内存的高性能key-value数据库. Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存.因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB.        Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制

大话redis/memcache缓存

一.Memcache特性1. memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性.2. Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题.3. memcache 存在内存中,分配的内存满后,会按一定的规则删除一些k/v数据,重启后自然全部丢失.4. 过期策略--memcache在set时就指定,例如set key1 0 0 8,

memcache和redis区别

memcache和redis区别 2014年4月27日mood暂无评论 memcache官方定义 Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. redis官方定义Re

php开发服务器之 memcache缓存数据

Memcache,Redis 1.都是用来管理数据的 2.他们数据都是存放在内存 3.Redis可以定期将数据备份到磁盘(持久化) 4.Memcache只是简单的key/value缓存 5.Redis不仅仅支持简单的key/value类型数据, 同时还提供list,set,hash等数据结构的存储 Mysql如果操作数据: 1.需要mysql服务器 2.需要操作mysql数据库的终端(如navicat) 3.需要mysql服务器地址,端口号(默认3306) 4.连接到地址,写sql命令. 5.服