标签:memcache
一、memcached简介
Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。
memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性
Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:
简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
各服务器间彼此无视:不在服务器间进行数据同步;
O(1)的执行效率
清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;
memcached 基于libevent的事件处理
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题
二、memcache的安装与配置
1、安装libevent、 memcache是基于libevent进行事件处理的,所以我们需要先安装libevent
[root@node2 ~]# tar xf libevent-2.0.21-stable.tar.gz [root@node2 ~]# cd libevent-2.0.21-stable [root@node2 libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent [root@node2 libevent-2.0.21-stable]# make && make install
2、安装memcache
# 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 install3、为memcache提供开机启动脚本:建立 /etc/rc.d/init.d/memcached
#!/bin/bash # # Init file for memcached # # chkconfig: - 86 14 # description: Distributed memory caching daemon # # processname: memcached # config: /etc/sysconfig/memcached . /etc/rc.d/init.d/functions ## Default variables PORT="11211" USER="nobody" MAXCONN="1024" CACHESIZE="64" OPTIONS="" RETVAL=0 prog="/usr/local/memcached/bin/memcached" desc="Distributed memory caching" lockfile="/var/lock/subsys/memcached" start() { echo -n $"Starting $desc (memcached): "daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZERETVAL=$? [ $RETVAL -eq 0 ] && success && touch $lockfile || failure echoreturn $RETVAL } stop() { echo -n $"Shutting down $desc (memcached): "killproc $prog RETVAL=$? [ $RETVAL -eq 0 ] && success && rm -f $lockfile || failure echoreturn $RETVAL } restart() { stop start } reload() { echo -n $"Reloading $desc ($prog): "killproc $prog -HUP RETVAL=$? [ $RETVAL -eq 0 ] && success || failure echoreturn $RETVAL } case"$1"in start) start ;; stop) stop ;; restart) restart ;; condrestart) [ -e $lockfile ] && restart RETVAL=$? ;; reload) reload ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}"RETVAL=1 esac exit $RETVAL
4、配置memcached成为系统服务
# chmod +x /etc/rc.d、init.d/memcached # chkconfig --add memcached # service memcached start
使用 telnet命令测试 memcached 的使用
[root@node2 ~]# service memcached start Starting Distributed memory caching (memcached): [ OK ] [root@node2 ~]# !te telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is‘^]‘. add key 0 10 5 hello STORED get key VALUE key 0 5 hello END
5、提供配置文件
由于memcached的内存大小是手动设置的,有的时候需要随时去修改它,总不能每次都去修改memcached脚本吧,所以下面我们为memcached提供配置文件
①:为memcached脚本提供配置文件
[root@memcache ~]# vim /etc/sysconfig/memcached PORT="11211"USER="nobody"MAXCONN="1024"CACHESIZE="128" 这里就是我们要为其分配的内存OPTIONS=""②:修改/etc/rc.d/init.d/memcached 加入一条. /etc/rc.d/init.d/functions ## Default variables PORT="11211" USER="nobody" MAXCONN="1024" CACHESIZE="128" OPTIONS=""[ -f /etc/sysconfig/memcached ] && . /etc/sysconfig/memcached 因为这个文件里面写的内容和上面定义的参数相同,所以以这个文件中的为准 RETVAL=0 prog="/usr/local/memcached/bin/memcached" desc="Distributed memory caching" lockfile="/var/lock/subsys/memcached"我们来修改下内存。改成64MB,如下:PORT="11211" USER="nobody" MAXCONN="1024" CACHESIZE="64" 修改成64 OPTIONS=""
我们用telnet 127.0.0.1 11211 验证下:
STAT bytes_read 33 STAT bytes_written 2050 STAT limit_maxbytes 67108864 变成了64M STAT accepting_conns 1 STAT listen_disabled_num 0
[root@memcache ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is‘^]‘. stats STAT pid 8279 #进程ID STAT uptime 8000 #服务器运行秒数 STAT time 1378284623 #服务器当前unix时间戳 STAT version 1.4.15 #服务器版本 STAT libevent 2.0.21-stable #libevent版本号 STAT pointer_size 64 #操作系统指针大小(这台服务器是64位的) STAT rusage_user 0.000999 #进程累计用户时间 STAT rusage_system 0.003999 #进程累计系统时间 STAT curr_connections 10 #当前打开连接数 STAT total_connections 11 #曾打开的连接总数 STAT connection_structures 11 #服务器分配的连接结构数 STAT reserved_fds 20 #内部使用的FD数 STAT cmd_get 0 #执行get命令总数 STAT cmd_set 0 #执行set命令总数 STAT cmd_flush 0 #执行flush命令总数 STAT cmd_touch 0 #执行touch命令总数 STAT get_hits 0 #get命中次数 STAT get_misses 0 #get未命中次数 STAT delete_misses 0 #delete未命中次数 STAT delete_hits 0 #delete命中次数 STAT incr_misses 0 #incr未命中次数 STAT incr_hits 0 #incr命中次数 STAT decr_misses 0 #decr未命中次数 STAT decr_hits 0 #decr命中次数 STAT cas_misses 0 #cas未命中次数 STAT cas_hits 0 #cas命中次数 STAT cas_badval 0 #使用擦拭次数 STAT touch_hits 0 #touch命中次数 STAT touch_misses 0 #touch未命中次数 STAT auth_cmds 0 #认证处理的次数 STAT auth_errors 0 #认证失败次数 STAT bytes_read 7 #读取字节总数 STAT bytes_written 0 #写入字节总数 STAT limit_maxbytes 134217728 #现在的内存大小为128M STAT accepting_conns 1 #目前接受的新接数 STAT listen_disabled_num 0 #失效的监听数 STAT threads 4 #当前线程数 STAT conn_yields 0 #连接操作主支放弃数目 STAT hash_power_level 16 #hash等级 STAT hash_bytes 524288 #当前hash表等级 STAT hash_is_expanding 0 #hash表扩展大小 STAT bytes 0 #当前存储占用的字节数 STAT curr_items 0 #当前存储数据总数 STAT total_items 0 #启动以来存储的数据总数 STAT expired_unfetched 0 #已过期但未获取的对象数目 STAT evicted_unfetched 0 #已驱逐但未获取的对象数目 STAT evictions 0 #LRU释放的对象数目 STAT reclaimed 0 #用已过期的数据条目来存储新数据的数目 END
本文出自 “linux运维” 博客,请务必保留此出处http://xz159065974.blog.51cto.com/8618592/1405541
标签:memcache
原文地址:http://xz159065974.blog.51cto.com/8618592/1405541