??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
Simple-Spring-Memcached深入研究一

转载   2014-01-11   浏览量:759


Simple-Spring-Memcached(简称ssm),它也是一个通过Annatation与AOP来完成缓存数据操作的开源项目。仔细看了一下代码,基本上把我之前碰到的问题都解决了,而且MultiCache这一块的实现超出我的预期。该项目主要优点如下:

 

与Spring完善集成

支持两种Memcached Java Client (spymemcached,Xmemcached)

基于Annotation方式实现缓存操作,对代码侵入性小

annotation丰富,可以满足绝大部分需求

下面介绍一下其中各annotation的使用。ssm项目中的Annotation主要分成以下几类

 

SingleCache类 操作单个POJO的Cache数据,由ParameterValueKeyProvider和CacheKeyMethod来标识组装key

MultiCache类 操作List型的Cache数据,由ParameterValueKeyProvider和CacheKeyMethod来标识组装key

AssignCache类 指定key操作Cache数据,由annotation中的 assignedKey 指定key

 

 

 simple-spring-memcached本质上是采用了AOP的方式来实现缓存的调用和管理,其核心组件声明了一些Advice,当遇到相应的切入点时,会执行这些Advice来对memcached加以管理。

 

 

 

切入点是通过标签的方式来进行声明的,在项目开发时,通常在DAO的方法上加以相应的标签描述,来表示组件对该方法的拦截

组件所提供的切入点主要包括以下几种:

ReadThroughSingleCache、ReadThroughMultiCache、ReadThroughAssignCache

 

当遇到查询方法声明这些切入点时,组件首先会从缓存中读取数据,取到数据则跳过查询方法,直接返回。

取不到数据在执行查询方法,并将查询结果放入缓存,以便下一次获取。

InvalidateSingleCache、InvalidateMultiCache、InvalidateAssignCache

 

当遇到删除方法声明这些切入点时,组件会删除缓存中的对应实体,以便下次从缓存中读取出的数据状态是最新的

UpdateSingleCache、UpdateMultiCache、UpdateAssignCache

 

各Annotation的详细说明

 

ReadThroughSingleCache

作用:读取Cache中数据,如果不存在,则将读取的数据存入Cache

key生成规则:ParameterValueKeyProvider指定的参数,如果该参数对象中包含CacheKeyMethod注解的方法,则调用其方法,否则调用toString方法

 

@ReadThroughSingleCache(namespace = "Alpha", expiration = 30)

   public String getDateString(@ParameterValueKeyProvider final String key) {

       final Date now = new Date();

       try {

           Thread.sleep(1500);

       } catch (InterruptedException ex) {

       }

       return now.toString() + ":" + now.getTime();

   }

  

 

InvalidateSingleCache

作用:失效Cache中的数据

key生成规则:

 

 

使用 ParameterValueKeyProvider注解时,与ReadThroughSingleCache一致

使用 ReturnValueKeyProvider 注解时,key为返回的对象的CacheKeyMethod或toString方法生成

 

 

@InvalidateSingleCache(namespace = "Charlie")

    public void updateRandomString(@ParameterValueKeyProvider final Long key) {

        // Nothing really to do here.

    }

 

    @InvalidateSingleCache(namespace = "Charlie")

    @ReturnValueKeyProvider

    public Long updateRandomStringAgain(final Long key) {

        return key;

    }

  UpdateSingleCache

作用:更新Cache中的数据

key生成规则:ParameterValueKeyProvider指定

ParameterDataUpdateContent:方法参数中的数据,作为更新缓存的数据

ReturnDataUpdateContent:方法调用后生成的数据,作为更新缓存的数据

注:上述两个注解,必须与Update*系列的注解一起使用

 

 

