memcached
来源:互联网 发布:c语言余弦相似度 编辑:程序博客网 时间:2024/06/18 13:37
memcached技术的主要目的提速,//基于c/s架构
在memachec 中维护了一张大的hashtable表 ,该表是在内存,表的结构是
key value
字串(不能重复) (字串,数值,数组,对象,布尔,二进制数据,null)
安装并使用memcached
//服务端的安装
memcached需要依赖到以下的一系列包
gcc
libevent
glibc-devel
下载
cd /home/download
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
安装
tar -zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr/local/libevent
make && make install
tar -zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
启动
/usr/local/memcached/bin/memcached -d -m 64 -u root -p 11211 -c 1024 -P /var/memcached.pid
-d 为守护进程
-m 为分配的内存量
-u 运行memcached的用户
-p 监听的端口
-c 最大的并发连接数
-P 保存pid文件
还有很多的启动选项,通过帮助查看
/usr/local/memcached/bin/memcached -h
测试
在windows开启命令行
telnet 192.168.1.100 11211
用telnet测试一下以下命令
stats 查询状态
version 查询版本
quit 退出
flush_all 清空缓存数据
//使用php程序操作memcached服务 curd.
步骤,准备工作.
//扩展资源包
把 php_memcache.dll 文件拷贝 php的ext 下
☞ 不同版本的php 所使用的 php_memcache.dll 的版本不一样
//启用扩展,修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)
extension=php_memcache.dll //加载php_memcache.dll 文件
//重新启动apache
//用php程序来完成curd操作.
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )
//若expire 设为0 表示,永不过期.(只要memcache不重新启动,就永远在mem中)
//exprie 直接给的是秒数,则最大 30*3600*24
//如果希望保持时间超过30 ,则 time()+天数*3600*24 即可
步骤
//实例化一个Memcache对象
//以socket ip+端口号形式,连接Memcached服务
//Curd操作
最后代码:
mem1.php
<?php
//创建一个mem对象实例
$mem=new Memcache;
if(!$mem->connect("127.0.0.1",11211)){
die('连接失败!');
}
//增加
//1.增加一个字串
/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){
echo '添加ok';
}*/
//3.添加数组
//在添加数组是,根据需要. 希望序列号放入 ,
//serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode
$arr=array("bj",'tj');
if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){
echo '添加数组ok99111';
}
//4.添加对象
/* class Dog{
public $name;
public $age;
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
}
$dog1=new Dog('小狗',50);
if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){
echo '添加对象ok';
}*/
//查询
$val=$mem->get('key1');
var_dump($val);
//修改
//可以使用replace
if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){
echo 'replace ok';
}else{
echo 'replace no ok';
}
//删除
echo "<br/>";
if($mem->delete('key14')){
echo 'key14 删除';
}else{
echo 'key14不存在';
}
mem2.php
<?php
//这个文件去操作memcached服务
//创建一个mem对象实例
$mem=new Memcache;
if(!$mem->connect("127.0.0.1",11211)){
die('连接失败!');
}
//在另外文件中取出对象时,有个注意的地方,对应php5.2这个版本会提示错误,
//对php5.3这个版本会提示 incomplete 信息, 解决方法是声明类定义即可
class Dog{
public $name;
public $age;
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
}
$dog=$mem->get('key1');
var_dump($dog);
test.php 说明serilize 和 json_encode用法:
//什么时候使用serilize 什么时候使用json_encode [ajax配合]
Memcached 机制的深入了解
//服务器客户端通信采用的是简单的文本行协议。
//libevent事件处理,支持高并发
// memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除
//基于客户端的分布式,
memcached作为缓存层,需要缓存的内容会越来越多,当一台服务器无法承受所有缓存的内
容时,就需要考虑将memcache调整为分布式,通过多台服务器来分担缓存的压力。
客户端担当分布式的master,通过客户端的分布函数(默认哈希取余的方式)来将缓存的key分散到不同服务器上
③ , memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除
写段代码说明: mem4.php
mem5.php 取出.
总结:
1. mem服务的数据不是同步, 数据是分布的
2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
//memcache的细节讨论
① 生命周期
从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:
1. 时间到
2. 重启memcached服务
3. 重启memcached服务所在的机器
4. delete / flush 销毁数据
5.
② 如何把session数据放入到memcached服务中.
步骤:
1. 修改php.ini的配置文件
如下:
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
③ 测试一把,重启apache
④
测试ok
<?php
//传统的代码
session_start();
$_SESSION['name']='天龙八部300';
$_SESSION['city']='beijing';
class Dog{
public $name;
}
$dog1=new Dog;
$dog1->name='abcde';
$_SESSION['dog']=$dog1;
//如果session数据放入mem,那他一定是以session_id为
//key值进行添加
//取出
$name=$_SESSION['name'];
echo "name=$name";
echo "sessionid=".session_id();
思考,如果管理员,不让我们修改 php.ini 文件,我们如何处理session入memcached这个功能, 我们通过一个函数可以去修改 php.ini 的配置.
代码:
<?php
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://127.0.0.1:9999");
同时你也可以通过 ini_set 去动态的修改对php.ini 的其它设置 。但是他不影响其它php页面,也不会去修改php.ini 文件本身, 只对本页面生效.
memcached vs session比较
memcached 主要的目的是提速 ,因此它是一种无状态的数据.即,数据不和用户绑定.
session数据是和绑定的,因此是一种有状态数据.
memached安全性
如何使用memcached 服务才是安全的.
在windows下通过启用防火墙来保护我们的memcached,原理图:
在linux 也可以使用防火墙.
setup 配置防火墙
iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT
在memachec 中维护了一张大的hashtable表 ,该表是在内存,表的结构是
key value
字串(不能重复) (字串,数值,数组,对象,布尔,二进制数据,null)
安装并使用memcached
//服务端的安装
memcached需要依赖到以下的一系列包
gcc
libevent
glibc-devel
下载
cd /home/download
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://www.danga.com/memcached/dist/memcached-1.4.0.tar.gz
安装
tar -zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr/local/libevent
make && make install
tar -zxvf memcached-1.4.0.tar.gz
cd memcached-1.4.0
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
启动
/usr/local/memcached/bin/memcached -d -m 64 -u root -p 11211 -c 1024 -P /var/memcached.pid
-d 为守护进程
-m 为分配的内存量
-u 运行memcached的用户
-p 监听的端口
-c 最大的并发连接数
-P 保存pid文件
还有很多的启动选项,通过帮助查看
/usr/local/memcached/bin/memcached -h
测试
在windows开启命令行
telnet 192.168.1.100 11211
用telnet测试一下以下命令
stats 查询状态
version 查询版本
quit 退出
flush_all 清空缓存数据
//使用php程序操作memcached服务 curd.
步骤,准备工作.
//扩展资源包
把 php_memcache.dll 文件拷贝 php的ext 下
☞ 不同版本的php 所使用的 php_memcache.dll 的版本不一样
//启用扩展,修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)
extension=php_memcache.dll //加载php_memcache.dll 文件
//重新启动apache
//用php程序来完成curd操作.
bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )
//若expire 设为0 表示,永不过期.(只要memcache不重新启动,就永远在mem中)
//exprie 直接给的是秒数,则最大 30*3600*24
//如果希望保持时间超过30 ,则 time()+天数*3600*24 即可
步骤
//实例化一个Memcache对象
//以socket ip+端口号形式,连接Memcached服务
//Curd操作
最后代码:
mem1.php
<?php
//创建一个mem对象实例
$mem=new Memcache;
if(!$mem->connect("127.0.0.1",11211)){
die('连接失败!');
}
//增加
//1.增加一个字串
/* if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){
echo '添加ok';
}*/
//3.添加数组
//在添加数组是,根据需要. 希望序列号放入 ,
//serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode
$arr=array("bj",'tj');
if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){
echo '添加数组ok99111';
}
//4.添加对象
/* class Dog{
public $name;
public $age;
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
}
$dog1=new Dog('小狗',50);
if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){
echo '添加对象ok';
}*/
//查询
$val=$mem->get('key1');
var_dump($val);
//修改
//可以使用replace
if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){
echo 'replace ok';
}else{
echo 'replace no ok';
}
//删除
echo "<br/>";
if($mem->delete('key14')){
echo 'key14 删除';
}else{
echo 'key14不存在';
}
mem2.php
<?php
//这个文件去操作memcached服务
//创建一个mem对象实例
$mem=new Memcache;
if(!$mem->connect("127.0.0.1",11211)){
die('连接失败!');
}
//在另外文件中取出对象时,有个注意的地方,对应php5.2这个版本会提示错误,
//对php5.3这个版本会提示 incomplete 信息, 解决方法是声明类定义即可
class Dog{
public $name;
public $age;
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
}
$dog=$mem->get('key1');
var_dump($dog);
test.php 说明serilize 和 json_encode用法:
//什么时候使用serilize 什么时候使用json_encode [ajax配合]
Memcached 机制的深入了解
//服务器客户端通信采用的是简单的文本行协议。
//libevent事件处理,支持高并发
// memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除
//基于客户端的分布式,
memcached作为缓存层,需要缓存的内容会越来越多,当一台服务器无法承受所有缓存的内
容时,就需要考虑将memcache调整为分布式,通过多台服务器来分担缓存的压力。
客户端担当分布式的master,通过客户端的分布函数(默认哈希取余的方式)来将缓存的key分散到不同服务器上
③ , memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除
写段代码说明: mem4.php
mem5.php 取出.
总结:
1. mem服务的数据不是同步, 数据是分布的
2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
//memcache的细节讨论
① 生命周期
从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:
1. 时间到
2. 重启memcached服务
3. 重启memcached服务所在的机器
4. delete / flush 销毁数据
5.
② 如何把session数据放入到memcached服务中.
步骤:
1. 修改php.ini的配置文件
如下:
;[sesson.save_handler 有user|files|memcache]
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
③ 测试一把,重启apache
④
测试ok
<?php
//传统的代码
session_start();
$_SESSION['name']='天龙八部300';
$_SESSION['city']='beijing';
class Dog{
public $name;
}
$dog1=new Dog;
$dog1->name='abcde';
$_SESSION['dog']=$dog1;
//如果session数据放入mem,那他一定是以session_id为
//key值进行添加
//取出
$name=$_SESSION['name'];
echo "name=$name";
echo "sessionid=".session_id();
思考,如果管理员,不让我们修改 php.ini 文件,我们如何处理session入memcached这个功能, 我们通过一个函数可以去修改 php.ini 的配置.
代码:
<?php
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://127.0.0.1:9999");
同时你也可以通过 ini_set 去动态的修改对php.ini 的其它设置 。但是他不影响其它php页面,也不会去修改php.ini 文件本身, 只对本页面生效.
memcached vs session比较
memcached 主要的目的是提速 ,因此它是一种无状态的数据.即,数据不和用户绑定.
session数据是和绑定的,因此是一种有状态数据.
memached安全性
如何使用memcached 服务才是安全的.
在windows下通过启用防火墙来保护我们的memcached,原理图:
在linux 也可以使用防火墙.
setup 配置防火墙
iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT
阅读全文
0 0
- Memcached
- memcached
- Memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- Memcached
- memcached
- memcached
- memcached
- HTML学习---------1.6HTML代码注释
- 开灯问题
- JAVA数据结构:栈和队列
- eclipse配置JavaWeb开发环境
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- memcached
- NPM
- Fiddler:如何读取本地文件修改Request参数
- Bazel的入门
- Spring MVC DispatcherServlet详解
- 组合选择器之多元素选择器
- 09 uboot的配置编译主过程分析
- Python中的sorted函数以及operator.itemgetter函数
- Minimum Moves to Equal Array Elements