====== spring整合memcached ====== ===== 加入pom依赖 ===== com.googlecode.xmemcached xmemcached 2.0.0 ===== 引入placeholder ===== ===== application-cache-memcached.xml ===== ===== memcached.properties ===== # Memcached settings #memcached服务器列表 host1:port1 host2:port2 memcached.servers=localhost:11211 #memcached 连接池大小 memcached.connectionPoolSize=30 ===== MemcachedService.java ===== package com.gxx.record.service; /** *
*
Title:
*
* memcached服务接口
*
Description:
*
*

* none

*
* * @author Administrator * @version 1.0, 2015年7月23日 * @since record * */ public interface MemcachedService { /** * 仅当存储空间中不存在键相同的数据时才保存 * @param key * @param value */ public void addWithNoReply(String key, T value); /** * 设置键值对 * @param key key * @param expires 单位:秒,0 表示永不过期 * @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的 */ public void addWithNoReply(String key, int expires, T value); /** * 无论何时都保存 * @param key * @param value */ public void set(String key, T value); /** * 设置键值对 * @param key key * @param expires 单位:秒,0 表示永不过期 * @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的 */ public void set(String key, int expires, T value); /** * 根据key获得值 * @param key key * @return value */ public T get(String key); }
===== MemcachedServiceImpl.java ===== package com.gxx.record.service.impl; import net.rubyeye.xmemcached.MemcachedClient; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gxx.record.service.MemcachedService; /** *
*
Title:
*
* memcached服务实现类 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年7月23日 * @since record * */ @Service("memcachedService") public class MemcachedServiceImpl implements MemcachedService { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(MemcachedServiceImpl.class); private int expires = 3600;//默认过期时间 单位秒 1个小时 @Autowired private MemcachedClient memcachedClient; /** * 仅当存储空间中不存在键相同的数据时才保存 * @param key * @param value */ public void addWithNoReply(String key, T value) { this.addWithNoReply(key, expires, value); } /** * 设置键值对 * @param key key * @param expires 单位:秒,0 表示永不过期 * @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的 */ public void addWithNoReply(String key, int expires, T value) { if (StringUtils.isEmpty(key)) return; try { if (memcachedClient != null) { memcachedClient.addWithNoReply(key, expires, value); } } catch(Exception e) { logger.error(e.getMessage(), e); } } /** * 无论何时都保存 * @param key * @param value */ public void set(String key, T value) { this.set(key, expires, value); } /** * 设置键值对 * @param key key * @param expires 单位:秒,0 表示永不过期 * @param value 必须是一个可序列化的对象, 可以是容器类型如:List,但容器里面保存的对象必须是可序列化的 */ public void set(String key, int expires, T value) { if (StringUtils.isEmpty(key)) return; try { if (memcachedClient != null) { memcachedClient.set(key, expires, value); } } catch(Exception e) { logger.error(e.getMessage(), e); } } /** * 根据key获得值 * @param key key * @return value */ @SuppressWarnings("unchecked") public T get(String key) { try { if (!StringUtils.isEmpty(key) && memcachedClient != null) { return (T)memcachedClient.get(key); } } catch(Exception e) { logger.error(e.getMessage(), e); } return null; } }
===== MemcachedDto.java ===== package com.gxx.record.dto; /** *
*
Title:
*
* 用户传输对象 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ public class MemcachedDto extends BaseDto { private String key;//键 private String value;//值 public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
===== MemcachedController.java ===== package com.gxx.record.web.memcached; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.gxx.record.dto.MemcachedDto; import com.gxx.record.service.MemcachedService; /** * MemcachedController * * @author gxx */ @Controller @RequestMapping("/memcached/") public class MemcachedController { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(MemcachedController.class); @Autowired private MemcachedService memcachedService; @RequestMapping(value = "/preMemcachedFtl", method = RequestMethod.GET) public String preMemcachedFtl() { return "memcached/preMemcachedFtl"; } /** * 设置 * @param request * @param memcachedDto * @return */ @RequestMapping(value = "/set",produces="application/json") public @ResponseBody MemcachedDto set(HttpServletRequest request, MemcachedDto memcachedDto) { logger.info("设置:键=[" + memcachedDto.getKey() + "],值=[" + memcachedDto.getValue() + "]"); /** * 1.设置值 */ memcachedService.set(memcachedDto.getKey(), memcachedDto.getValue()); /** * 2.返回结果 */ memcachedDto.setSuccess(true); memcachedDto.setMessage("设置成功!"); return memcachedDto; } /** * 获取值 * @param request * @param memcachedDto * @return */ @RequestMapping(value = "/get",produces="application/json") public @ResponseBody MemcachedDto get(HttpServletRequest request, MemcachedDto memcachedDto) { logger.info("获取值:键=[" + memcachedDto.getKey() + "]"); /** * 1.获取值 */ String obj = (String)memcachedService.get(memcachedDto.getKey()); /** * 2.返回结果 */ memcachedDto.setSuccess(true); memcachedDto.setMessage("获取成功"); memcachedDto.setValue(obj); return memcachedDto; } } ===== preMemcachedFtl.ftl ===== memcached页面
键:
值:
键:
===== 演示 ===== {{ :分享:技术:memcached:memcached_5.png?300 |}} {{ :分享:技术:memcached:memcached_2.png?300 |}} {{ :分享:技术:memcached:memcached_3.png?300 |}} {{ :分享:技术:memcached:memcached_4.png?300 |}} gxx@iZ23goxo66aZ:~$ telnet localhost 11211 #连接memcached Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get name #获得name VALUE name 0 9 关向辉 #已经设置的值 END quit #退出 Connection closed by foreign host. gxx@iZ23goxo66aZ:~$