说来惭愧,第一次听说Memcache是在大约在6个月前。作为一个搞J2EE开发的,工作一年多了,都没听说过Memcache实在是惭愧。
当时是换了新工作,第一个任务是开发一个报表系统供公司内部使用。为了使系统能7*24小时提供服务,老大说搞两台服务器吧,然后弄个Memcache。后来换了个方式,一台服务器作为“主”服务器,正常情况下用户均访问这台机器,当访问不了的时候自动跳转到另一台机子,实在服务器上做了一次跳转。然后就没有去看Memcache。下午有空就学习了一下,以下是自己的学习纪录。
Memcache是一种高性能分布式内存缓存服务器。
memcached is a high-performance, distributed memory object caching system, generic in nature, but originally intended for use in speeding up dynamic web applications by alleviating database load.
安装Libevent:
Memcache使用Libevent操作网络IO,所以先安装Libevent http://libevent.org/
$wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
$tar -zxvf libevent-2.0.21-stable.tar.gz
$cd libevent-2.0.21-stable
$autoconf
$./configure --prefix=/usr/local
$make
$sudo make install
安装Memcache:
$wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz
$tar -zxvf memcached-1.4.15
$cd memcached-1.4.15
$autoconf
$./configure --prefix=/usr/local
$make
$sudo make install
启动Memcache:
启动Memcache守护进程,使用64M内存,11211端口
$memcached -d -m 64 127.0.0.1 -p 11211
测试:
通过telnet server port使用刚才启动的服务
上面使用了set\get\quit命令,下面是一些常用命令
Command | Description | Example |
get | Reads a value | get mykey |
set | Set a key unconditionally | set mykey 0 60 5 |
add | Add a new key | add newkey 0 60 5 |
replace | Overwrite existing key | replace key 0 60 5 |
append | Append data to existing key | append key 0 60 15 |
prepend | Prepend data to existing key | prepend key 0 60 15 |
incr | Increments numerical key value by given number | incr mykey 2 |
decr | Decrements numerical key value by given number | decr mykey 5 |
delete | Deletes an existing key | delete mykey |
flush_all | Invalidate specific items immediately | flush_all |
Invalidate all items in n seconds | flush_all 900 | |
stats | Prints general statistics | stats |
Prints memory statistics | stats slabs | |
Prints memory statistics | stats malloc | |
Print higher level allocation statistics | stats items | |
stats detail | ||
stats sizes | ||
Resets statistics | stats reset | |
version | Prints server version. | version |
verbosity | Increases log level | verbosity |
quit | Terminate telnet session | quit |
在Java中使用:
在Java中使用Memcache需要一个客户端,本文使用的是xMemcache。
"XMemcached是一个新java memcached client。也许你还不知道memcached是什么?可以先看看。简单来说,Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个java客户端实现。"
简单的测试
memClient.set("test", 0, "hello world");
memClient.set("test1", 30, "hello world 111");
区别在与第二个参数,他的含义是
第一个是存储的 key 名称,第二个是 expire 时间(单位秒) ,超过这个时间 ,memcached 将这个数据替换出去, 0 表示永久存储(默认是一个月) ,第三个参数就是实际存储的数据,可以是任意的 java 可序列化类型 。
在过30秒之后再去取test1将取到null
更多xMemcache内容见https://code.google.com/p/xmemcached/wiki/User_Guide_zh
https://code.google.com/p/xmemcached/
http://xmemcached.googlecode.com/svn/trunk/apidocs/net/rubyeye/xmemcached/MemcachedClient.html