首页 > 编程语言 > 详细

spring xmemcached 注解介绍

时间:2014-12-24 02:08:28      阅读:590      评论:0      收藏:0      [点我收藏+]

一、序言

? ? ? ?前面介绍了下simple-spring-memcache 的一些基本配置,这里就介绍下 一些注解和简单场景的试用。

?

二、基本场景和注解使用

? ? ? 2.1.通过 userId 返回数据,先从数据库查询,然后缓存,以便后面直接从缓存获取

?

? ? ?@ReadThroughSingleCache
? ? ?

 @ReadThroughSingleCache(namespace = "test", expiration = 30000)
 // 这注解主要返回带参数的对象,如果是User 类似的对象 要记得序列化
    public long getUserById(@ParameterValueKeyProvider long id) throws Exception{
        System.out.println("没有缓存命中");
        return id;
    }

?

? ??@ReadThroughMultiCache

? ??

 @ReadThroughMultiCache(namespace = "test", expiration = 60)
    // 这个注解比较单调,我只能返回List,参数也是list
    public List<String> getUserList(@ParameterValueKeyProvider List list) throws Exception{
        System.out.println("没有缓存命中");
        List l = new  ArrayList(3);
        l.add("1");
        return l;
    }

? ?@ReadThroughAssignCache

?

??

  @ReadThroughAssignCache(assignedKey = "userKey", namespace = "test", expiration = 3000)
    // 这个注解在没有参数,也就是没有@ParameterValueKeyProvider 的时候,会指定key
    // 也就能支持上面的 几种情况了
    public List getAllUser(){
        System.out.println("没有缓存命中");
        List l = new  ArrayList(3);
        l.add("1");
        return l;
    }

? ??

?

? ? 2.2 更新场景:如果我们有个User 对象,根据id 或者name 进行更新缓存。

? ? ? ? ? 先创建一个User对象

? ? ? ??

class User implements Serializable{
    private int id;
    private String name;
    // 这个注解表示
    @CacheKeyMethod
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}

?

?

? ??@UpdateSingleCache

? ?

 @UpdateSingleCache(namespace = "test", expiration = 300)
    // @ParameterDataUpdateContent 这个参数注解,表示更新之后,更新的值就是 int  id ,很明显,这里参数最好是user 对象
    public User updateUserById(@ParameterValueKeyProvider @ParameterDataUpdateContent  int id) throws Exception{
        return new User();
    }

// 同样也可以使用另一个注解@ReturnDataUpdateContent,但是必须二选一
   @UpdateSingleCache(namespace = "test", expiration = 300)
   @ReturnDataUpdateContent
    // 这里表示 更新后的值,就是返回值,也就是new user()
    public User updateUserById(@ParameterValueKeyProvider @ParameterDataUpdateContent  int id) throws Exception{
        return new User();
    }

?

? ? ?@UpdateMultiCache

? ? ?

  @UpdateMultiCache(namespace = "test", expiration = 60)
    @ReturnDataUpdateContent
    // 或者参数 的位置使用 @ParameterDataUpdateContent
    // 返回值 获得参数 和 保存一样,都只能使用List 这里比较纠结
    public List<User> updateUsers(@ParameterValueKeyProvider List list){
            return new ArrayList<User>();
    }

?

? ?@UpdateAssignCache

? ??

 @UpdateAssignCache(assignedKey = "userKey", namespace = "test", expiration = 3000)
    @ReturnDataUpdateContent
    // 或者使用 @ParameterValueKeyProvider @ParameterDataUpdateContent 都是可以的
    public User updateUser(){
        return new User();
    }

?

? ?2.3 清除缓存:比如我delete 数据,或者其他想法,要清空这个缓存

? ??@InvalidateSingleCache

   @InvalidateSingleCache(namespace = "test")
    // 根据空间名 进行删除,这种死活要Key,不限定类型以及返回值了
    public User delete(@ParameterValueKeyProvider List list) throws Exception{
        User user = new User();
        return user;
    }

?

? ?@InvalidateMultiCache

@InvalidateMultiCache(namespace = "test")
    // 这种还非要list 的参数
    public User delete(@ParameterValueKeyProvider List list) throws Exception{
        System.out.println("没有缓存命中");
        User user = new User();
        return user;
    }

?

? ?@InvalidateAssignCache

 @InvalidateAssignCache(assignedKey = "userKey", namespace = "test")
    // assignedKey 也是不可缺少的,参数和返回值 不是必须的
    public User delete() throws Exception{
        User user = new User();
        return user;
    }

?

? ? ?@ReadCounterFromCache 等几个 跟原子计数器有关的,暂时没用到,就不介绍了,可以看文档!

?

小结:

? ? ? 1.这里仅仅介绍注解的基本用法, 深入的 以及源码, 有机会再分析吧,我也只大概翻阅了下源码,有问题的地方请说出来,好改进嘛~。~

? ? ? 2.虽然memcache 这里的注解提供的namespace 和?expiration ?,颗粒度细化了不少,但是使用起来在注解方面 感觉没spring 提供的,或者和ehcache 结合的那种使用方便,特别是参数 以及返回值的一些限定上,有时间再搞一套吧!

?

参考文档:https://code.google.com/p/simple-spring-memcached/wiki/Getting_Started

? ? ??

?

?

spring xmemcached 注解介绍

原文:http://greemranqq.iteye.com/blog/2169594

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!