导航:首页 > 编程语言 > phpmemcached实例

phpmemcached实例

发布时间:2023-02-11 17:13:48

linux下安装Memcached服务器和客户端与php使用示例

本文实例讲述了Linux下安装Memcached服务器和客户端与php使用。分享给大家供大家参考,具体如下:
Memcached是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度和可扩展性。
系统环境:CentOS
7.2
64位
Apache2.4.33
安装libevent依赖库
wget
https://github.com/downloads/libevent/libevent/libevent-2.0.15-stable.tar.gz
tar
-zxvf
libevent-2.0.15-stable.tar.gz
cd
libevent-2.0.15-stable
./configure
--prefix=/usr/local
make
sudo
make
install
安装Memcached服务器
wget
http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz
tar
-zxvf
memcached-1.4.9.tar.gz
cd
memcached-1.4.9
./configure
--prefix=/usr/local/memcached
make
sudo
make
install
启动Memcache服务器:
/usr/local/memcached/bin/memcached
-d
-m
128
-u
root
-p
11211
安装Memcached客户端
wget
http://pecl.php.net/get/memcache-2.2.5.tgz
tar
-zxvf
memcache-2.2.5.tgz
cd
memcache-2.2.5
./configure
--enable-memcache
--with-php-config=/usr/bin/php-config
--with-zlib-dir
make
sudo
make
install
【make报错:
***
[memcache.lo]
Error
1】解决方法:
进入memcache安装目录,找到mamcache.c文件,将所有的zend_list_insert加上TSRMLS_CC,形如:zend_list_insert(pool,
le_memcache_pool
TSRMLS_CC);
客户端安装好之后,我们发现PHP扩展库中多了一个memcache.so
在PHP配置文件php.ini中加入该扩展:
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/memcache.so
重启服务器,通过输出phpinfo()查看该扩展相关信息
下面写一个简单的例子,实现memcache扩展与Memcached服务器的交互
<?php
$mc
=
new
Memcache();
//创建Memcache对象
$mc->connect("127.0.0.1",
11211);
//连接Memcached服务器
$mc->set('test','hello
world',0,10);
//存储数据
echo
$mc->get('test');
//获取数据
$mc->delete('test');
//删除数据
$mc->flush();
//强制刷新全部缓存,即清空Memcached服务器
$mc->close();
//断开与Memcached服务器的连接
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:linux下安装php的memcached客户端CentOS
5.4下的Memcache安装步骤(Linux+Nginx+PHP+Memcached)linux下安装memcached_动力节点Java学院整理Linux
下安装
memcached

memcacheq的方法在Linux服务器上安装
memcached的基本操作linux下编译安装memcached服务php模块memcache和memcached区别分析php扩展memcached和memcache的安装配置方法PHP
使用memcached简单示例分享PHP
MemCached高级缓存配置图文教程PHP
MemCached
高级缓存应用代码

⑵ windows下 php memcached 设置最大内存

工具:
memcached-1.2.6-win32-bin.zip MemCached服务端程序(for win)
Memcached Manager win下的MemCached管理工具
安装配置MemCached服务端
下载memcached-1.2.6-win32-bin.zip ,解压后得到memcached.exe,就是memcached的主程序了。比如我们放到MemCached服务器下的C:\Program Files\MemCacheD下
下载安装Memcached Manager ,通过这个来管理memcached的服务端。
打开MemCacheD Manager,点击 add Server,填写服务器信息。我这里直接在本地安装了memcached。如图,填完后点击apply,成功的话右侧会出现服务器。
点击Add Instance添加memcached实例。这里有一些配置信息。Ip,端口,内存等等,不解释了。点击apply后会提示你是否现在启动,我们这里选是
成功后发现右侧已经有实例了,到此服务端配置完毕。
二、php安装Memcached模块支持
1、下载php_memcache.dll模块,
你可以从http://downloads.php.net/pierre/找到对应的版本,
php5.3对应php_memcache-2.2.6-5.3-vc9-x86.zip
将php_memcache.dll放到php\ext目录下,
2、修改php.ini来加入扩展,并并重启apache服务器
在php.ini加入一行引用扩展,代码如下:
extension=php_memcache.dll
接着在 php.ini 文件里加上:
[Memcache]
memcache.allow_failover = 1
memcache.max_failover_attempts=20
memcache.chunk_size =8192
memcache.default_port = 11211
最好就放在刚才写 "extension=php_memcache.dll" 的下面。(这是默认的一些配置),重启apache服务器,
然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
测试windows下的Memcached
测试代码如下:
复制代码
<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
$mem->set('key', 'Hello Memcached!', 0, 60);
$val = $mem->get('key');
echo $val;
?>
复制代码

⑶ php memcached怎么用

memcached是一种缓存技术, 基于c/s模式,他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速,
在memachec 中维护了一张大的hashtable表 ,该表是在内存,表的结构是
key value
字串 (字串,数值,数组,对象,布尔,二进制数据,null)

u 安装并使用memcached
安装步骤
(1) 下载memcached软件
(2) 安装
进入cmd ,切换到 memcached.exe 文件所在目录
memcached.exe –d install
(3) 启动memcached
第一种,可以到服务点击启动
第二种, 命令
memcached.exe –m 200MB –d start 【以deamon方式启动,默认64M】

如果你在启动时,win7启动不成功, 则可以使用如下方法
memcached.exe –p 端口号
转载,仅供参考。

⑷ php 使用memcached 怎么做登录

原本就不应该用memcached来保存登录状态,如果非要用memcached做点跟登录有关的事,那就用它来保存以下用户信息就行了。
登录信息保存在session或者cookie里,session会更安全,cookie可以长期保存。每次操作都用session或cookie里的登录信息与数据库里或memcached里的用户信息做验证。
memcached其实是一个内存管理工具,它并非PHP的一部分,只是正好PHP可以使用它。

⑸ PHP中的Memcache和memcached的区别 Memcache的操作方法

Memcached和Memcache是Memcached服务器的扩展


⑹ 如何实现php+session+memcached高可用集群

在这个互联网高度发达的时代,许多应用的用户动辄成百上千万,甚至上亿。为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的。这种情形下,就会涉及到许多单机环境下完全不需要考虑的问题,这其中session的创建、共享和存储是最常见之一。
在单机环境中,Session的创建和存储都是由同一个应用服务器实例来完成,而存储也仅是内存中,最多会在正常的停止服务器的时候,把当前活动的Session钝化到本地,再次启动时重新加载。
而多个实例之间,Session数据是完全隔离的。而为了实现Session的高可用,多实例间数据共享是必然的,下面我们以Redis 的SessionManager实现多Tomcat实例Session共享的配置为例,我们来梳理下一般session共享的流程:
添加具体要使用的manager的Jar文件及其依赖
redis session manager依赖jedis, commons-pool, commons-pool2
对应版本的redis session manager的jar文件
在TOMCAT_HOME/conf/context.xml中增加如下配置
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379" database="0"
maxInactiveInterval="30" />
其中host和port等替换为对应的配置信息
启动多个Tomcat实例,以自带的examples应用为例进行验证
访问examples应用的servlets/servlet/SessionExample,
在页面中添加数据到session中,并查看页面上对应的session信息
访问另一个实例上相同应用的页面,查看session信息,两者应该是一致的
使用redis-cli查看redis中存储的对应数据,相应的sessionId对应的数据已经保存了下来
以上是一个基本的配置过程,而在这些配置与验证的步骤中,第二步是核心逻辑实现。 前面的文章,曾介绍过Tomcat的Valve,在请求处理时,Pipeline中的各个Valve的invoke方法会依次执行。Tomcat的AccessLogValve介绍
此处的session处理,就是以一个自定义Valve的形式进行的。关于Session的文章,前面也写过几篇,会附在结尾处。
以下是RedisSessionhandlerValve的invoke方法,我们看,主要是在Valve执行后进行Session的存储或移除。
public void invoke(Request request, Response response) {
try {
getNext().invoke(request, response);
} finally {
final Session session = request.getSessionInternal(false);
storeOrRemoveSession(session);
manager.afterRequest();
}
}
而session的保存和移除又是通过manager执行的。 manager.save(session); manager.remove(session);
这里,manager就是前面定义的RedisSessionManager。默认单实例情况下,我们使用的都是StandardManager,对比一下两者,标准的Manager对于session的创建和删除,都会调到其父类ManagerBase中相应的方法,
public void add(Session session) {
sessions.put(session.getIdInternal(), session);
int size = getActiveSessions();
if( size > maxActive ) {
synchronized(maxActiveUpdateLock) {
if( size > maxActive ) {
maxActive = size;
}
}
}
}
public void remove(Session session, boolean update) {
if (session.getIdInternal() != null) {
sessions.remove(session.getIdInternal());
}
}
我们来看,由于其只保存在内存的Map中protected Map<String, Session> sessions = new
ConcurrentHashMap<>(),每个Tomcat实例都对于不同的map,多个实例间无法共享数据。
对应到RedisSessionManager对于session的处理,都是直接操作redis,基本代码是下面这个样:
public void save(Session session) throws IOException {
Jedis jedis = null;
Boolean error = true;
try {
RedisSession redisSession = (RedisSession) session;
Boolean sessionIsDirty = redisSession.isDirty();
redisSession.resetDirtyTracking();
byte[] binaryId = redisSession.getId().getBytes();
jedis = acquireConnection();
if (sessionIsDirty || currentSessionIsPersisted.get() != true) {
jedis.set(binaryId, serializer.serializeFrom(redisSession));
}
currentSessionIsPersisted.set(true);
jedis.expire(binaryId, getMaxInactiveInterval());
} }
移除时的操作是这样的
public void remove(Session session, boolean update) {
Jedis jedis = null;
Boolean error = true;
log.trace("Removing session ID : " + session.getId());
try {
jedis = acquireConnection();
jedis.del(session.getId());
error = false;
} finally {
if (jedis != null) {
returnConnection(jedis, error);
}
}
}
而此时,多个Tomcat实例都读取相同的Redis,session数据是共享的,其它实例的初始请求过来时,由于会执行findSession的操作,此时会从Redis中加载session,
public Session findSession(String id) throws IOException {
RedisSession session;
if (id == null) {
session = null;
currentSessionIsPersisted.set(false);
} else if (id.equals(currentSessionId.get())) {
session = currentSession.get();
} else {
session = loadSessionFromRedis(id); // 看这里,会从redis中load
if (session != null) {
currentSessionIsPersisted.set(true);
}
}
currentSession.set(session);
currentSessionId.set(id);
return session;
}
从而可以保证在一个实例被切换后,另外的实例可以继续响应同一个session的请求。
以上即为Redis实现session共享高可用的一些关键内容。有兴趣的朋友可以看下通过Memcached实现高可用,也是这个原理。顺着这个思路,如果你有将Session存储在其它地方的需求时,完全可以写一个出来,自己动手,丰衣足食。
总结一下,我们是通过自定义的Valve来实现请求后session的拦截,同时,使用自定义的SessionManager,来满足不同的session创建与存储的需求。而至于是存储在Redis/Memcached中,还是存储在DB中,只是位置的区别。原理,是一致的。

阅读全文

与phpmemcached实例相关的资料

热点内容
连涨启动源码 浏览:159
小奔运动app网络异常怎么回事 浏览:447
php开启压缩 浏览:303
服务器主机如何设置启动 浏览:282
linux配置网络命令 浏览:774
一张照片怎么制作视频app 浏览:908
pythonweb和php 浏览:976
电脑服务器地址ip地址 浏览:823
对矩阵压缩是为了 浏览:910
setfacl命令 浏览:172
linux子系统中断 浏览:342
linux查看进程ps 浏览:224
知识库系统php 浏览:623
小波变换压缩图像python 浏览:151
阿里巴巴程序员怎么月入百万 浏览:173
如何使用国外服务器 浏览:188
燃灯者pdf 浏览:468
编译器用数学吗 浏览:7
图形化apk反编译工具 浏览:48
考勤表加密怎么办 浏览:736