memcache 的介绍

第一章:memcached 介绍

1-1 memcached 是什么?

memcached  是以LiveJournal  旗下 Danga  公司开发的一款软件。

free & open source, high-performance, distributed memory object caching system

自由&开放源码, 高性能 ,分布式的内存对象缓存系统

官方网站:http://memcached.org/

1-2 memcached 应用图解

许多 Web应用都将数据保存到 RDBMS 中,应用服务器从中读取数据并在浏览器中显示。但随着数 据量的增大、访问的集中,就会出现 RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大 影响。

这时就该 memcached 大显身手了。memcached 是高性能的分布式内存缓存服务器。一般的使用目的 是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

image

注 RDBMS:Relational Database Management System


第二章:memcached 基本使用

2-1 memcached 的特性

memcached 作为高速运行的分布式缓存服务器,具有以下的特点

  • 协议简单
  • 基于 libevent的事件处理
  • 内置内存存储方式
  • memcached 不互相通信的分布式

协议简单

memcached 的服务器客户端通信并不使用复杂的 XML等格式,而使用简单的基于文本行的协议。 因此,通过 telnet也能在memcached 上保存数据、取得数据。

举个栗子

$ telnet localhost 11211
Trying 127.0.0.1...
命令介绍
set foo 0 0 3 (保存命令)
bar (数据)
STORED (结果)
get foo (取得命令)
VALUE foo 0 3 (数据)
bar (数据)

2-2 window 下 memcache 安装

打开cmd,用cd命令 切换至memcache目录下

## 一步完成安装
memcached.exe -d   install 

## 卸载
memcached.exe -d   uninstall 

2-3 window 下 memcache 启动

## 普通启动
memcached -d start   

## 监听端口启动
memcached -p 11212

## 启动 memcache 端口11211 给他分配32M内存并且打印操作信息
memcache.exe -p 11211 -m 32 -vv  
命令介绍
-p <num> 监听的TCP端口 (缺省: 11211)
-d 以守护进程方式运行Memcached
-u <username> 运行Memcached的账户,非root用户
-m <num> 最大的内存使用, 单位是MB,缺省是 64 MB
-c <num> 软连接数量, 缺省是 1024
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
-h 打印帮助信息
-i 打印memcached和libevent的版权信息

2-4 window 下 memcache 简单操作

1. telnet操作memcache

确保本地已经安装 telnet

安装步骤:

控制面板==>程序==>启用或关闭windows功能==>Telnet客户端

打开 cmd ,使用telnet 连接至memcache

telnet  127.0.0.1  11211

2. 数据存储命令

a. set 命令 格式:set key flag expiretime bytes

说明:有则改无则增

举个栗子

set username 0 0 4 

注:最后一位是字节,那么在输入存如内容时,大小必须是2个字节,否则存储不成功。

b. add 命令 格式:add key flag expiretime bytes

说明:addset一致,区别是不能添加已经存在一个key为username的数据,否则不成功。

举个栗子

add username 0 0 4

数据修改命令

a. replace 命令 格式: replace key flag expiretime bytes

说明:replace与set一致,区别是只有数据存在时才能进行数据更新,如果replace一个不存在的key的数据,则replace不成功。

举个栗子

replace username 0 0 4

数据读取命令

a. get命令 格式: get key

说明:get空格key 可以获取指定key的数据。多个key可以用空格隔开

举个栗子

get username  

数据删除命令 a. delete命令 格式:delete key

说明:删除已存在的键值和不存在的记录可以返回不同的结果。

举个栗子

delete username  

b. 清空所有数据 flush_all [time]

举个栗子

flush_all[60] 

注: time参数是指是所有缓存失效,并在time秒内限制使用删除的key

其他命令

a. 增减: incr/decr key value 举个栗子

incr age 1 
decr age 1

b. 服务器状态命令 stats

