- 浏览: 162495 次
- 性别:
- 来自: 北京
最新评论
-
BlueAeri:
好像旧了,有些参数没有,比如 --cups
VBoxManage命令详解 -
jiamb:
非常感谢!
学习ibatis的一些资料 -
memory_in_08:
正急着找ibatis的此资料呢,3k you..
学习ibatis的一些资料 -
小猪笨笨:
多谢···
学习ibatis的一些资料 -
mingxiao2010:
谢谢你的分享!!
学习ibatis的一些资料
Memcache是什么
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
Memcache官方网站:http://www.danga.com/memcached,更多详细的信息可以来这里了解
为什么会有Memcache和memcached两种名称?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
Memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。
具体的配置大家可以参考:
Linux下的Memcache安装:http://www.ccvita.com/index.php/257.html
Windows下的Memcache安装:http://www.ccvita.com/index.php/258.html
Memcache基础教程:http://www.ccvita.com/index.php/259.html
PHP的Memcache
//连接
$mem = new Memcache;
$mem->connect("192.168.0.200", 12000);
//保存数据
$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();
?>
如果正常的话,浏览器将输出:
Get key1 value: This is first value
Get key1 value: This is replace value
Get key2 value: Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd )
Get key1 value:
Get key2 value:
程序代码分析
初始化一个Memcache的对象:
$mem = new Memcache;
连接到我们的Memcache服务器端,第一个参数是服务器的IP地址,也可以是主机名,第二个参数是Memcache的开放的端口:
$mem->connect("192.168.0.200", 12000);
保存一个数据到Memcache服务器上,第一个参数是数据的key,用来定位一个数据,第二个参数是需要保存的数据内容,这里是一个字符串,第三个参数是一个标记,一般设置为0或者MEMCACHE_COMPRESSED就行了,第四个参数是数据的有效期,就是说数据在这个时间内是有效的,如果过去这个时间,那么会被Memcache服务器端清除掉这个数据,单位是秒,如果设置为0,则是永远有效,我们这里设置了60,就是一分钟有效时间:
$mem->set(‘key1‘, ‘This is first value’, 0, 60);
从Memcache服务器端获取一条数据,它只有一个参数,就是需要获取数据的key,我们这里是上一步设置的key1,现在获取这个数据后输出输出:
$val = $mem->get(’key1′);
echo "Get key1 value: " . $val;
现在是使用replace方法来替换掉上面key1的值,replace方法的参数跟set是一样的,不过第一个参数key1是必须是要替换数据内容的key,最后输出了:
$mem->replace(‘key1′, ‘This is replace value’, 0, 60);
$val = $mem->get(‘key1′);
echo "Get key1 value: " . $val;
同样的,Memcache也是可以保存数组的,下面是在Memcache上面保存了一个数组,然后获取回来并输出
$arr = array(‘aaa’, ‘bbb’, ‘ccc’, ‘ddd’);
$mem->set(‘key2′, $arr, 0, 60);
$val2 = $mem->get(‘key2′);
print_r($val2);
现在删除一个数据,使用delte接口,参数就是一个key,然后就能够把Memcache服务器这个key的数据删除,最后输出的时候没有结果
$mem->delete(‘key1′);
$val = $mem->get(‘key1′);
echo "Get key1 value: " . $val . "<br>";
最后我们把所有的保存在Memcache服务器上的数据都清除,会发现数据都没有了,最后输出key2的数据为空,最后关闭连接
$mem->flush();
$val2 = $mem->get(‘key2′);
echo "Get key2 value: ";
print_r($val2);
echo "<br>";
Memcache的使用
使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。我这里简单提出我的个人看法,未经实践,权当参考。
分布式应用
Memcache本来支持分布式,我们客户端稍加改造,更好的支持。我们的key可以适当进行有规律的封装,比如以user为主的网站来说,每个用户都有User ID,那么可以按照固定的ID来进行提取和存取,比如1开头的用户保存在第一台Memcache服务器上,以2开头的用户的数据保存在第二胎Mecache服务器上,存取数据都先按照User ID来进行相应的转换和存取。
但是这个有缺点,就是需要对User ID进行判断,如果业务不一致,或者其他类型的应用,可能不是那么合适,那么可以根据自己的实际业务来进行考虑,或者去想更合适的方法。
减少数据库压力
这个算是比较重要的,所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能极具下降,无法同时服务更多的用户,比如MySQL,特别频繁的锁表,那么让Memcache来分担数据库的压力吧。我们需要一种改动比较小,并且能够不会大规模改变前端的方式来进行改变目前的架构。
我考虑的一种简单方法:
后端的数据库操作模块,把所有的Select操作提取出来(update/delete/insert不管),然后把对应的SQL进行相应的hash算法计算得出一个hash数据key(比如MD5或者SHA),然后把这个key去Memcache中查找数据,如果这个数据不存在,说明还没写入到缓存中,那么从数据库把数据提取出来,一个是数组类格式,然后把数据在set到Memcache中,key就是这个SQL的hash值,然后相应的设置一个失效时间,比如一个小时,那么一个小时中的数据都是从缓存中提取的,有效减少数据库的压力。缺点是数据不实时,当数据做了修改以后,无法实时到前端显示,并且还有可能对内存占用比较大,毕竟每次select出来的数据数量可能比较巨大,这个是需要考虑的因素。
Memcache的安全
我们上面的Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。
内网访问
最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的访问能够有效阻止其他非法的访问。
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcache服务器端设置监听通过内网的192.168.0.200的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接
设置防火墙
防火墙是简单有效的方式,如果却是两台服务器都是挂在网的,并且需要通过外网IP来访问Memcache的话,那么可以考虑使用防火墙或者代理程序来过滤非法访问。
一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问,比如我们可以设置只允许我们的Web服务器来访问我们Memcache服务器,同时阻止其他的访问。
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做
发表评论
-
JavaScript的5种调用函数的方法
2011-03-22 17:49 867http://www.cnblogs.com/lhb25/ar ... -
svn keywords
2010-11-10 09:58 761Keyword Substitution ... -
(转载)memcached命令
2010-05-14 16:40 2648命令行查看Memcached运行状态 很多时候需要监控服务器 ... -
( 转载)如何用Sysctl调整Linux操作系统的性能
2010-02-01 14:17 1167Sysctl是一个允许您改变正在运行中的Linux系统的接口。 ... -
linux tcp 连接的配置
2009-12-14 10:46 4485tcp_syn_retries :INTEGER默认值是5对于 ... -
给VirtualBox的linux系统共享window的目录
2009-07-21 16:46 2506VirtualBox上装了Ubuntu8, 那么如何共享Vis ... -
linux服务器优化调优笔记
2009-07-20 18:40 1899++不使用atime属性,例需为/data设置notime,可 ... -
减少Linux下服务器的TIME_WAIT套接字数量
2009-07-20 18:25 1455Squid是一种用来缓冲Internet数据的软件。它是这样实 ... -
自我评价表
2009-06-28 21:48 10431。技能检验 编程技能 ... -
vim 格式化
2009-06-26 10:22 1396"""""& ... -
设置ubuntu不启动图形界面
2009-06-22 18:03 17361.安装 rcconf 2.执行 rcconf 命令 3. ... -
简单的 vim 配置(转)
2009-06-18 10:45 898简单的 vim 配置(转)2008-02-20 19:37在终 ... -
memcached 安装日志
2009-05-19 17:08 7781、下载memcached-1.2.1.tar.gz和libe ... -
限制Apache并发连接数
2009-04-27 20:17 1942限制Apache并发连接数 大型动态系统中,如果客户端不顾 ... -
双机集群(HA)系统
2009-04-27 11:36 1283双机集群(HA)系统 LATCH HA ... -
eclipse 反编译插件
2009-03-12 20:30 748下载附件查看 -
在 MyEclipse 5.1GA 上使用 XFire 编写 Web Service
2009-02-13 15:05 1643注:本文对于在MyEclipse 下使用xfire帮助很大,个 ... -
Squid是什么?
2009-02-11 10:15 28501.Squid是什么? S ... -
VBoxManage命令详解
2008-12-24 17:04 11330VBoxManage命令详解 本人对vboxmange命令按我 ... -
如何实现eclipse中代码自动提示功能
2008-11-11 13:54 1659eclipse版本3.0时就已经支持代码提示功能,以前使用在 ...
相关推荐
计算机后端-PHP视频教程. Memcached01 memcache是什么.wmv
首先,了解Memcache是什么至关重要。Memcache是一种高性能的分布式内存对象缓存系统,它可以用来存储数据,如数据库查询结果、session数据等,以减少对数据库的访问,提高Web应用的性能。由于它是内存存储,因此数据...
1. **什么是Memcache?** Memcache是一种高性能的、分布式的内存对象缓存系统,用于临时存储(或缓存)中间结果或频繁访问的数据,以减少数据库的负载。它主要用于加速动态Web应用,通过将数据存储在内存中,避免了...
Memcache是什么** Memcache(Memcached)是一种高性能、分布式内存对象缓存系统,最初由Danga Interactive为LiveJournal开发,但很快被很多其他网站采用。Memcached通过在内存中存储数据并提供快速访问,减轻了对...
**Memcache 深度解析** Memcache 是一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于缓解数据库的负载压力。它通过将数据存储在内存中,以便快速访问,从而提高应用程序的响应速度。在本文中,...
### Memcache安装与基本操作详解 #### 一、前言 Memcache是一种高性能的分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负担。本文将详细介绍如何安装配置Memcache,并提供基本的操作示例。 #### 二、...
**Memcache Win版服务器与.NET驱动详解** Memcache是一款高性能的分布式内存缓存系统,它最初是为了解决Web应用程序的数据库负载问题而设计的。通过将数据存储在内存中,Memcache能够快速地提供数据,减少对数据库...
memcache是广泛应用于Web开发中的一个内存对象缓存系统,它能够提高网站性能,通过将数据存储在内存中,减少对数据库的访问,从而加快数据读取速度。 PHP的memcache扩展允许开发者在PHP应用程序中与memcached服务器...
Memcache 是一种广泛使用的分布式内存缓存系统,用于在 Web 应用程序中提高数据读取速度,通过存储经常访问的数据到内存中,避免了频繁的数据库查询,从而提升了整体性能。 描述中的“实测可以使用”意味着这个 ...
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问。
Memcache是一种高性能的分布式内存对象缓存系统,它能够减轻数据库负载,加快动态网页的响应速度。以下将详细介绍如何在Windows 7环境下安装和使用Memcache。 首先,你需要确保你的计算机上已经安装了PHP环境。这里...
【Memcache原理及实现】 Memcache,全称Memcached,是一种高性能的分布式内存对象缓存系统,主要用于减轻数据库的负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcache最初由...
Memcache是一种广泛使用的分布式内存对象缓存系统,它可以在服务器集群间通过网络共享小块内存,从而提升应用程序的性能,减少数据库负载。在PHP中,我们通常使用php_memcache.dll扩展来与Memcache服务器进行交互。...
$memcache = new Memcache; // 连接到Memcached服务器 $memcache->connect('localhost', 11211) or die("无法连接"); // 存储数据 $memcache->set('key', 'value', 0, 60); // key是键,value是值,0表示非持久化...
memcache图形监控工具phpmemcache,尽是一个PHP文件就可以实现对memcache的监控。 使用方法:本地测试监控机安装Apache或者下载XAMPP(Apache+MySQL+PHP+PERL),安装后把memcachephp.zip中的memcache.php文件放到...
**Nginx的Memcache模块**是Web服务器Nginx的一个扩展,用于缓存动态内容,提高网站性能。Memcache是一种高性能的分布式内存对象缓存系统,它可以在内存中存储各种格式的数据,如字符串、整型、二进制对象等,以减少...
**MEMCACHE_COMPRESSED** 是一个整型常量,用于在使用`Memcache::set()`, `Memcache::add()`和相关方法时开启压缩功能,这有助于在网络传输过程中减小数据包的大小,从而提高数据读写效率,特别适用于处理大量文本或...
### Spring与Memcache集成知识点详解 #### 一、Spring与Memcache简介 - **Spring**:Spring框架是Java平台上的一个开源应用框架,提供了一种简单的方式来管理对象生命周期以及依赖关系,同时也支持AOP(面向切面...
MemCache是一种广泛应用于Web开发中的高性能分布式内存对象缓存系统,其主要目的是通过将数据存储在内存中,以便快速访问,从而显著提升系统的响应速度。最初由Danga Interactive开发,主要用于提升LiveJournal的...
**标题:“memcache 万能”** 在IT领域,Memcache是一个广泛使用的高性能、分布式内存对象缓存系统,主要用于减少数据库负载,提升Web应用的性能。"memcache 万能"可能指的是经过优化或修改的版本,使得它能在各种...