memcached是一个高性能、分布式的基于内存的对象缓存系统。
Is a cache,not a cache database。
分为server和client,各个cache server节点之间没有通信,减少了io。通过key的hash编码来存放和获取缓存数据。
缓存的java对象必须实现可序列化接口,因为存在这个对象的序列化和反序列化,因此对性能会造成一定的影响。
适用场景是读取操作远大于更新操作。
限制是如果其中一台cache节点down掉,缓存数据丢失同时会造成hashkey的重新编码,缓存的数据会转移。解决的办法是热备份,利用相同ip的备份cache。
几个应用点: 小对象的缓存(用户的Token、权限信息、资源信息);小的静态资源缓存;SQL结果的缓存(这部分如果用的好,性能提高会相当大,同时由于Memcached自身提供向上扩容,那么对于数据库向上扩容的老大难问题无疑是一剂好药);ESB消息缓存。
下面是网上的一个部署逻辑示意图:
memcached java client有spymemcached ,Java memcached client 。这些client也很容易与spring进行集成。可以参考缓存系统MemCached的Java客户端优化历程http://www.infoq.com/cn/articles/memcached-java 和AOP的实现方案 http://www.iteye.com/topic/28700
参考资料:
memcached 完全剖析 http://tech.idv2.com/2008/07/10/memcached-001/