一、编绎安装Memcached

二、Memcached基本命令

四、PHP扩展模块安装

五、设置session用memcache来存储

六、PHP使用Memcache的一致性哈希连接方式

七、Memcached的安全性

关于memcache与memcached,首先服务器上安装的提供服务的软件名称叫memcached,不过我们通常都叫它memcache,PHP用来连接操作memcached的扩展有两个,即memcache扩展和memcached扩展。

一、编绎安装Memcached

1、环境准备

系统:Centos6.4最小安装+开发工具包

Memcached所需要的库:libevent

2、安装libevent

# tar xzvf libevent-1.4.14b-stable.tar.gz

# cd libevent-1.4.14b-stable

# ./configure --prefix=/usr/local/libevent

# Make && make install

3、安装memcached

# tar xzvf memcached-1.4..tar.gz

# cd memcached-1.4.

# ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

# make && make install

二、Memcached基本命令
1、启动 memcached

./memcached -d -m  -p 

# 常用启动参数
-d 启动一个守护进程
-vv 调试信息和错误输出到控制台
-m 分配给memcache使用的内存数量,单位是mb,默认是64mb
-u 运行memcached的用户
-l 监听的服务器ip地址
-p 设置memcached监听的端口,最好是1024以上的端口
-c 设置最大运行的并发连接数,默认是1024
-P 设置保存memcached的pid文件

这会以守护程序的形式启动 memcached(-d),为其分配 2GB 内存(-m 2048),并指定监听 localhost,即端口 11211。
2、连接到 memcached

telnet localhost 

3、memcached增删改查

3.1 修改命令语法

command <key> <flags> <expiration> <bytes>
<value>
command 操作命令:set、add、repalce
Key 字符串,<250个字符,不包含空格和控制字符
Flags 客户端用来标识数据格式的数值,如json,xml,压缩等
Expiration 存活时间(秒),0为永久。
Bytes 在缓存中存储的字节点
Value 存储的值

3.2 set
set 命令用于向缓存添加新的键值对。如果键已经存在,则之前的值将被替换。

set userId   

STORED

如果使用 set 命令正确设定了键值对,服务器将使用单词 STORED 进行响应。本示例向缓存中添加了一个键值对,其键为 userId,其值为 12345。并将过期时间设置为 30秒。

3.3 add
仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。

set userId   

STORED

add userId   

NOT_STORED

add companyId   

STORED

3.4 replace
仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,那么您将从 memcached 服务器接受到一条 NOT_STORED 响应。

replace accountId   

NOT_STORED

set accountId   

STORED

replace accountId   

STORED

3.5 get
get 命令用于检索与之前添加的键值对相关的值,如果这个键存在于缓存中,则返回相应的值。如果不存在,则不返回任何内容。

set userId   

STORED

get userId
VALUE userId END get bob
END

3.6 delete
delete 命令用于删除 memcached 中的任何现有值。您将使用一个键调用 delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条 NOT_FOUND 消息。

set userId   

STORED

delete bob
NOT_FOUND delete userId
DELETED get userId
END

4、缓存管理命令

4.1 stats
stats 命令的功能是转储所连接的memcached实例的当前统计数据。

stats
STAT pid
STAT uptime
STAT time
STAT version 1.4.
STAT pointer_size
STAT rusage_user 1.177192
STAT rusage_system 2.365370
STAT curr_items
STAT total_items
STAT bytes
STAT curr_connections
STAT total_connections
STAT connection_structures
STAT cmd_get
STAT cmd_set
STAT get_hits
STAT get_misses
STAT evictions
STAT bytes_read
STAT bytes_written
STAT limit_maxbytes
STAT threads

4.2 flush_all
flush_all用于清理缓存中的所有名称/值对。

三、缓存性能

名称

描述

pid

Memcached进程ID

uptime

Memcached运行时间,单位:秒

time

Memcached当前的UNIX时间

version

Memcached的版本号

rusage_user

该进程累计的用户时间,单位:秒

rusage_system

该进程累计的系统时间,单位:秒

curr_connections

当前连接数量

total_connections

Memcached运行以来接受的连接总数

connection_structures

Memcached分配的连接结构的数量

cmd_get

