主要命令
启动memcached
./memcached -u root -p 11212 -d
连接
telnet 192.168.1.2 11211
add命令
add keyname flag timeout(s) datasize
add mykey 0 10 12
get命令
get keyname
启动magent
./magent -u root -l 192.168.1.2 -p 11220 -s 192.168.1.2:11211 -s 192.168.1.2:11212 -b 192.168.1.2:11213 -b 192.168.1.2:11214
说明
- 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
- 各服务器间彼此无视:不在服务器间进行数据同步;
- O(1)的执行效率
- 默认情况下,Memcached是一个LRU(Least Recently Used)缓存,同时,它按事先预订的时长清理超期数据。但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见,而仅是当get命令到达时检查其时长;
- 存储大小:大于48bytes 小于1MB
- 使用一致性哈希管理
- Memcache是项目的名称,memcached是服务器端的主程序文件名
安装
安装libevent
tar xf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20
./configure --prefix=/usr/local/libevent
make && make install
echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
ldconfig
安装memcached
- 如需启用sasl验证功能,要先安装sasl
yum -y install cyrus-sasl-devel
tar xf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
make && make install
常用选项
memcached
-l <ip_addr>
指定进程监听的地址-d
以服务模式运行-u <username>
以指定的用户身份运行memcached进程-m <num>
用于缓存数据的最大内存空间,单位为MB,默认为64MB-c <num>
最大支持的并发连接数,默认为1024-p <num>
指定监听的TCP端口,默认为11211-U <num>
指定监听的UDP端口,默认为11211,0表示关闭UDP端口-t <threads>
用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效-f <num>
设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子-M
当内存空间不够使用时返回错误信息,而不是按LRU算法利用空间-n
指定最小的slab chunk大小;单位是字节-S
启用sasl进行用户认证
存储类命令
set, add, replace, append, prepend
- 获取数据类命令
get, delete, incr/decr
- 统计类命令
stats, stats items, stats slabs, stats sizes
- 清理命令
flush_all
集群
普通方式连接多个memcached
- 如果其中一个宕机,会造成数据丢失
- 如果其中一个宕机,并且插入和读取操作会继续操作已损坏的memcached,增加延迟。
集群方式连接多个memcached
- 可以设置多个magent
- 主memcached宕机,会读取从memcached
- 若宕机的memcached恢复,备份数据不会拷贝回来,会读到null
)
安装magent
0.6版的magent,java第一次连接正常,第二次连接卡住,并且magent的cpu占用达到99%。后改用0.5版的magent恢复正常
cd /usr/local/
mkdir ./magent
cd ./magent
wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
需要翻墙,直接在网上下载
tar xzvf ./magent-0.6.tar.gz
/sbin/ldconfig
让动态链接库为系统所共享
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
修改文件
make
cp ./magent /usr/bin/magent
错误总结
缺少文件解决思路,用
find / -name 文件名
查到文件位置,并且链接到需要的位置即可。magent.c:71:19: 致命错误:event.h:没有那个文件或目录
- 把libevent/include下的所有文件链接到/usr/local/include,一定使用完整路径,否则报连接层数过多错误
ln -s /usr/local/libevent/include/* /usr/local/include/
- 把libevent/include下的所有文件链接到/usr/local/include,一定使用完整路径,否则报连接层数过多错误
magent.c:729:17: 错误:‘SSIZE_MAX’未声明(在此函数内第一次使用)
- 在ketama.h**开头**加入SSIZE_MAX定值
vim ketama.h
c
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
- 在ketama.h**开头**加入SSIZE_MAX定值
gcc: 错误:/usr/lib64/libevent.a:没有那个文件或目录
gcc: 错误:/usr/lib64/libm.a:没有那个文件或目录- 把libevent/lib/下的所有文件链接到/usr/lib64下
ln -s /usr/local/libevent/lib/* /usr/lib64
- 把/usr/lib64/libm.so重命名链接到/usr/lib64/libm.a
ln -s /usr/lib64/libm.so /usr/lib64/libm.a
- 把libevent/lib/下的所有文件链接到/usr/lib64下
启动magent
./magent -u root -l 192.168.1.2 -p 11220 -s 192.168.1.2:11211 -s 192.168.1.2:11212 -b 192.168.1.2:11213 -b 192.168.1.2:11214
-u 用户名
-n 设置最大连接数,默认4096
-l 本地绑定ip,默认0.0.0.0
-p 端口,默认11211.
-s 设置memcached服务ip和端口,例如(192.168.1.1:11211)
-b 设置memcached备份服务ip和端口,例如(192.168.1.1:11211)
Nginx整合
server {
listen 80;
server_name www.magedu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
default_type text/html;
error_page 404 @fallback;
}
location @fallback {
proxy_pass http://172.16.0.1;
}
}