memcached操作使用

安装:
windows: 进入 cmd , 切换到   memcached.exe  文件所在目录 ,然后使用命令 memcached.exe -d install
启动:memcached -m 200M -d start (默认不加-m为64M)
查看:netstat -an 查看端口监听状况   netstat -anb 看那些程序在监听端口 那些用户连接了服务器
Linux::安装libevent-》安装memcached
启动: Memcahced  –d –m 128 –l 192.168.1.111 –p 11211 –u root [ 表示 128m,  监听 192.168.1.111  端口 11211]
停止 : kill `cat / tmp /memcached.pid`;    Killall    memcached

操作memcached服务:

1、php程序(memcache扩展操作,memcached扩展操作,直接使用socket编程来操作)

2、telent工具

telnet操作

telent 127.0.0.1 11211 连接

add key 0 存放时间(数据大小(字符) (注 0表示不压缩 MEMCACHE_COMPRESSED表示压缩lzip压缩,存放时间为0 永不过期,直接给过期时间为秒数最大为30*3600*24,若想保存超过30天的具体时间则可设为 time()+天数*3600*24

get/add/set/replace/append/prepend
..  key 0 60 5
delete
delete key
incr/decr
incr/decr key number
flush_all
flush_all / flush_all 900 900秒后数据清空
stats
状态
version/quit

php程序操作memcached增删改查

1、加载memcache.dll扩展(优先使用扩展,扩展已经编译过(二进制)速度比源码快
 php_memcache.dll  文件拷贝  php ext  下(不同php版本扩展不一样)
加载 php_memcache.dll  文件(去掉 extension=php_memcache.dll前面的分号
重启apache,代码操作
代码:
 //创建一个mem对象实例
 $mem=new Memcache;
 //连接数据库    
 if(!$mem->connect("127.0.0.1",11211)){
  die('连接失败!');
 }
//存入字符串(除了资源不能存其他都能存,资源会存入0)
$mem->set('key1', 'guugle', MEMCACHE_COMPRESSED, 0);
2、如果不能加载memcache.dll扩展(可使 PHP 源码来操作 memcached 服务
//引入源码

 require_once 'memcached-client.php';

  $mc = new memcached(array(

               'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口

               'debug'   => false, //是否debug

               'compress_threshold' => 10240, /*最大压缩*/

               'persistant' => true)); /*是否是持久连接*/
3、分布式架设
$mem = new Memcache;
$mem->addServer('127.0.0.1',11211);
$mem->addServer('127.0.0.1',9999);
特点:数据不是同步的,是分布的
      把什么样的数据存放到哪一个memcached服务是由客户端的mem对象决定的
      当执行addServer的时候,并不是立即去连接mem服务,而是通过计算hash后才去决定连接哪个mem服务,因此当大量加入服务器到连接池,没有多余开销
memcache细节
生命周期:从数据存入到mem开始计时,直到时间到了,就销毁
什么时候销毁:1、时间到 2、重启memcached服务 3、重启操作系统 4、delete/flush_all销毁
把SESSION存入到memcached
1、修改php.ini配置文件

session.save_handler = memcache

session.save_path = "tcp://127.0.0.1:11211"

key为session_id();
问题点:如果虚拟主机 不让我们修改 php.ini 文件,怎么配置?

ini_set("session.save_handler","memcache");

ini_set("session.save_path","tcp://127.0.0.1:11211");

通过ini_set去动态修改对php.ini配置,只对本页面有效,不会影响其他页面。
memcached 与 session 比较
memcached主要目的是提速,是一种无状态的数据,即数据和用户不绑定
session数据是和用户绑定的,因此他是一种有状态的数据
如何使用memcached才是安全的?
windows:内网+防火墙
Linux:setup配置防火墙   iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT
什么样的数据适合放memcached中?
1、变化频繁、具有不稳定性的数据,不需要实时入库(在线状态、在线人数...)
2、门户网站的新闻、静态化依然不能满足的可存放到memcached中
与redis比较
redis会定时向磁盘中传输

问题:

在另外文件中取出对象时,有个注意的地方,对应php5.2这个版本会提示错误,php5.3这个版本会提示 incomplete 信息解决方法是在要取对象的页面再声明类定义即可

注:

端口号: 0~65535(两个字节表示);有名端口:0-1024  常用占用端口:apache 80  ssh 22   ftp 21 stmp 25  mysql 3306  oracle 1521

序列化/反序列化: 数组或对象 -> serialize  转化成字符串(保证数据信息及其类型和结构不丢失)同时可存储到任何地方。 ->unserialize 转换城数组/对象。

为什么需要序列化:1、对象保存到磁盘中,必须要序列化,不然保存不了。2、数组在网络上传输必须序列化成字符串

什么时候使用serialize 什么时候使用json_encode 

ajax配合时优先使用json_encode


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值