php 执行phpmemcache长连接后需要关闭吗

& Memcache安全配置
Memcache安全配置
0×00 Memcache简介
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。
Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。
0×01 搭建Memcache服务
yum install memcached
安装memcache服务端
yum -y install php-pecl-memcache
安装php扩展操作memcache
php -m | grep memcache
查看php扩展是否安装成功
memcached -d -m 100 -u root -l x.x.x.x -p 11211 -c 512 -P /tmp/memcached.pid
参数说明:
-d选项是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB,我这里是100MB;
-u是运行Memcache的用户,我这里是root;
-l是监听的服务器IP地址我这里指定了服务器的IP地址x.x.x.x;
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口;
-c选项是最大运行的并发连接数,默认是1024,我这里设置了512,按照你服务器的负载量来设定;
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid;
想要结束memcache进程
kill `cat /tmp/memcached.pid`
设置开机启动
chkconfig memcached on
phpMemcachedAdmin图形化界面,操作memcache,类似phpmyadmin
最新版默认界面
Execute Commands on Servers那里可以执行命令。
当然了用telnet其实是一样的。
0×02 memcache匿名访问危害
在乌云提交的漏洞当中,有很多因为memecache限制不严格,导致信息泄露的问题:
从memcache中获取信息通常是先查看items信息:
stats items
stats cachedump
除了查看信息,通用可以修改删除信息。
phpMemcachedAdmin执行命令那里也有个可以搜索key的脚本,并且支持正则匹配。
0×03 查找可匿名访问memcache的方式
memcache默认是11211端口,可使用nmap扫描有开11211端口的服务器。
nmap -n –open -p 11211 X.X.X.X/24
然后telnet上,执行下
stats items
看看是否有返回结果。
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服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。
本文来源:
本文目前尚无任何 trackbacks 和 pingbacks.
Recent Posts关于memcache的使用(入门级问题),memcache已经配置好,如何才能通过使用它来加快访问速度?
[问题点数:60分,结帖人anyilaoliu]
本版专家分:4197
2013年8月 PHP大版内专家分月排行榜第三
结帖率 95.45%
CSDN今日推荐
本版专家分:56166
2015年8月优秀小版主
2012年2月 PHP大版内专家分月排行榜第一2012年1月 PHP大版内专家分月排行榜第一2011年11月 PHP大版内专家分月排行榜第一2011年9月 PHP大版内专家分月排行榜第一
2012年3月 PHP大版内专家分月排行榜第二2011年12月 PHP大版内专家分月排行榜第二2011年10月 PHP大版内专家分月排行榜第二
2013年2月 PHP大版内专家分月排行榜第三2012年9月 PHP大版内专家分月排行榜第三2012年7月 PHP大版内专家分月排行榜第三2012年5月 PHP大版内专家分月排行榜第三
本版专家分:8327
本版专家分:4197
2013年8月 PHP大版内专家分月排行榜第三
本版专家分:389210
2017年 总版技术专家分年内排行榜第四2014年 总版技术专家分年内排行榜第四2013年 总版技术专家分年内排行榜第四2012年 总版技术专家分年内排行榜第六
2018年3月 总版技术专家分月排行榜第一2013年5月 总版技术专家分月排行榜第一
2018年4月 总版技术专家分月排行榜第二2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2016年10月优秀大版主
2016年8月论坛优秀版主优秀大版主2015年7月优秀大版主2015年8月优秀大版主2015年8月优秀大版主2015年9月优秀大版主2015年5月优秀大版主2015年4月优秀版主2014年11月论坛优秀版主
本版专家分:4197
2013年8月 PHP大版内专家分月排行榜第三
本版专家分:1022
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:25
本版专家分:60
本版专家分:0
匿名用户不能发表回复!
其他相关推荐
这里收集了经常被问到的关于memcached的问题
* memcached是怎么工作的?
* memcached最大的优势是什么?
* memcached和MySQL的query cache相比,有什么优缺点?
* memcached和服务器的local cache(比如PHP的APC、mmap文件等)相比,有什么优缺点?
* memcached的cache机制是怎样的?
memcache 常见的集群搭建方案
使用memcache+magent搭建集群
1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的。与之对应的带d的memcached是建立在libmemcached的基础上,所以相对来说,memcached版本的功能更全一些。 2.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。 3.mem
一、使用场景
1、非持久化存储:对数据存储要求不高
2、分布式存储:不适合单机使用
3、Key/Value存储:格式简单,不支持List、Array数据格式
二、PHP中使用Memcache
1、系统类:addServer、addServers、getStats、getVersion
2、数据类:get、set、delete、flush、replace、increment、ge
Nginx的Memc和SR Cache模块
缓存策略的改进
为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统。众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的成熟,越来越多的系统开始转型为LNMP(Linux+Nginx+MySQL+PHP with
fpm),这是因为Nginx采用基于事件机制的I/O多路复用思
memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。很多大型网站都使用了memcached做缓存,下面我将做详细的介绍。
一、memcache简介及安装
1.简介:Memcache是高性能的分布式的高速内存对象缓存系统,基于Key-value型存储。将数据存储在内存里
memcahed实例启动,根据 -f 和 -n 进行预分配slab。以 -n 为最小值开始,以 -f 为比值生成等比数列,直到1m为止(每个slab的chunk size都要按8的倍数进行补全,比如:如果按比值算是556的话,会再加4到560成为8的整倍数)。然后每个slab分配一个page。当用户发来存储请求时(key,value),memcached会计算key+value的大小,看看属于哪个slab。确定slab后看里面的是否有空闲chunk放key+value,如果不够就再向系统申请一个page(如
$id=$_GET['id'];
//$mem-&set($id,1,MEMCACHE_COMPRESSED,0);
$num=$mem-&get($id);
//主要思路是以传过来的数据的值作为键值保存在缓存中,并用$a++的方式使其加上一
然后修改缓存中键值相同的数据。如果是第一次,则自动保存为1.
$mem-&set($id,$num,MEMC
php通过对数据的url编码来实现与javascript的数据交互,但是对于部分特殊字符的编码与javascript的规则不尽相同,请具体说明,这种差异,并针对UTF-8字符集的数据,写出php的编码解码函数和JavaScript的编码解码函数,确保php编码数据可以被JavaScript正确解码、JavaScript编码的数据可以被php正确解码
试阐述不Memcache的key多节点
session的本质:
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。
因此,在某些为了让服务器记住或者认识你的情况下,该怎么办呢?为了解决这个问题,session就诞生了。
session共享:
为什么要session共享呢?如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,用户每次请求的都是这博客访问: 651885
博文数量: 188
博客积分: 4939
博客等级: 上校
技术积分: 2095
注册时间:
分类: 系统运维 15:20:18
断断续续的看几天php,借着其他语言基础,写了个memcache状态抓取代码
$mem =new Memcache; #new关键字生成一个对象
$mem->connect("127.0.0.1",11211); #->调用类方法
$status=$mem->getstats();
foreach($status as $key=>$value)
print "$key $value\n";
$mem->close();
没想到memcache在php里被当做Class了,用new生成一个对象,调用connect方法连接Memcached server,然后getstatus得到状态,最后foreach打印arrry,结果如下:(看来这个memcache很闲啊,几乎什么都没做)
pid& 27890
uptime& 4222
version& 1.4.6
libevent& 2.0.12-stable
pointer_size& 64
rusage_user& 0.001999
rusage_system& 0.006998
curr_connections& 5
total_connections& 20
connection_structures& 6
cmd_get& 15
cmd_set& 15
cmd_flush& 0
get_hits& 15
get_misses& 0
delete_misses& 0
delete_hits& 0
incr_misses& 0
incr_hits& 0
decr_misses& 0
decr_hits& 0
cas_misses& 0
cas_hits& 0
cas_badval& 0
auth_cmds& 0
auth_errors& 0
bytes_read& 683
bytes_written& 11330
limit_maxbytes&
accepting_conns& 1
listen_disabled_num& 0
threads& 4
conn_yields& 0
curr_items& 1
total_items& 15
evictions& 0
reclaimed& 7
要了解memcache相关的类和函数,还得$path/bin/php --re memcache看一下。
&p.s ,memcached数据放在memory里面,一旦重启自然丢失,别忘了它只是cache而已,此外它采用LRU(lease recently used)算法淘汰数据。单台服务器没必要用,因为db/memcached共用resource, 而且网络连接还要额外开销,没有任何意义:)
看来php和python在OOP上还是有区别的,python生成一个对象只需要:
newobject=classname() #可能需要传递参数
newobject.method&&&&& #调用方法。
阅读(2806) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
请登录后评论。关于缓存切换成memcache的问题 - ThinkPHP框架
网站之前一直用文件缓存,会在tmp目录下面生成很多缓存文件,现在想缓存成memcache,但是遇到个问题,memcache安装好了,相关的扩展也安装好了,然后,在配置文件中切换,也弄好了,再运行网站可以正常,本以后这样就算好了,但是我发现tmp目录下还是生成了很多缓存文件,所以就来问问,怎么样才知道是否真的已经切换成功了。
我理解是,要是已经切换成了memcache的话,那tmp目录下应该不会再生成 文件才对!
我切换的步骤:
第一,我先在服务器上安装memcache和memcached和对应的php扩展,并且,写了一个简单的dome,确定安装成功,并且可以使用。
第二,到th3.2.2框架中的Application/Common/Conf/config.php中,把“DATA_CACHE_TYPE”的值改成了memcache,然后再把“MEMCACHE_HOST”的值改成tcp://127.0.0.1:11211,在这之前11211端口已开启,然后就没了!我以为这样应该就可以了,但是tmp下还是生成 了缓存文件。能大概知道是什么问题吗
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。博客分类:
目前,很多大负载站点采用了Memcache作缓存服务,以分担数据库服务器的压力。
这里只介绍在Ubuntu下如何配置Memcache和如何在PHP使用Memecache,对于更深入的了解,比如Memcache的运作机理或更高级的应用还是Google一下…^_^
关于Memcache与memcachedMemcache是项目名,memcached是服务名。让很多初接触的人感觉很是莫名其妙。个人认为正确的应该是用前者用更为正确一点。
安装MemcacheMemcache分为两部分,Memcache服务端和客户端。Memcache服务端是作为服务来运行的,所有数据缓存的建立,存储,删除实际上都是在这里完成的。客户端,在这里我们指的是PHP的可以调用的扩展。
1)安装Memcache服务端
sudo apt-get install memcached
安装完Memcache服务端以后,我们需要启动该服务:
memcached -d -m 128 -p 11211 -u root
这里需要说明一下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 显示帮助
2)安装Memcache客户端
sudo apt-get install php5-memcache
安装完以后我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:
[Memcache]
; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On
; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。
memcache.max_failover_attempts = 20
; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192
; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211
; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = "standard"
;控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = "crc32"
保存php.ini,执行sudo /etc/init.d/apache2 restart重启Apache。
在PHP中使用Memcache
$mem = new M //创建Memcache对象
$mem-&connect('127.0.0.1', 11211); //连接Memcache服务器
$val = “这是一个Memcache的测试.”;
$key = md5($val);
$mem-&set($key, $val, 0, 120); //增加插入一条缓存,缓存时间为120s
if(($k = $mem-&get('key'))){ //判断是否获取到指定的key
echo 'from cache:' . $k;
echo 'normal'; //这里我们在实际使用中就需要替换成查询数据库并创建缓存.
对于key,通常用md5 查询语句来获取,在实际使用中根据具体需要来决定好了…
通过上面的步骤,我们就完成了Memcache的配置和基本使用…
php5-memcache扩展提供的方法
Memcache::add — 添加一个值,如果已经存在,则返回falseMemcache::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 — 在运行时修改服务器的参数
浏览: 19456 次
来自: 深圳
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 phpmemcache分页 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信