Java Memcache基本应用

Memcache的介绍有很多,这里给出如何在Java中应用Memcache的基本方法

  1 安装Memcache服务器(windows)

下载windowsMemcache安装包,如memcached-1.2.6-win32-bin.zip,解压到指定位置,比如(D://memcache),打开dos命令行,输入以下两个命令即可启动Memcache服务。

D:/memcache/memcached.exe -d  install 

D:/memcache/memcached.exe -d  start 

  2 下载Java版本的memcache客户端(以下列出常用的几种)

 spymemcached :

http://code.google.com/p/spymemcached/

 gwhalin / Memcached-Java-Client   

   https://github.com/gwhalin/Memcached-Java-Client/downloads

 Jcache

http://code.google.com/intl/zh-CN/appengine/docs/java/memcache/usingjcache.html

  3 下面给出两种方式调用Memcache

     

  gwhalin / Memcached-Java-Client调用方式如下:

  

 

[java]  view plain copy
  1. public class MemcacheManagerForGwhalin {  
  2.       
  3.     // 构建缓存客户端  
  4.     private static MemCachedClient cachedClient;  
  5.     // 单例模式实现客户端管理类  
  6.     private static MemcacheManagerForGwhalin INSTANCE = new MemcacheManagerForGwhalin();  
  7.   
  8.     private MemcacheManagerForGwhalin() {  
  9.         cachedClient = new MemCachedClient();  
  10.         //获取连接池实例  
  11.         SockIOPool pool = SockIOPool.getInstance();  
  12.   
  13.         //设置缓存服务器地址,可以设置多个实现分布式缓存  
  14.         pool.setServers(new String[]{"127.0.0.1:11211"});  
  15.           
  16.         //设置初始连接5  
  17.         pool.setInitConn(5);  
  18.         //设置最小连接5  
  19.         pool.setMinConn(5);  
  20.         //设置最大连接250  
  21.         pool.setMaxConn(250);  
  22.         //设置每个连接最大空闲时间3个小时  
  23.         pool.setMaxIdle(1000 * 60 * 60 * 3);  
  24.   
  25.         pool.setMaintSleep(30);  
  26.   
  27.         pool.setNagle(false);  
  28.         pool.setSocketTO(3000);  
  29.         pool.setSocketConnectTO(0);  
  30.         pool.initialize();  
  31.     }  
  32.       
  33.     /** 
  34.      * 获取缓存管理器唯一实例 
  35.      * @return 
  36.      */  
  37.     public static MemcacheManagerForGwhalin getInstance() {  
  38.         return INSTANCE;  
  39.     }  
  40.   
  41.     @Override  
  42.     public void add(String key, Object value) {  
  43.         cachedClient.set(key, value);  
  44.     }  
  45.   
  46.     @Override  
  47.     public void add(String key, Object value, int milliseconds) {  
  48.         cachedClient.set(key, value, milliseconds);  
  49.     }  
  50.   
  51.     @Override  
  52.     public void remove(String key) {  
  53.         cachedClient.delete(key);  
  54.     }  
  55.   
  56.     @Override  
  57.     public void remove(String key, int milliseconds) {  
  58.         cachedClient.delete(key, milliseconds, new Date());  
  59.     }  
  60.   
  61.     @Override  
  62.     public void update(String key, Object value, int milliseconds) {  
  63.         cachedClient.replace(key, value, milliseconds);  
  64.     }  
  65.   
  66.     @Override  
  67.     public void update(String key, Object value) {  
  68.         cachedClient.replace(key, value);  
  69.     }  
  70.       
  71.       
  72.     @Override  
  73.     public Object get(String key) {  
  74.         return cachedClient.get(key);  
  75.     }  
  76.   
  77. }  

Spy方式调用如下:

 

[java]  view plain copy
  1. public class MemcacheManagerForSpy implements IMemcacheManager {  
  2.   
  3.   
  4.     //缓存客户端  
  5.     private MemcachedClient memcacheCient;  
  6.     //Manager管理对象,单例模式  
  7.     private static MemcacheManagerForSpy INSTANCE = new MemcacheManagerForSpy();   
  8.       
  9.     private MemcacheManagerForSpy() {  
  10.         try {  
  11.                 memcacheCient = new MemcachedClient(new InetSocketAddress("127.0.0.1",11211));  
  12.         } catch (IOException e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
  16.       
  17.     public static MemcacheManagerForSpy getInstance() {  
  18.         return INSTANCE;  
  19.     }  
  20.       
  21.     @Override  
  22.     public void add(String key, Object value, int milliseconds) {  
  23.         memcacheCient.add(key, milliseconds, value);  
  24.     }  
  25.   
  26.     @Override  
  27.     public void add(String key, Object value) {  
  28.         memcacheCient.add(key, 3600, value);  
  29.           
  30.     }  
  31.   
  32.     @Override  
  33.     public void remove(String key, int milliseconds) {  
  34.         memcacheCient.delete(key);  
  35.     }  
  36.   
  37.     @Override  
  38.     public void remove(String key) {  
  39.         memcacheCient.delete(key);  
  40.     }  
  41.   
  42.     @Override  
  43.     public void update(String key, Object value, int milliseconds) {  
  44.         memcacheCient.replace(key, milliseconds, value);  
  45.     }  
  46.   
  47.     @Override  
  48.     public void update(String key, Object value) {  
  49.         memcacheCient.replace(key, 3600, value);  
  50.     }  
  51.   
  52.     @Override  
  53.     public Object get(String key) {  
  54.         return  memcacheCient.get(key);  
  55.     }  
  56. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Shiro可以很方便地与Memcached进行整合,以实现Session的存储和管理。 下面是整合步骤: 1. 首先需要添加Memcached的相关依赖,可以使用Maven来管理依赖,添加以下代码到pom.xml文件中: ```xml <dependency> <groupId>com.whalin</groupId> <artifactId>Memcached-Java-Client</artifactId> <version>3.0.2</version> </dependency> ``` 2. 在Shiro的配置文件(shiro.ini或shiro.yml)中配置Session的管理方式为Memcached,例如: ```ini [main] cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager [session] sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager sessionManager.globalSessionTimeout = 1800000 sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO sessionDAO.activeSessionsCacheName = shiro-activeSessionCache cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager securityManager.cacheManager = $cacheManager # Memcached session # ======================================= sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO sessionDAO.activeSessionsCacheName = shiro-activeSessionCache sessionDAO.sessionIdGenerator = org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator cacheManager = com.whalin.MemCached.MemCachedClientPoolCacheManager cacheManager.poolName = shiroCache cacheManager.servers = 127.0.0.1:11211 securityManager.cacheManager = $cacheManager sessionManager.sessionDAO = $sessionDAO sessionManager.cacheManager = $cacheManager ``` 其中,cacheManager配置使用了MemoryConstrainedCacheManager和EhCacheManager,用于缓存Shiro的授权信息和其他缓存数据;sessionDAO配置使用了EnterpriseCacheSessionDAO,用于管理Session的存储和读取;cacheManager配置使用了MemCachedClientPoolCacheManager,用于与Memcached进行交互。 3. 在项目启动时,需要创建Memcached客户端并将其注入到cacheManager中,例如: ```java import com.whalin.MemCached.MemCachedClient; import com.whalin.MemCached.SockIOPool; public class MemcachedCacheManager implements CacheManager { private MemCachedClient cache; @Override public <K, V> Cache<K, V> getCache(String name) throws CacheException { return new MemcachedCache<>(name, this.cache); } public void init() { String[] servers = {"127.0.0.1:11211"}; SockIOPool pool = SockIOPool.getInstance("shiroCache"); pool.setServers(servers); pool.initialize(); this.cache = new MemCachedClient("shiroCache"); } public void destroy() { SockIOPool.getInstance("shiroCache").shutDown(); } } ``` 4. 在Web应用中,可以使用DefaultWebSessionManager来管理Session,例如: ```java import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; public class MemcachedSessionManager extends DefaultWebSessionManager { @Override protected void onStart(Session session, SessionContext context) { super.onStart(session, context); // 将Session存储到Memcached中 this.getSessionDAO().create(session); } @Override protected void onStop(Session session, SessionKey key) { super.onStop(session, key); // 从Memcached中删除Session this.getSessionDAO().delete(session); } @Override protected Session retrieveSession(SessionKey sessionKey) throws UnknownSessionException { // 从Memcached中读取Session Session session = this.getSessionDAO().readSession(sessionKey); if (session == null) { throw new UnknownSessionException("Session not found with key: " + sessionKey); } return session; } } ``` 通过以上步骤,就可以将Java Shiro与Memcached整合起来,实现Session的存储和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值