码迷,mamicode.com
首页 > 其他好文 > 详细

memcache

时间:2014-05-03 15:12:31      阅读:304      评论:0      收藏:0      [点我收藏+]

标签: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 install
3、为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 $CACHESIZE
        RETVAL=$?
        [ $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

memcache中各状态的意义:

[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,布布扣,bubuko.com

memcache

标签:memcache

原文地址:http://xz159065974.blog.51cto.com/8618592/1405541

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!