什么是Memcached?
免费和开源,高性能,分布式内存对象缓存系统,本质上是通用的,但旨在通过减轻数据库负载来加速动态Web应用程序。
Memcached 是一个内存中的键值存储,用于存储来自数据库调用、API 调用或页面呈现结果的任意数据(字符串、对象)的小块。
Memcached简单而强大。其简单的设计促进了快速部署,易于开发,并解决了大数据缓存面临的许多问题。它的API可用于大多数流行的语言。
使用 Memcached 后的架构图
有了Memcached ,我们就可以通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性
![Memcached 缓存构架] (/static/i/memcached_goujia.jpg)
Memcached 官网
Memcached 特征
Memcached作为高速运行的分布式缓存服务器,具有以下的特点
- 协议简单,使用文本协议,使用换行符作为命令结束
- 基于 libevent 的事件处理
- 内置内存存储方式
- Memcached 使用客户端哈希的不互相通信的分布式
Linux(Centos/Ubuntu) Memcached 安装
Memcached 支持许多平台:Linux、FreeBSD、Centos、Ubuntu 、Solaris、Mac OS
当然也支持安装在 Windows 上
Linux 系统安装 Memcached,首先要先安装 libevent 库
安装 libevent
Ubuntu / Debian 系统
sudo apt-get install libevent libevent-devel
Redhat / Fedora / Centos 系统
yum install libevent libevent-devel
FreeBSD 系统
portmaster databases/libevent databases/libevent-devel
MacOS 系统
安装 Memcached
使用软件管理器自动安装
Ubuntu / Debian 自动安装
sudo apt-get install memcached
Redhat / Fedora / Centos 自动安装
FreeBSD 自动安装
portmaster databases/memcached
MacOS 使用 brew 安装
brew install libmemcached memcached
Linux 源代码安装
从 官方网站 (http://memcached.org) 下载 Memcached 最新版本
截止今日,最新版本地址为 http://memcached.org/files/memcached-1.5.1.tar.gz
以下命令要一条一条执行,忽略 # 开头的注释
# 下载最新版本 wget http://memcached.org/files/memcached-1.5.1.tar.gz # 解压缩 tar -zxvf memcached-1.5.1.tar.gz # 进入目录 cd memcached-1.5.1 # 配置编译文件 ./configure —prefix=/usr/local/memcached # 编译 make && make test # 安装 sudo make install
运行 Memcached 服务
用 which 命令查看 memcached 位置
$ which memcached
输出结果
/usr/local/bin/memcached
Memcached命令的运行:
查看 Memcached 启动选项
$ /usr/local/bin/memcached -h
启动选项: 概览
- -d 是启动一个守护进程
- -m 是分配给Memcache使用的内存数量,单位是MB
- -u 是运行Memcache的用户
- -l 是监听的服务器IP地址,可以有多个地址
- -p 是设置Memcache监听的端口,默认是 11211 ,最好是1024以上的端口
- -c 是最大运行的并发连接数,默认是 1024
- -P 是设置保存Memcache的pid文件
Memcached 作为前台程序运行:
从终端输入以下命令,启动 memcached:
/usr/local/bin/memcached -p 11211 -m 128m
当然你可以使用 -vv 来显示调试信息, v 越多显示的调试信息就越多
/usr/local/bin/memcached -p 11211 -m 128m -vv
输出
slab class 1: chunk size 96 perslab 10922 slab class 2: chunk size 120 perslab 8738 slab class 3: chunk size 152 perslab 6898 slab class 4: chunk size 192 perslab 5461 slab class 5: chunk size 240 perslab 4369 slab class 6: chunk size 304 perslab 3449 slab class 7: chunk size 384 perslab 2730 slab class 8: chunk size 480 perslab 2184 slab class 9: chunk size 600 perslab 1747 slab class 10: chunk size 752 perslab 1394 slab class 11: chunk size 944 perslab 1110 slab class 12: chunk size 1184 perslab 885 slab class 13: chunk size 1480 perslab 708 slab class 14: chunk size 1856 perslab 564 slab class 15: chunk size 2320 perslab 451 slab class 16: chunk size 2904 perslab 361 slab class 17: chunk size 3632 perslab 288 slab class 18: chunk size 4544 perslab 230 slab class 19: chunk size 5680 perslab 184 slab class 20: chunk size 7104 perslab 147 slab class 21: chunk size 8880 perslab 118 slab class 22: chunk size 11104 perslab 94 slab class 23: chunk size 13880 perslab 75 slab class 24: chunk size 17352 perslab 60 slab class 25: chunk size 21696 perslab 48 slab class 26: chunk size 27120 perslab 38 slab class 27: chunk size 33904 perslab 30 slab class 28: chunk size 42384 perslab 24 slab class 29: chunk size 52984 perslab 19 slab class 30: chunk size 66232 perslab 15 slab class 31: chunk size 82792 perslab 12 slab class 32: chunk size 103496 perslab 10 slab class 33: chunk size 129376 perslab 8 slab class 34: chunk size 161720 perslab 6 slab class 35: chunk size 202152 perslab 5 slab class 36: chunk size 252696 perslab 4 slab class 37: chunk size 315872 perslab 3 slab class 38: chunk size 394840 perslab 2 slab class 39: chunk size 493552 perslab 2 slab class 40: chunk size 616944 perslab 1 slab class 41: chunk size 771184 perslab 1 slab class 42: chunk size 1048576 perslab 1 <17 server listening (auto-negotiate) <18 server listening (auto-negotiate) <19 send buffer was 9216, now 3728270 <19 server listening (udp) <20 server listening (udp) <23 send buffer was 9216, now 3728270 <22 server listening (udp) <21 server listening (udp) <25 server listening (udp) <23 server listening (udp) <24 server listening (udp) <26 server listening (udp)
我们看到 128m 的内存被分成了 42 个 slab
-vv 是显示了调试信息,调试信息的内容大部分是关于存储的信息Memcached 作为后台服务程序运行:
$ /usr/local/bin/memcached -p 11211 -m 128m -d
或者
/usr/local/bin/memcached -d -m 64M -u nobody -l 192.168.0.8 -p 11211 -c 256 -P /tmp/memcached.pid
建议不要使用 -u rootMemcached 更多启动参数
| 命令 | 描述 | | —- | —- | | -p| 监听的TCP端口(默认: 11211) | | -U | 监听的UDP端口(默认: 11211, 0表示不监听) | | -s | 用于监听的UNIX套接字路径(禁用网络支持) | | -a | UNIX套接字访问掩码,八进制数字(默认:0700) | | -l | 监听的IP地址。(默认:INADDR_ANY,所有地址) | | -d | 作为守护进程来运行 | | -r | 最大核心文件限制 | | -u | 设定进程所属用户。(只有root用户可以使用这个参数) | | -m | 所有slab class可用内存的上限,以MB为单位。(默认:64MB)
(译者注:也就是分配给该memcached实例的内存大小。) | | -M | 内存用光时报错。(不会删除数据) | | -c| 最大并发连接数。(默认:1024) | | -k | 锁定所有内存页。注意你可以锁定的内存上限。
试图分配更多内存会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。
不是前面的 -u参数;在sh下,使用命令”ulimit -S -l NUM_KB”来设置 | | -v | 提示信息(在事件循环中打印错误/警告信息。) | | -vv | 详细信息(还打印客户端命令/响应) | | -vvv | 超详细信息(还打印内部状态的变化) | | -h | 打印这个帮助信息并退出 | | -i | 打印memcached和libevent的许可 | | -P | 保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义 | | -f | 不同slab class里面的chunk大小的增长倍率。(默认:1.25)
译者注:每个slab class里面有相同数量个slab page,每个slab page里面有chunk,且在当前slab class内的chunk大小固定。
而不同slab class里的chunk大小不一致,具体差异就是根据这个参数的倍率在增长,直到分配的内存用尽 | | -n| chunk的最小空间(默认:48)
chunk数据结构本身需要消耗48个字节,所以一个chunk实际消耗的内存是n+48 | | -L | 尝试使用大内存页(如果可用的话)
提高内存页尺寸可以减少”页表缓冲(TLB)”丢失次数,提高运行效率
为了从操作系统获得大内存页,memcached会把全部数据项分配到一个大区块 | | -D| 使用 作为前缀和ID的分隔符
这个用于按前缀获得状态报告。默认是”:”(冒号)
如果指定了这个参数,则状态收集会自动开启;如果没指定,则需要用命令”stats detail on”来开启。 | | -t| 使用的线程数(默认:4) | | -R | 每个连接可处理的最大请求数 | | -C | 禁用CAS | | -b | 设置后台日志队列的长度(默认:1024) | | -B | 绑定协议 - 可能值:ascii,binary,auto(默认) | | -I | 重写每个数据页尺寸。调整数据项最大尺寸 |
Window 下安装 Memcached
Memcached 官网上并未提供 Memcached 的 Window 平台安装包
但已经有热心的网友自己编译了一些 Window 平台的包供大家使用
本站再此列出了大部分版本的下载连接,你需要根据自己的系统平台及需要的版本号点击对应的链接下载即可:
在 1.4.5 版本以前 memcached 可以作为一个服务安装 推荐
32 位系统 1.4.4版本
http://downloads.northscale.com/memcached-win32-1.4.4-14.zip
64位系统 1.4.4版本:
http://downloads.northscale.com/memcached-win64-1.4.4-14.zip
1.4.5 及之后的版本删除了作为一个服务安装的功能
32位系统 1.4.5版本
http://downloads.northscale.com/memcached-1.4.5-x86.zip
64位系统 1.4.5版本
http://downloads.northscale.com/memcached-1.4.5-amd64.zip
_重要_1.4.4 和 1.4.5 版本功能上没有多大的区别,如果你为了省事方便,可以下载 1.4.4 的版本
Memcached <1.4.5 版本安装步骤
1、解压下载的安装包到指定目录,比如 d:\dev\memcached
2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:
d:\dev\memcached\memcached.exe -d install
注意: 你需要使用真实的 memcached.exe 路径 替代 d:\dev\memcached\memcached.exe
3、然后我们用以下命令来启动和关闭 memcached 服务:
开启 Memcached 服务
d:\dev\memcached\memcached.exe -d start
关闭 Memcached 服务
d:\dev\memcached\memcached.exe -d stop
4、如果要修改 Memcached 的配置项, 可以在命令行中执行
regedit.exe
命令打开注册表并找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached 来进行修改
比如要修改 memcached 缓存使用的内存大小为 512 m 可以使用 -m 参数:
d:\dev\memcached\memcached.exe -d -d runservice -m 512
更多的参数配置可以通过 d:\dev\memcached\memcached.exe -h 查看
5、如果需要卸载 memcached ,可以使用以下命令:
d:\dev\memcached\memcached.exe -d uninstall
Memcached >= 1.4.5 版本安装步骤
1、解压下载的安装包到指定目录,比如 d:\dev\memcached
2、在 1.4.5 及以后的版本,Memcached 不能作为服务来运行,需要使用任务计划中来开启一个普通的进程, 在 window 启动时设置 memcached自动执行
我们需要使用管理员身份执行以下命令将 Memcached 添加来任务计划表中:
schtasks /create /sc onstart /tn memcached /tr “‘d:\dev\memcached\memcached.exe’ -m 512”
注意:
你需要使用真实的路径替代 d:\dev\memcached\memcached.exe
-m 512 意思是设置 Memcached 最大的缓存配置为 512M
更多的参数配置可以通过 d:\dev\memcached\memcached.exe -h 查看
3、如果需要卸载 memcached ,可以使用以下命令:
schtasks /delete /tn memcached
← Window 下安装 MemcachedMemcached quit 命令 →
Memcached 连接
可以通过 telnet 命令并指定 主机IP 和 端口(port)来连接 Memcached
语法
telnet HOST PORT
命令中的 HOST 和 PORT 为运行 Memcached 服务的 IP 和 端口。
11211 为所有 Memcached 服务默认的端口号
范例
1. 连接到 127.0.0.1 上 11211 的 Memcached 服务
假设我们的 Memcached 服务运行在本机, IP 为 127.0.0.1 ,端口为 11211
那么连接到 Memcached 的命令为
telnet 127.0.0.1 11211
输出如下
$ telnet 127.0.0.1 11211 Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’.
2. 进行简单的 set 和 get 操作
$ telnet 127.0.0.1 11211 # 连接服务器
Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. set site 0 1000 11 # set 命令 www.twle.cn # 要设置的值(value)
STORED # 命令 执行结果
get site # get 命令
VALUE site 0 11 # key 的元数据
www.twle.cn #值(value) 数据
END # 命令执行结束标志
quit # 断开与 Memcached 的连接
Connection closed by foreign host.