@UpdateSingleCache(namespace = "Alpha", expiration = 30)

   public void overrideDateString(final int trash, @ParameterValueKeyProvider final String key,

           @ParameterDataUpdateContent final String overrideData) {

   }

 

   @UpdateSingleCache(namespace = "Bravo", expiration = 300)

   @ReturnDataUpdateContent

   public String updateTimestampValue(@ParameterValueKeyProvider final Long key) {

       try {

           Thread.sleep(100);

       } catch (InterruptedException ex) {

       }

       final Long now = new Date().getTime();

       final String result = now.toString() + "-U-" + key.toString();

       return result;

   }

  ReadThroughAssignCache

作用:读取Cache中数据,如果不存在,则将读取的数据存入Cache

key生成规则: ReadThroughAssignCache 注解中的 assignedKey 字段指定

 

 

@ReadThroughAssignCache(assignedKey = "SomePhatKey", namespace = "Echo", expiration = 3000)

    public List<String> getAssignStrings() {

        try {

            Thread.sleep(500);

        } catch (InterruptedException ex) {

        }

        final List<String> results = new ArrayList<String>();

        final long extra = System.currentTimeMillis() % 20;

        final String base = System.currentTimeMillis() + "";

        for (int ix = 0; ix < 20 + extra; ix++) {

            results.add(ix + "-" + base);

        }

        return results;

    }

  InvalidateAssignCache

作用:失效缓存中指定key的数据

key生成规则:assignedKey 字段指定

 

 

@InvalidateAssignCache(assignedKey = "SomePhatKey", namespace = "Echo")

   public void invalidateAssignStrings() {

   }

  UpdateAssignCache

作用:更新指定缓存

key生成规则:assignedKey 字段指定

 

 

@UpdateAssignCache(assignedKey = "SomePhatKey", namespace = "Echo", expiration = 3000)

   public void updateAssignStrings(int bubpkus, @ParameterDataUpdateContent final List<String> newData) {

   }

转载自:https://www.2cto.com/kf/201401/271885.html

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



memcached源码阅读----使用libevent
本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。一、iblievent的使用首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基
Spring学习(五)——集成memcached客户端
memcached是高性能的分布式内存缓存服务器。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显
Simple-Spring-Memcached深入研究一
Simple-Spring-Memcached(简称ssm),它也是一个通过Annatation与AOP来完成缓存数据操作的开源项目。仔细看了一下代码,基本上把我之前碰到的问题都解决了,而且MultiCache这一块的实现超出我的预期。该项目主要
java中memcached作为hibernate的二级缓存
因项目的问题,需要用到服务器缓存技术,我们选择了分布式的memcached来作为hibernate的二级缓存,需要用的的jar包如下:memcached-2.1.jarhibernate-memcached-1.2.2.jarspy-2.4.jar另外还需要下载memcached服务...
simple-spring-memcached简介
memcached是一款非常优秀的分布式缓存工具,有效提升了按主键检索数据的性能问题。而simple-spring-memcached组件通过与spring框架整合,让memcached的调用变得更加简单。simple-spring-memcached本质上是采用了...
Memcached和Redis分布式锁方案实例讲解
Memcached和Redis分布式锁方案实例讲解。分布式缓存,能解决单台服务器内存不能无限扩张的瓶颈。在分布式缓存的应用中,会遇到多个客户端同时争用的问题。这个时候,需要用到分布式锁,得到锁的客户端才有操作权限。
Redis和Memcached的对比讲解
Redis和Memcached的对比讲解。实际项目开发中,我们经常使用Redis做缓存,也是当前最流行的Nosql数据库,那么Redis有什么优势呢?我们可以和另外一个缓存Memcached做一下比较,让我们在两者比较重来理解Redis的优势和使用。
ehcache、memcache、redis三大缓存的使用比较
ehcache、memcache、redis三大缓存的使用比较。最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!
Memcached概念、原理及使用场合讲解
Memcached概念、原理及使用场合讲解。概念:Memcached是一套分布式内存对象缓存系统,使用于在动态系统中减少数据库负载,提升程序的性能。原理:Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或
memcached常用命令及使用讲解
memcached常用命令及使用讲解。1、启动Memcache常用参数