名称解释
STAT pid 22459 进程ID
STAT uptime 1027046 服务器运行秒数
STAT time 1273043062 服务器当前unix时间戳
STAT version 1.4.4 服务器版本
STAT pointer_size 64 操作系统字大小(64位)
STAT total_connections 82 曾打开的连接总数
STAT cmd_get 54 执行get命令总数
STAT cmd_set 34 执行set命令总数
STAT cmd_flush 指向flush_all命令总数
STAT get_hits 9 get命中次数
STAT get_misses 45 get未命中次数
STAT delete_misses 5 delete未命中次数
STAT delete_hits 1 delete命中次数
STAT accepting_conns 1 目前接受的链接数
STAT bytes 0 存储item字节数
STAT curr_items 0 item个数
STAT evictions 0 为获取空间删除item的总数

名词解释

key是什么? (add/replace/set 的第一个参数)

  • key是缓存名 memcached的一个重要特点就是key-value缓存 即键值对缓存. 每个缓存有一个独特的名字和存储空间.
  • key是操作数据的唯一标识
  • key可以250个字节以内,不能有空格和控制字节

flag有什么用? (add/replace/set 的第二个参数)

flag是"标志"的意思,可以用此参数来标志内容的类型 对于字符串,直接存5个字符即可, 对于array,则需要序列化.

Q:取出数据时,又如何处理呢?

A:字符串,取回直接用, 数组,则需要反序列化成数组.

提示:在memcache中可以忽略flag参数memcache自动识别

expire是啥(add/replace/set 的第三个参数)

说明:过期时间 可以为时间戳 也可以是秒数 默认是0 永久有效(其实并不是永久有效,下面会给大家说)

Q:expire以什么为单位?

A:秒为单位
Q:expire的秒数代表什么?

A:如果expire<=30*24*60*60,则代表自当前时间的偏移,即有效期在 time()+expire以内.

如果expire > 30 * 24 * 60 * 60 ,则直接代表时间戳.

即,在1970年+expire秒以内有效.

第三章:Linux 平台下搭建 memcached 服务

3-1 编译安装 Memcached 服务

在 linux 编译,需要 gcc,make,cmake,autoconf,libtool 等工具,所以请先装. 【Linux 系统需联网】,命令安装

# yum install gcc make cmake autoconf libtool

memcached 依赖于 libevent 库,因此我们需要先安装 libevent.

分别到 libevent.org 和 memcached.org 下载最新的 stable 版本(稳定版).

libevent 官网:http://libevent.org

下载地址(Github地址)

编译安装 libevent

wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz

tar zxvf libevent-2.0.21-stable.tar.gz 
cd libevent-2.0.21-stable
./configure --prefix=/usr/local/libevent
make && make install

再编译安装 memcached

Memcached 官网:http://memcached.org/

编译 memcached 时要指定 libevent 的路径.

wget http://www.memcached.org/files/memcached-1.4.36.tar.gz

tar zxvf memcached-1.4.36.tar.gz 
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/
make && make install

memcached 的启动 从终端输入以下命令,启动 memcached。

# /usr/local/memcached/bin/memcached -p 11211 -m 64m -u root -vv

作为 daemon 后台启动时,只需 -d

# /usr/local/memcached/bin/memcached -p 11211 -m 64m -u root -d

这里使用的 memcached 启动选项的内容如下。

选项说明
-p 使用的 TCP端口。默认为 11211
-m 最大内存大小。默认为64M
-vv 用 very vrebose 模式启动,调试信息和错误输出到控制台
-d 作为 daemon 在后台启动

上面四个是常用的启动选项,其他还有很多,通过

# /usr/local/memcached/bin/memcached -h

命令可以显示。许多选项可以改变 memcached 的各种行为,推荐读一读。

常出现问题一:

在虚拟机下练习编译,一个容易碰到的问题---虚拟机的时间不对, 导致的 gcc 编译过程中,检测时间通不过,一直处于编译过程.

解决方法:

# date -s 'yyyy-mm-dd hh:mm:ss'

# clock -w  # 把时间写入 cmos

常出现问题二:

[root@iZ2ze2mkw2q2od0ctv8jnfZ memcached]# bin/memcached 
can't run as root without the -u switch

解释:没有指定- u开关不能作为根用户运行

3-2 Memcache 服务的安全

此时本地客户端Telnet或php程序就可以连接至线上Memcache,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵。

解决方案

1. 内网访问

把两台服务器之间的访问是内网形态的,一般是Web服务器跟Memcache服务器之间。。普遍的服务器都是有两块网卡,一块指向互联网,一块指向内网,那么就让Web服务器通过内网的网卡来访问Memcache服务器,

Memcache的服务器上启动的时候就监听内网的IP地址和端口。

# memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

启动监听内网的127.0.0.1的ip的11211端口,占用1024MB内存,并且允许最大1024个并发连接

2. 设置防火墙

如若必可避免暴漏在外网,防火墙是简单有效的方式,那么可以考虑使用防火墙来过滤非法访问。

一般我们在Linux下可以使用iptables或者FreeBSD下的ipfw来指定一些规则防止一些非法的访问。

# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT

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

3-3 Linux 上编译 memcached 扩展

3-3-1 编译安装 libmemcached

安装基础依赖库

yum -y install gcc gcc-c++ libstdc++-devel

libmemcached 官网 http://libmemcached.org/libMemcached.html

编译安装

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz

tar libmemcached-1.0.18.tar.gz 
tar zxvf libmemcached-1.0.18.tar.gz 
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached
make && make install

3-3-2 编译安装 memcached

下载 Memcached 扩展包 下载地址:http://pecl.php.net/package/memcached

wget http://pecl.php.net/get/memcached-3.0.3.tgz
tar memcached-3.0.3.tgz 
tar zxvf memcached-3.0.3.tgz 
cd memcached-3.0.3

/usr/local/php/bin/phpize 

./configure --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached/ --disable-memcached-sasl

make && make install

如果看到如下结果,那么恭喜您。

[root@iZ2ze2mkw2q2od0ctv8jnfZ memcached-3.0.3]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/

打开自己环境中的 php.ini,加入如下

# vim /usr/local/php/lib/php.ini 

extension=memcached.so

打印 phpinfo()ctrl+f 搜索 memcached,看到如下

image

至此,你的PHP已支持memcached收工。

错误分析

configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check

按提示所说--disable-memcached-sasl禁用该选项即可。

3-3 Memcache 存储SESSION

方法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" 

6-1 Memcache 的监控

6-1-1 memcache.php

http://pecl.php.net/package/memcache

从 memcache-3.0.8.tgz 包中找到 memcache.php,拷贝至你的项目下,进行如下配置

define('ADMIN_USERNAME','memcache'); 	// Admin Username
define('ADMIN_PASSWORD','password');  	// Admin Password
$MEMCACHE_SERVERS[] = 'mymemcache-server1:11211'; // add more as an array
$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

不用多说,相信你懂的,完成以上配置后,访问(本宝宝的访问地址):http://localhost/memcache.php

image

6-1-2 memcache-top

这个工具memcache-top是一个perl脚本,可以运行在term下。它能够像top一样显示各个memcached节点的状态变化,其中包括系统管理员最关心的几个指数,例如:缓存命中率、内存、使用率、读写QPS等。

运行前要确保memcache-top脚本具有可执行权限 chmod u+x *.sh ,然后使用./执行即可。

memcache-top 比较重要的几个参数包括:

  • –commands: 显示GETS/SETS命令的调用次数

  • –sleep: 刷新间隔,默认为3秒

  • –lifetime: 显示自memcached启动以来的累计统计值,默认关闭,即仅显示瞬时速率

image

6-1-3 memadmin

基于 PHP5 & JQuery 的 Memcached 管理监控工具

官方网址: http://www.junopen.com/memadmin/


posted @ 2018-07-17 15:50  渐行渐远见陌生  阅读(564)  评论(0编辑  收藏  举报