您的位置:首页 > 运维架构 > Linux

CentOS 6.5 系统安装及LAMP环境安装(yum方式)配置详解(三)

2016-08-24 13:20 1061 查看
一、Memcache的安装和测试

1、使用yum工具安装Memcache

yum -y install memcached memcached-devel

因为之前安装php时已经安装过php-pecl-memcache扩展,这里就不需要再装了



安装成功设置开机启动服务 chkconfig memcached on



查看服务是否启动 netstat -tunpl | grep memcached



然后可以使用telnet测试连接一下memcache

因为没有telnet先安装





连接操作 telnet localhost 11211进行add、set、get操作



2、在php中测试使用memcache:

//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211) or die('Memcache连接失败');
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br />";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//关闭连接
$mem->close();

运行结果



-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
、Memcache组建分布式缓存系统

小型应用只需要在一台服务器上配置缓存就够了,而大型社交类应用需要应对高并发和大数据的处理,所以就需要更多服务器缓存,分布式缓存就是采用多个缓存服务器将任务拆解分开处理。
1、单服务器应用

//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211) or die('连接失败');
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br />";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//关闭连接
$mem->close();

2、分布式应用

//连接
$mem = new Memcache;
$mem->addserver('192.168.220.12',11211);
$mem->addserver('192.168.220.13',11211);
//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$mem->set('key2', 'This is second value', 0, 60);
$mem->set('key3', 'This is third value', 0, 60);
$mem->set('key4', 'This is forth value', 0, 60);
$mem->set('key5', 'This is fifth value', 0, 60);
$val1 = $mem->get('key1');
$val2 = $mem->get('key2');
$val3 = $mem->get('key3');
$val4 = $mem->get('key4');
$val5 = $mem->get('key5');
echo "Get key1 value: " . $val1 ."<br />";
echo "Get key2 value: " . $val2 ."<br />";
echo "Get key3 value: " . $val3 ."<br />";
echo "Get key4 value: " . $val4 ."<br />";
echo "Get key5 value: " . $val5 ."<br />";
//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";
//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";
//关闭连接
$mem->close();

3、集群问题
Memcache存储数据的原理:
先把key做一个哈希算法,得到哈希值;哈希值除以memcache服务器个数,取余,得出存放数据的服务器。
一致性哈希原理:
临时增加一个memcache服务器,则之前key-value存放的服务器就会发生变化,此时取之前的值就会出现问题;此时,我们可以使用一致性哈希原理:每个服务器对应的是一段值,此时增加一个服务器,出现错误的概略会减少,但是,没有办法根治。
内存存储管理:
内存分配:
Memcache把内存分成大小不同的块,当数据来了后,找到一个最小匹配上块,来存储数据。
内存使用:
采用CAS(CAS: ClientAssessService)协议,而不是采用锁,解决多并发访问题。
客户端读取数据时,获得一个CAS-ID,当写入缓存前,先检查客户端CAS-ID和服务器端CAS-ID(最后一个客户端访问时的CAS-ID)是否相同,相同,可以修改,否则,不允许修改,这个和我们使用的版本控制的原理大致是一样的。
内存回收:
Lazy Expiration(惰性检测):
当用户通过key获取数据时才检查数据是否过期,最长过期时间为30d。
LRU(Least RecentlyUsed):
算法:近期最少使用算法。闲置内存—》过期内存—》最少使用。
Memcache和Redis的区别:
都是分布式缓存;官方提供Linux版,但都不提供win版;都可以实现集群的,只不过,Memecache是在客户端设置,而Redis是在服务器端设置;Memcache提供的存储类型单一,Redis提供的类型比较丰富;提供了很多种语言的驱动。
总结:
Memcache和Redis服务器都是分布式缓存思想的具体化,使用他们,可以使我们的web应用程序高效的被更多的用户使用。

4、安全性考虑
memcache的访问是无用户状态,安全性需要考虑,一般通过放在内网,并通过防火墙限制外网访问memcache端口来达到安全。

5、session应用
通过修改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"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: