• 欢迎来到本博客,希望可以y一起学习与分享

Memcached

综合 benz 3年前 (2018-04-12) 128次浏览 0个评论 扫描二维码
文章目录[隐藏]

介绍:

memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速,memcached就是在内存中维护一张巨大的hash表,通过自己的一套算法来维护数据的操作, 该表是在内存,表的结构是

key value
字串 (字串,数值,数组,对象,布尔,二进制数据,null)

原理说明:

安装并使用memcached

安装步骤

  • 下载memcached软件
  • 安装
    进入cmd ,切换到 memcached.exe 文件所在目录
    执行安装命令:memcached.exe –d install
  • 启动memcached
    第一种,可以到服务点击启动
    第二种, 命令行
    memcached.exe –m 200MB –d start 【以deamon方式启动,默认64M】

如果你在启动时,win7启动不成功, 则可以使用如下方法

memcached.exe –p 端口号

 

启动方法不要关闭控制台.

 

端口号的范围 : 0-65535  , 因为端口号是用两个字节来表示

有名端口: 0-1024 已经用程序使用 , apache 80  , mysql 3306 , ftp 21 , ssh 22

oracle: 1521, stmp: 25

 

使用netstat –an 如果看到 11211端口在监听,说明启动ok

netstat –anb 是哪个程序监听, 这个指令还可以看到有哪些用户连接到我们的服务器.

 

如果没有安装好,原因可能

  1. 如果你是win7, win7对安全性高,所有,必须以adminstartor 身份来安装.

你切换成adminstrator , 去安装,在启动

  1. 你的exe 目录有中文,或特殊字符, 保证目录没有中文和特殊字符.

对memcached进行curd操作

看看telnet如何操作 (curd)

 

    • 1. 登录到telnet连接到 memcached服务
      telnet 127.0.0.1 11211

如果你们不能使用telnet 是因为系统不存在 telnet.exe , 就可以到其它机器上拷贝 telnet.exe 放在 c:\windows\system32 即可

  • 2. 增加
    基本语法是:
    add key名 0 存放时间(秒) 数据大小(字符)
    举例:
    add key1 0 30 5
  • 3. 如何获取
    基本语法是:
    get key值
    get key1
  • 4. 修改set key名 0 存放时间 数据大小.举例:
    set key1 0 40 5
    ☞ 如果key1不存在,则相当于增加新,如果存在,则相当有替换replace key名 存放时间 数据大小
    replace key1 0 40 5
    ☞ 如果key1不存在,则失败,这个指令要求key必须存在.
  • 5. 删除
    基本语法是
    delete key名
    比如
    delete key1
append Append data to existing key append key 0 60 15
prepend Prepend data to existing key prepend key 0 60 15

flush_all 可以统一把数据清空.

status命令,查看memcache 统计信息


这里主要大家可以去计算出命中率 cmd_hits/cmd_get . 越高越好.

如何使用php程序操作我们的memcached服务

步骤,准备工作

  • 把 dll 文件拷贝 php的ext 下
    ☞ 不同版本的php 所使用的 php_memcache.dll 的版本不一样
  • 修改ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)extension=php_memcache.dll
  • 重新启动apache
  • 我们写程序来完成curd操作.
细节:

在我们添加数据的时候

bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

如果报 expire 设为0 表示,永不过期.(只要memcache不重新启动,就永远在memcache中)

exprie 直接给的是秒数,则最大 30*3600*24(使用时间秒最长只能保存30天)

如果你希望保持时间超过30  time()+天数*3600*24 即可(使用Unix时间戳可以保存超过30天)

最后代码:

一个页面存入对象,另外一个页面取出对象时报错的解决办法

下面是另外一个页面取出数据时的代码

什么时候使用serilize 什么时候使用json_encode [ajax配合]

使用PHP源码来操作memcached服务(socket.io编程)

如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作.

下载  memcached-client.php (直接下载)(下载页面)文件,并关闭扩展.

Memcached 机制的深入了解


                           ③ , memcache的数据是放入到内存,并且在数据爆满的情况下,使用LRU 算法删除


写段代码说明:


取出数据

总结:

  • 1. mem服务的数据不是同步, 数据是分布的
  • 2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
  • 3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销

memcache的细节讨论

生命周期

从数据放入mem开始计时,直到时间到了,就销毁, 如果时间为0, 则表示不过期.
memcache的数据被销毁的情况如下:

  • 1. 时间到
  • 2. 重启memcached服务
  • 3. 重启memcached服务所在的机器
  • 4. delete / flush 销毁数据

如何把session数据放入到memcached服务中.

步骤:

  • 1. 修改php.ini的配置文件
    如下:
    ;[sesson.save_handler 有user|files|memcache]
    session.save_handler = memcache
    session.save_path = "tcp://127.0.0.1:11211"
  • 2. 测试一把,重启apache
    测试ok

ini_set 动态修改php.ini 的设置

如果管理员,不让我们修改 php.ini 文件,我们如何处理session入memcached这个功能, 我们通过ini_set函数可以去修改 php.ini 的配置.

代码如下:

同时你也可以通过 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

什么样的数据适合放入memcached中?

附录

memcache的深入了解(百度网盘(a7xf)


文章 Memcached 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!