软件 | 类型 | 主要作用 | 缓存的数据 |
---|---|---|---|
Memcached | 纯内存型 | 常用语缓存网站后端的各类数据,例如数据库中的数据 | 主要缓存用户重复请求的动态内容,例如:blog的博文、bbs的帖子等内容及用户的Session会话信息 |
Redis、Memcachedb | 持久化存储,即使用内存,也会使用磁盘存储 | 1、缓存后端数据库的查询数据2、作为关系数据库的重要补充 | 1、作为缓存:主要缓存用户重复请求的动态内容;例如:blog的博文、bbs的帖子等内容。 |
Squid、Nginx | 内存或内存加磁盘缓存 | 主要用于缓存web前端的服务内容 | 主要用于静态数据缓存,例如:图片,附件(压缩包),js、css、html等,此部分功能大多数企业会选择专业的CDN公司,如:网宿、蓝讯 |
1、查看系统版本
cat /etc/redhat-release
uname -r
uname -m
[root@cache01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@cache01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@cache01 ~]# uname -m
x86_64
2、安装依赖libevent
[root@cache01 ~]# yum install libevent libevent-devel telnet nc
[root@cache01 ~]# rpm -qa libevent libevent-devel telnet nc
libevent-1.4.13-4.el6.x86_64
nc-1.84-24.el6.x86_64
libevent-devel-1.4.13-4.el6.x86_64
telnet-0.17-48.el6.x86_64
3、安装memcached
[root@cache01 ~]# yum install memcached -y
[root@cache01 ~]# rpm -qa memcached
memcached-1.4.4-5.el6.x86_64
4、查看指定参数
[root@cache01 ~]# memcached -h
5、启动实例
[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192
[root@cache01 ~]# lsof -i :11211
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 2317 root 26u IPv4 14664 0t0 TCP *:memcache (LISTEN)
memcached 2317 root 27u IPv6 14665 0t0 TCP *:memcache (LISTEN)
memcached 2317 root 28u IPv4 14668 0t0 UDP *:memcache
memcached 2317 root 29u IPv6 14669 0t0 UDP *:memcache
# 多实例只需要启动不同端口即可
[root@cache01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192
[root@cache01 ~]# ps -ef |grep memcached|grep -v grep
root 2317 1 0 15:08 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
root 2335 1 0 15:11 ? 00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192
6、加入开机自启
cat >>/etc/rc.local<
**编译安装:**由于yum安装的memcached的版本略低,但是不影响使用,如果想安装更高版本的则需要编译安装,命令集合如下:
wget http://memcached.org/files/memcached-1.4.24.tar.gz
tar xf memcached-1.4.24.tar.gz
cd memcached-1.4.24
./configure
make && make install
cd ../
这里建议用yum或rpm安装,比较简单、易用
参数 | 作用 |
---|---|
-l |
指定进程监听的IP地址,可以不设置此参数 |
-d | 以守护进程(daemon)方式运行服务 |
-u | 指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户。 |
-p(小写) | 指定Memcached服务监听TCP端口号。默认为11211 |
-P(大写) | 设置保存Memcached的pid文件($$),保存PID到指定文件 |
内存相关设置
参数 | 作用 |
---|---|
-m | 指定Memcached服务可以缓存数据的最大内存。默认为64M |
-M | Memcached服务内存不够时禁止LRU,如果内存满了会 报错 |
-n | 为key+value+flags分配的最小内存空间,默认48字节 |
-f | chunk size增长因子,默认1.25 |
-L | 启用大内存页,可以降低内存浪费,改进性能 |
并发连接设置
参数 | 作用 |
---|---|
-c | 最大的并发连接数,默认是1024 |
-t | 线程数,默认4.由于memcached采用NIO,所以太多线程作用不大。 |
-R | 每个event最大请求数,默认20 |
-C | 金庸CAS(可以禁止版本计数,减少开销) |
调试参数
参数 | 作用 |
---|---|
-v | 打印较少的errors/warnings |
-vv | 打印非常多调试信息和错误输出到控制台,也打印客户端命令及响应 |
-vvv | 打印极多的调试信息和错误输出,打印内部状态转变 |
其它选项可以通过“memcached -h”命令可以显示所有可用选项。
MySQL数据库管理 | Memcached管理 |
---|---|
MySQL的insert语句 | Memcached的set命令 |
MySQL的select与语句 | Memcached的get命令 |
MySQL的delete语句 | Memcached的delete命令 |
MySQL的update语句 | Memcached的replace命令 |
操作memcached的相关命令基本语法
set key1 0 0 6
\r\n
\r\n
\r\n
操作memcached的相关命令详细说明
command name | 作用 |
---|---|
set | 无论如何进行写入数据,会覆盖老数据 |
add | 只有对应数据不存在时才添加数据 |
replace | 只有数据存在时进行替换数据 |
append | 往后追加:append datablock |
prepend | 往前追加:prepend datablock |
cas | 按版本号更改 |
其它参数 | 作用 |
---|---|
key | 普通字符串,要求小于250个字符,不包含空格和控制字符 |
flags | 客户端用来标识数据格式的数值,如json,xml,压缩等 |
exptime | 存活时间s,0为永远,小于30天,606024*30为秒数,大于30天为unixtime |
bytes | byte字节数,不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串 |
datablock | 文本行,以\r\n结尾,当然可以包含\r或\n |
status | STORED/NOT_STORED/EXISTS/NOT_FOUND ERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复。 |
简单插入数据及查看数据
[root@cache01 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set user01 0 0 7
oldgirl
STORED
get user01
VALUE user01 0 7
oldgirl
END
quit
Connection closed by foreign host.
在查询或删除数据的时候一定要指定键值来操作
[root@cache01 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set k1 0 0 3
rsq
STORED
get k1
VALUE k1 0 3
rsq
END
delete rsq
NOT_FOUND
delete k1
DELETED
get k1
END
set k1 0 0 3
rsqrsq
CLIENT_ERROR bad data chunk
ERROR
quit
Connection closed by foreign host.
nc测试添加查找或删除数据
[root@cache01 ~]# printf "set key1 0 0 6\r\nrsqrsq\r\n"|nc 127.0.0.1 11211
STORED
[root@cache01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211
VALUE key1 0 6
rsqrsq
END
[root@cache01 ~]# printf "delete key1\r\n"|nc 127.0.0.1 11211
DELETED
[root@cache01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211
END
替换测试
[root@cache01 ~]# printf "set key1 0 0 6\r\nrsqrsq\r\n"|nc 127.0.0.1 11211
STORED
[root@cache01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211
VALUE key1 0 6
rsqrsq
END
[root@cache01 ~]# printf "replace key1 0 0 6\r\nRSQRSQ\r\n"|nc 127.0.0.1 11211
STORED
[root@cache01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211
VALUE key1 0 6
RSQRSQ
END
[root@cache01 ~]# ps -ef|grep "memcached"|grep -v "grep"
root 2317 1 0 06:56 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
root 2335 1 0 06:58 ? 00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192
[root@cache01 ~]# ps -ef|grep "memcached"|grep -v "grep"
root 2317 1 0 06:56 ? 00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
root 2335 1 0 06:58 ? 00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192
[root@cache01 ~]# killall memcached
[root@cache01 ~]# ps -ef|grep "memcached"|grep -v "grep"
[root@cache01 ~]#
最好启动memcached服务的参数中创建一个pid文件,这样方便停止服务
[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid
[root@cache01 ~]# lsof -i :11211
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
memcached 2685 root 26u IPv4 17610 0t0 TCP *:memcache (LISTEN)
memcached 2685 root 27u IPv6 17611 0t0 TCP *:memcache (LISTEN)
memcached 2685 root 28u IPv4 17614 0t0 UDP *:memcache
memcached 2685 root 29u IPv6 17615 0t0 UDP *:memcache
[root@cache01 ~]# kill `cat /var/run/11211.pid`
[root@cache01 ~]# lsof -i :11211
[root@cache01 ~]#