Linux下Memcache服务器端的安装与两种java客户端调用示例
Linux下Memcache服务器端的安装与两种java客户端调用示例
Memcache安装:
1.Memcache用到了libevent这个库用于Socket的处理,如果系统没有安装libevent,需要先安装libevent。
官网:http://www.monkey.org/~provos/libevent/
这个东西在配置时需要指定一个安装路径,即./configure--prefix=/usr,然后make,然后makeinstall。
测试libevent是否安装成功:
#ls-al/usr/lib|greplibevent
lrwxrwxrwx1rootroot2111??1217:38libevent-1.2.so.1->libevent-1.2.so.1.0.3
-rwxr-xr-x1rootroot26354611??1217:38libevent-1.2.so.1.0.3
-rw-r--r--1rootroot45415611??1217:38libevent.a
-rwxr-xr-x1rootroot81111??1217:38libevent.la
lrwxrwxrwx1rootroot2111??1217:38libevent.so->libevent-1.2.so.1.0.3
如果有以上信息,表明libevent已经装好了。
2.下载memcache最新版本:
http://code.google.com/p/memcached/downloads/list
需要在配置时需要指定libevent的安装路径即./configure--with-libevent=/usr,然后make,然后makeinstall,安装完成后会把memcached放到/usr/local/bin/memcached。
测试是否成功安装memcached:
#ls-al/usr/local/bin/mem*
-rwxr-xr-x1rootroot13798611??1217:39/usr/local/bin/memcached
-rwxr-xr-x1rootroot14017911??1217:39/usr/local/bin/memcached-debug
memcached的基本设置:
1.启动Memcache的服务器端:
#/usr/local/bin/memcached-d-m100-uroot-l127.0.0.1-p12000-c256-P/tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是100MB,
-u是运行Memcache的用户,我这里是root,
-l连接的IP地址,默认是本机,
-p是设置Memcache监听的端口,默认是11211,
-c选项是最大运行的并发连接数,默认是1024,
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid
-f块大小增长因子,默认是1.25,
-n最小分配空间,key+value+flags默认是48,
-h显示帮助,
-v输出警告和错误信息,
-vv打印客户端的请求和返回信息,
-M内存耗尽时返回错误,而不是删除项
memcached启动的时候最容易出的一个错误时找不到libevent.so.2
报如下错误:errorwhileloadingsharedlibraries:libevent.so.2:cannotopensharedobjectfile:Nosuchfileordirectory
这时候我们可以执行如下命令:LD_DEBUG=libs/usr/local/bin/memcached-v
2.如果要结束Memcache进程,执行:
#kill`cat/tmp/memcached.pid`
也可以启动多个守护进程,不过端口不能重复。
Java客户端:
目前主要有两种客户端:
1.https://github.com/gwhalin/Memcached-Java-Client/
2.http://code.google.com/p/spymemcached/
简单例子如下:
public void testDanga() { /*初始化SockIOPool,管理memcached的连接池*/ String[] servers = { "192.168.0.10:11211"}; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(servers); pool.setFailover(true); pool.setInitConn(10); pool.setMinConn(5); pool.setMaxConn(250); //设置主线程睡眠时间,每30秒苏醒一次,维持连接池大小 pool.setMaintSleep(30); //关闭套接字缓存 pool.setNagle(false); //连接建立后的超时时间 pool.setSocketTO(3000); pool.setAliveCheck(true); pool.initialize(); /*建立MemcachedClient实例*/ MemCachedClient memCachedClient = new MemCachedClient(); memCachedClient.set("key1", "haha"); String result = (String) memCachedClient.get("key1"); System.out.println(result); } public void testSpy() { try{ MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.0.10", 11211)); Future<Boolean> b = null; /*将key值,过期时间(秒)和要缓存的对象set到memcached中*/ b = mc.set("key2", 9000, "heihei"); Object result = mc.get("key2"); if(null!=result){ System.out.println(result.toString()); } if(b.get().booleanValue()==true){ mc.shutdown(); } }catch(Exception ex){ ex.printStackTrace(); } }
设置用户名、密码:
启用SASL验证机制
SASL全称SimpleAuthenticationandSecurityLayer,是一种用来扩充C/S模式验证能力的机制。
简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。
默认情况下,RedHatEnterpriseLinux安装程序会自动安装Cyrus-SASL认证包。可使用下面的命令检查系统是否已经安装了Cyrus-SASL认证包或查看已经安装了何种版本。
Java代码
1.rpm-qa|grepsasl
下列结果表示已经安装.
Java代码
1.cyrus-sasl-plain-2.1.23-8.el6.i686
2.cyrus-sasl-devel-2.1.23-8.el6.i686
3.cyrus-sasl-2.1.23-8.el6.i686
4.cyrus-sasl-lib-2.1.23-8.el6.i686
5.cyrus-sasl-gssapi-2.1.23-8.el6.i686
6.cyrus-sasl-md5-2.1.23-8.el6.i686
查看密码验证机制,输入:
Java代码
1.saslauthd-v
显示如下:
Java代码
1.saslauthd2.1.23
2.authenticationmechanisms:getpwentkerberos5pamrimapshadowldap
当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap
为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:
Java代码
1.MECH=shadow
重启saslauthd进程
Java代码
1./etc/init.d/saslauthdrestart
结果如下:
Java代码
1.停止saslauthd:[确定]
2.启动saslauthd:[确定]
测试SASL验证功能,查看saslauthd进程是否运行
Java代码
1.psaux|grepsaslauthd
如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动
Java代码
1./etc/init.d/saslauthdstart
2.chkconfigsaslauthdon
可用下面的命令测试saslauthd进程的认证功能
Java代码
1./usr/sbin/testsaslauthd–uportaluser–pportaluserpassword
其中,portaluser为Linux系统中的用户账户名,portaluserpassword为用户portaluser的密码。该命令执行后,如果出现如下所示的结果,则表示saslauthd的认证功能已起作用
Java代码
1.0:OK"Success."
亦可以自己添加用户给指定的程序,使用如下命令:
Java代码
1./usr/sbin/saslpasswd2-amemcached-cportaluser
要求输入密码:
Java代码
1.Password:
2.Again(forverification):
添加完用户可以使用上面测试命令验证一下是否成功,添加的用户必须是系统中的用户,上面命令的意思就是,给memcached服务添加可访问的用户,没有添加的系统用户仍然是不可以访问该服务的。
sasl搞定之后就可以安装memcached了。