1 Memcache是什么
Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。
为什么会有Memcache和memcached两种名称?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,
Memcache官方网站:http://www.danga.com/memcached,
2 Memcache工作原理
首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。
与许多 cache 工具类似,Memcached 的原理并不复杂。它采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。Memcached 的目前版本是通过C实现,采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。多个 Server 可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。需要缓存的对象或数据是以 key->value 对的形式保存在Server端。key 的值通过 hash 进行转换,根据 hash 值把 value 传递到对应的具体的某个 Server 上。当需要获取对象数据时,也根据 key 进行。首先对 key 进行 hash,通过获得的值可以确定它被保存在了哪台 Server 上,然后再向该 Server 发出请求。Client 端只需要知道保存 hash(key) 的值在哪台服务器上就可以了。
其实说到底,memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
今天先研究研究缓存工具类的改造,在旧框架中部分函数用了ehcache对执行结果进行了缓存处理,现在目标是提供一个缓存工具类,在配置文件中配置使用哪种缓存(memcached或ehcached),使其它程序对具体的缓存不依赖,同时使用AOP方式来对方法执行结果进行缓存。
首先是工具类的实现:
在Spring中配置
- <!-- EhCache Manager -->
-
<bean id="cacheManager"
-
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
-
<property name="configLocation">
- <value>classpath:ehcache.xml</value>
- </property>
- </bean>
-
-
<bean id="localCache"
-
class="org.springframework.cache.ehcache.EhCacheFactoryBean">
-
<property name="cacheManager" ref="cacheManager" />
-
<property name="cacheName"
-
value="×××.cache.LOCAL_CACHE" />
- </bean>
-
-
<bean id="cacheService"
-
class="×××.core.cache.CacheService" init-method="init" destroy-method="destory">
-
<property name="cacheServerList" value="${cache.servers}"/>
-
<property name="cacheServerWeights" value="${cache.cacheServerWeights}"/>
-
<property name="cacheCluster" value="${cache.cluster}"/>
-
<property name="localCache" ref="localCache"/>
- </bean>
在properties文件中配置${cache.servers} ${cache.cacheServerWeights} ${cache.cluster}
具体工具类的代码
然后实现函数的AOP拦截类,用来在函数执行前返回缓存内容
- public class CachingInterceptor implements MethodInterceptor {
-
-
private CacheService cacheService;
-
private String cacheKey;
-
-
public void setCacheKey(String cacheKey) {
-
this.cacheKey = cacheKey;
- }
-
-
public void setCacheService(CacheService cacheService) {
-
this.cacheService = cacheService;
- }
-
-
public Object invoke(MethodInvocation invocation) throws Throwable {
- Object result = cacheService.get(cacheKey);
-
-
if (result == null) {
- result = invocation.proceed();
- cacheService.put(cacheKey,result);
- }
-
return result;
- }
- }
Spring的AOP配置如下:
- <aop:config proxy-target-class="true">
- <aop:advisor
-
pointcut="execution(* ×××.PoiService.getOne(..))"
-
advice-ref="PoiServiceCachingAdvice" />
- </aop:config>
-
-
<bean id="BasPoiServiceCachingAdvice"
-
class="×××.core.cache.CachingInterceptor">
-
<property name="cacheKey" value="PoiService" />
-
<property name="cacheService" ref="cacheService" />
- </bean>
分享到:
相关推荐
Memcached介绍、应用场景、运行机制 Memcached安装 Memcached启动,参数 Memcached连接、监控 Memcached客户端命令 Memcached的Java客户端实例 Memcached的客户端分布式原理 Memcached的服务器端运行原理 ...
包含Redis,memcache,encache的NoSQL入门
阿里云-云数据库Memcache-快速入门.pdf
阿里云-云数据库Memcache-快速入门-D.docx
Java开发中的Memcache原理及实现,如何在Java开发中使用Memcache !Redis的入门指导
Windows_Memcache安装(XAMPP+Memcache+PHP) 安装步骤,详细说明
memcached 的入门小例子,使用两种不同的jar 访问客户端
《NoSQL 入门.ppt》,是一个关于 NoSQL 入门的教程。PPT 格式,大小 1 MB。 内容预览: 1、NoSQL技术介绍 1.1、NoSQL是什么 1.2、NoSQL为什么会存在 1.3、NoSQL产品分类 1.4、NoSQL技术的特点 1.5、NoSQL技术的不足 ...
入门thinkphp3.2.2,基于jquery+ajax+php+json+memcache+mysql+windows的一次尝试。
NoSQL, Redis, MemCache, MongoDB, NoSQL数据库入门。
3.2、Key-Value介绍(Memcache) 3.2.1、Memcache是什么 3.2.2、Memcache的特性 3.2.3、Memcache的架构 3.2.4、Memcache的简单使用 3.2.5、Memcache的图形管理工具 3.3、Couchbase介绍 3.3.1、Couchbase是什么 ...
本文较为详细的讲述了php下Memcached的入门知识与实例。分享给大家供大家参考。具体如下: memcache 在什么情况下被使用,什么情况下不要使用? 你在何时应该使用 memcache,又要在何时避免使用它?现在你已经知道了,...
Spring Boot入门教程,共42课,分别讲解了基础WEB开发、Thymeleaf、FastDFS、WebSocket、JDBC、MyBatis、JPA、Druid、Memcache、Redis、 ActiveMQ、RabbitMQ、MongoDB、ElasticSearch、Quartz、Security、 Actuator...
它提供以下内容: 支持Redis和Memcache协议(文本和二进制) 多线程多客户端执行多种配置选项,包括: 阅读:写比率随机和顺序密钥名称模式策略随机或远程密钥到期Redis集群TLS支持...以及更多阅读更多信息:入门...
在Tair出现之前的很长一段时间里,像redis、memcache这些知名NoSql数据库是不支持分布式的,在这样的背景下,由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存,类似map的key/value结构,在...
Memcached使用入门,Memcached基础及示例程序,Memcached Java API基础之MemcachedClient
适合做网站框架技术,里面有freemark模板技术和memcache缓存技术
入门你应该有: MySQL数据库(可选)可用的Memcached实例。 一个空的Sinatra应用程序班级达尔Dal实例为特定MySQL表提供DAL层,包括使用密钥有效期通过Memcached缓存进行的可选写操作。 要使用CrudService::Dal ,请...
ormit's very special and different from others,who use who love it.Support:Txt、Xml、Access、Sqlite、Mssql、Mysql、Oracle、Sybase、Postgres、Redis、MemCache。Demo(入门): 开篇介绍: 更多文章:QQ群:...