查询请求总数

get_hits

查询成功获取数据的总次数

get_misses

查询成功未获取到数据的总次数

cmd_set

存储(添加/更新)请求总数

bytes

Memcached当前存储内容所占用字节数

bytes_read

Memcached从网络读取到的总字节数

bytes_written

Memcached向网络发送的总字节数

limit_maxbytes

Memcached在存储时被允许使用的字节总数

curr_items

Memcached当前存储的内容数量

total_items

Memcached启动以来存储过的内容总数

evictions

LRU释放对象数,用来释放内存

根据stats所获得到的统计结果,我们可以确定缓存的利用率。初次启动缓存时,可以看到 get_misses会自然地增加,但在经过一定的使用量之后,get_misses值应该会逐渐趋于平稳,这表示缓存主要用于常见的读取操作。确定缓存效率的另一种方法是查看缓存的命中率(hit ratio)。缓存命中率表示执行get的次数与错过get的次数的百分比,即get_hits/cmd_get*100%。

四、PHP扩展模块安装

Memcache扩展安装

下载地址:http://pecl.php.net/package/memcache

 # tar zxvf memcache-2.2..tgz
# cd memcache-2.2.
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
# 完成之后会显示扩展文件的安装路径,类似:/usr/local/php/lib/php/extensions/no-debug-non-zts-/

# 编辑php.ini

# 确保extension_dir的路径为make install之后显示的路径

# 加入extension = memcache.so 

Memcached扩展安装

软件准备:libmemcached、memcached

libmemcached下载地址:https://launchpad.net/libmemcached/+download

memcached下载地址:http://pecl.php.net/package/memcached

#安装libmemcached

# tar zxvf libmemcached-1.0..tar.gz
# cd libmemcached-1.0. # ./configure --prefix=/usr/local/libmemcached --with-memcached # make && make install
#安装memcached
# tar zxvf memcached-2.1..tgz
# cd memcached-2.1.
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
# make && make install
#完成之后会显示扩展文件的安装路径,类似:/usr/local/php/lib/php/extensions/no-debug-non-zts-/

# 编辑php.ini

# 确保extension_dir的路径为make install之后显示的路径

# 加入extension = memcached.so 

五、设置session用memcache来存储

方法I: 在php.ini中全局设置

session.save_handler = memcache  

session.save_path = "tcp://127.0.0.1:11211"  
方法II: 再程序中动态设置

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

ini_set("session.save_path", "tcp://127.0.0.1:11211");  
方法III: htaccess 文件设置

php_value session.save_handler "memcache"  

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

session.save_path可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,使用多个memcached服务器时用逗号","隔开,如:" tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2 "。

六、PHP使用Memcache的一致性哈希连接方式

PHP中自带了两个memcache扩展,即memcache扩展和memcached扩展,默认情况下,两个扩展均采用余数计算分散的分布式算法,这种分布式在添加或移除服务器时,缓存重组的代价相当巨大。添加或移除服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率,在Web应用程序中使用memcached时,在添加memcached服务器的瞬间缓存效率会大幅度下降,负载会集中到数据库服务器上,有可能会数据库服务器的崩溃,因此推荐使用一致性哈希算法。一至性哈希算法(Consistent Hashing)能够最大限度地减小服务器增减时的缓存重新分布。

Memcache扩展使用一至性哈希算法配置:

修改php.ini

memcache.hash_strategy = 'consistent';

也可以在程序中动态设置

ini_set('memcache.hash_strategy', 'consistent'); 

Memcached扩展使用一至性哈希算法配置:

$mc = new memcached();

$mc->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT );

$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE , true); 

七、Memcached的安全性

Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵,因为Mecache是以root权限运行的,况且里面可能存在一些我们未知的bug或者是缓冲区溢出的情况,这些都是我们未知的,所以危险性是可以预见的。为了安全起见,我做两点建议,能够稍微的防止黑客的入侵或者数据的泄露。

内网访问
最好把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,我们Memcache的服务器上启动的时候就监听内网的IP地址和端口,内网间的访问能够有效阻止其他非法的访问。

# memcached -d -m  -u root -l 192.168.0.200 -p  -c  -P /tmp/memcached.pid
Memcached服务器端设置监听通过内网的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 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport -j ACCEPT

