`
greemranqq
  • 浏览: 977018 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论
阅读更多

一、序言

       前面介绍了下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

      

 

 

0
0
分享到:
评论

相关推荐

    Ehcache+xmemcached+redis 整合spring注解demo

    本项目" Ehcache+xmemcached+redis 整合spring注解demo"旨在演示如何将这三种主流的缓存技术——Ehcache、xmemcached和Redis——与Spring框架的注解功能相结合,以实现高效、灵活的缓存管理。以下是对这些知识点的...

    Xmemcached/jedis springdemo

    【Xmemcached/jedis Spring Demo】是一个整合了Xmemcached和jedis的Spring示例项目,旨在帮助开发者理解和学习如何在Spring框架中集成并使用这两种流行的NoSQL客户端库。Xmemcached是Java编写的高效、易用的...

    Memcached spring 的集成

    - 在代码中,通过Spring的缓存注解,可以自动地将数据存入和取出Memcached。在实际应用中,可以通过设置不同的缓存策略,如基于方法的缓存、基于类的缓存等,以优化性能。 7. **性能优化**: - 缓存大小:根据...

    SSM与memcached整合项目Spring Cache

    Spring Cache的配置主要是通过`@EnableCaching`注解开启,并通过`@Cacheable`、`@CacheEvict`、`@CachePut`等注解来控制缓存的行为。 接下来,我们来看看memcached。memcached是一款高性能的分布式内存对象缓存系统...

    Spring与memcached整合

    标题“Spring与memcached整合”涉及的是在Java开发环境中如何将Spring框架与memcached缓存系统相结合使用,以便提升应用程序的性能和响应速度。这里我们将深入探讨这一整合过程中的关键概念和技术。 首先,...

    simple-spring-memcached集成memcache

    它支持多种Memcached客户端,包括spymemcached、xmemcached等,这样我们就可以根据自己的需求和环境选择合适的方式。 集成SSM的步骤大致如下: 1. **添加依赖**:在项目的pom.xml文件中,我们需要引入simple-...

    spring memcached

    - 另外,`@Cacheable` 注解支持使用 SpEL(Spring Expression Language) 来动态生成缓存键值,这为开发者提供了极大的灵活性。 ```java @Cacheable(value = "book", key = "#isbn.rawNumber") public Book ...

    Memcached与Spring、Mybatis集成.doc

    - 启用了AspectJ代理机制,这对于使用simple-spring-memcached中的注解非常关键。 - 定义了一个名为`defaultMemcachedClient`的Bean,它是simple-spring-memcached中的核心组件之一,负责创建和管理Memcached客户端...

    spring调用memcached client for java

    Spring 3.1引入了缓存抽象,允许开发者通过简单的注解来实现缓存管理。它支持多种缓存机制,包括Memcached。 集成步骤如下: 1. **添加依赖**:在项目中添加Memcached客户端库,如spymemcached或xmemcached。这些...

    memcached+spring

    在需要缓存的方法上使用`@Cacheable`、`@CacheEvict`、`@CachePut`等注解,Spring会自动处理缓存的读写操作。例如: ```java @Service public class UserService { @Cacheable(value = "users", key = "#id") ...

    memcache-demo

    4. **集成XMemcached与Spring**:在Spring中使用XMemcached,需要在Spring配置文件中定义一个Bean来代表Memcached客户端,然后可以使用`@Cacheable`、`@CacheEvict`等注解实现方法级别的缓存控制。 5. **缓存配置**...

    memcached相关资料及spring配置文件和封装接口和类

    例如,你可以通过 Spring 的 `@Autowired` 注解注入 `MemcachedService` 实例,然后像下面这样使用: ```java @Autowired private MemcachedService memcachedService; public void saveToCache(String key, ...

    SSM与memcached整合项目

    - 配置Memcached客户端库,如spymemcached或xmemcached,这些库提供与Memcached服务器通信的API。 - 在Spring配置文件中定义Memcached的bean,设置连接参数如服务器地址、端口等。 - 创建一个缓存管理器,比如...

    memcached在SSH中的配置

    1. **添加依赖**:在SSH项目的pom.xml中添加memcached的客户端库,如spymemcached或xmemcached。 2. **配置Spring**: - 创建一个Memcached配置类,声明一个`MemcachedClient` bean,并配置服务器地址、池大小等...

    SSM整合memcached缓存

    2. 添加依赖:在SSM项目中,你需要在pom.xml文件中添加Memcached的客户端库,如spymemcached或xmemcached,以便于Java程序与Memcached服务通信。 3. 配置Memcached:在Spring的配置文件中,定义一个Memcached的bean...

    实现自定义标注并注入

    例如,你可以创建一个`@CacheService`注解,用以标记所有涉及缓存操作的服务,并在Spring配置中定义一个Bean,自动注入缓存客户端: ```java @Configuration public class AppConfig { @Bean @...

    Java环境下Memcached应用详解.docx

    同时,为了实现AOP(面向切面编程)对方法执行结果的缓存,可以利用Spring的`@Cacheable`、`@CacheEvict`等注解,配合`CacheResolver`和`CacheErrorHandler`进行缓存的自动管理。 在实际应用中,还需要考虑缓存的...

Global site tag (gtag.js) - Google Analytics