上面的iptables规则就是只允许192.168.0.2这台Web服务器对Memcache服务器的访问,能够有效的阻止一些非法访问,相应的也可以增加一些其他的规则来加强安全性,这个可以根据自己的需要来做。

我的Memcache学习笔记的更多相关文章

  1. Memcache学习笔记

    以下内容大部分来自网络,小部分是本人遇到的问题融合后的记录. 先贴一段涨姿势~ Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全 ...

  2. Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

     PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...

  3. Memcache 学习笔记(一)----Memcache — Linux部署

    Memcache 一.Memcache简介(内容摘自 --百度百科) memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以 ...

  4. 强哥memcache学习笔记

    搭建memcache服务器:1.在内存中缓存数据2.数据形态以key->value memcache优点:1.快速缓存2.跨域登录memcache缺点:1.复杂的数据存取的操作2.不能永久保存数 ...

  5. memcache 学习笔记

    Memcached是国外社区网站LiveJournal的开发团队开发的高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展 ...

  6. Memcached学习笔记

    [TOC] 前言 此为学习笔记汇总,如有纰漏之处,还望不吝指出,谢谢. 启动流程 调用settings_init()设定初始化参数 从启动命令中读取参数来设置setting值 设定LIMIT参数 开始 ...

  7. 两千行PHP学习笔记

    亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...

  8. MVC学习笔记索引帖

    [MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...

  9. PHP 开发 APP 接口 学习笔记与总结 - Redis 缓存

    Redis 可以定期将数据备份到磁盘中(持久化),同时不仅仅支持简单的key/value 类型的数据,同时还提供list,set,hash等数据结构的存储:Memcache 只是简单的key/valu ...

随机推荐

  1. 二、CSS 基本介绍

    [ 显示目录 ] [ 隐藏 ] 目录 基本概念 CSS组成部分 CSS的规则 引入CSS样式的方法 颜色的表示 CSS Reset 选择器分类 浮动 盒子模型 box-sizing属性 实例:实现“田 ...

  2. toB的产品经理和toc产品经理区别

    腾讯产品经理现身说法 曾经在UC做过2年to c的app,现在在腾讯做to b的产品. 做to c产品的时候,我很瞧不起做to b产品的同学,认为他们不过是做支撑的. 后来,我参与了一个to b平台级 ...

  3. HDU 5273 Dylans loves sequence (逆序对,暴力)

    题意: 给定一个序列,对于q个询问:(L,R)之间有几个逆序对?序列元素个数上限1000,q上限10万.仅1测试例子. 思路: [L,R]的逆序对数量可以这么算,假设L<=K<R,将区间拆 ...

  4. Linux管道的实现机制

    7.1.1 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制.从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: ...

  5. css3用AnimationEnd判断动画是否完成, css3在动画完成后执行事件

    用css3的animation完成一个动画,当只有这个动画完成时才执行令一个事件,比如让动画保持在终止的状态或其他一些事件.我们该怎么办呢. 第一种方法: 用计时器,设定一个和动画时长一样的time, ...

  6. 深入理解 AngularJS 的 Scope(转)

    一.遇到的问题 问题发生在使用 AngularJS 嵌套 Controller 的时候.因为每个 Controller 都有它对应的 Scope(相当于作用域.控制范围),所以 Controller ...

  7. UITabbar item 设置笔记

    很长一段时间都是用代码来写UITabbarController,试着用xib来写一次,但是遇到tabbar item的图标自定义的时候不知道从何入手,比如定义选定前和选定后的icon图片,这地方还是不 ...

  8. Apache Conf/Vost/xx.conf 文件配置

    #监听8086端口Listen 8086 NameVirtualHost *:8086#保持绝对一致 <VirtualHost *:> ServerName localhost Serve ...

  9. Android 着色器 Tint 研究

    Tint 这个东西 主要用来减少apk体积的,比如说我现在有一个textview,他的背景图 有两种,一种是当获得焦点时显示的a图,另一种是 失去焦点时显示的b图. 相信大家开发的时候 这种需求做过很 ...

  10. Less的学习(一)

    1.html部分 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...