spring如何做本地缓存

不及物动词 其他 176

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架提供了多种方式来实现本地缓存,下面将介绍两种常用的方法:使用Spring Cache和使用Guava Cache。

    一、使用Spring Cache

    1. 添加依赖
      首先,在项目的pom.xml文件中添加以下依赖:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    
    1. 配置缓存
      在Spring Boot的配置文件(application.properties或application.yml)中添加以下配置:
    spring.cache.type=caffeine
    

    这里使用了Caffeine作为缓存的实现方式,也可以使用其他缓存实现,如EhCache、Redis等。

    1. 在需要缓存的方法上添加注解
      在需要缓存的方法上添加@Cacheable注解,如下所示:
    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(String id) {
        // 从数据库或其他数据源获取数据的逻辑
    }
    

    这样,当调用getUserById方法时,如果缓存中已经存在id对应的数据,则直接从缓存中取出返回,否则执行方法体的逻辑,并将返回值放入缓存。

    二、使用Guava Cache

    1. 添加依赖
      首先,在项目的pom.xml文件中添加以下依赖:
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>30.0-jre</version>
    </dependency>
    
    1. 创建缓存对象
      在需要使用缓存的类中创建Guava Cache对象,如下所示:
    LoadingCache<String, Object> cache = CacheBuilder.newBuilder()
            .maximumSize(1000)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .build(
                new CacheLoader<String, Object>() {
                    public Object load(String key) throws Exception {
                        // 从数据库或其他数据源获取数据的逻辑
                    }
                }
            );
    

    这里设置了缓存最大容量为1000个对象,对象在10分钟没有读写操作后会过期。

    1. 使用缓存
      在需要缓存的方法中通过缓存对象来获取数据,如下所示:
    public User getUserById(String id) {
        try {
            return (User) cache.get(id);
        } catch (ExecutionException e) {
            // 处理异常的逻辑
        }
    }
    

    这样,当调用getUserById方法时,如果缓存中已经存在id对应的数据,则直接从缓存中取出返回,否则执行缓存对象的load方法从数据库或其他数据源获取数据,并将返回值放入缓存。

    总结:
    使用Spring Cache和Guava Cache都可以方便地在Spring框架中实现本地缓存功能。使用Spring Cache需要配置缓存的实现方式,并在方法上添加注解来实现缓存功能;使用Guava Cache需要手动创建缓存对象,并在需要的方法中调用缓存对象来获取数据。根据实际需求和项目的复杂程度,选择合适的缓存方式来提升系统性能。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring提供了多种本地缓存的实现方式,可以根据具体的需求选择合适的实现方式。以下是几种常用的本地缓存实现方式:

    1. 使用ConcurrentHashMap实现本地缓存:
      ConcurrentHashMap是Java标准库中提供的线程安全的哈希表实现,可以直接用于实现本地缓存功能。通过将缓存数据存储在ConcurrentHashMap中,可以实现并发访问和更新数据的功能。

      示例代码:

      import java.util.concurrent.ConcurrentHashMap;
      
      public class LocalCache {
          private ConcurrentHashMap<String, Object> cache = new ConcurrentHashMap<String, Object>();
      
          public void put(String key, Object value) {
              cache.put(key, value);
          }
      
          public Object get(String key) {
              return cache.get(key);
          }
      
          public void remove(String key) {
              cache.remove(key);
          }
      }
      
    2. 使用Caffeine实现本地缓存:
      Caffeine是一款高性能的Java缓存库,可以用于实现本地缓存功能。它提供了丰富的缓存策略和配置选项,可以根据具体需求进行配置和使用。

      示例代码:

      import com.github.benmanes.caffeine.cache.Cache;
      import com.github.benmanes.caffeine.cache.Caffeine;
      
      public class LocalCache {
          private Cache<String, Object> cache = Caffeine.newBuilder().build();
      
          public void put(String key, Object value) {
              cache.put(key, value);
          }
      
          public Object get(String key) {
              return cache.getIfPresent(key);
          }
      
          public void remove(String key) {
              cache.invalidate(key);
          }
      }
      
    3. 使用Ehcache实现本地缓存:
      Ehcache是一个流行的开源Java缓存库,提供了丰富的功能和灵活的配置选项。可以通过配置文件或代码的方式来使用Ehcache实现本地缓存功能。

      示例代码:

      import org.ehcache.Cache;
      import org.ehcache.CacheManager;
      import org.ehcache.config.CacheConfiguration;
      import org.ehcache.config.Configuration;
      import org.ehcache.config.builders.CacheConfigurationBuilder;
      import org.ehcache.config.builders.CacheManagerBuilder;
      import org.ehcache.config.builders.ResourcePoolsBuilder;
      
      public class LocalCache {
          private Cache<String, Object> cache;
      
          public LocalCache() {
              Configuration configuration = CacheManagerBuilder.newCacheManagerBuilder().build();
              CacheManager cacheManager = CacheManagerBuilder.newCacheManager(configuration);
              cacheManager.init();
      
              CacheConfiguration<String, Object> cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, Object.class, ResourcePoolsBuilder.heap(100))
                      .build();
              cache = cacheManager.createCache("myCache", cacheConfiguration);
          }
      
          public void put(String key, Object value) {
              cache.put(key, value);
          }
      
          public Object get(String key) {
              return cache.get(key);
          }
      
          public void remove(String key) {
              cache.remove(key);
          }
      }
      
    4. 使用Guava Cache实现本地缓存:
      Guava是Google开源的一款Java工具库,其中包含了一套用于实现本地缓存的缓存库。Guava Cache提供了近乎完美的缓存实现,具备高性能和丰富的功能。

      示例代码:

      import com.google.common.cache.Cache;
      import com.google.common.cache.CacheBuilder;
      
      public class LocalCache {
          private Cache<String, Object> cache = CacheBuilder.newBuilder().build();
      
          public void put(String key, Object value) {
              cache.put(key, value);
          }
      
          public Object get(String key) {
              return cache.getIfPresent(key);
          }
      
          public void remove(String key) {
              cache.invalidate(key);
          }
      }
      
    5. 使用Redis实现本地缓存:
      Redis是一款高性能的分布式缓存数据库,可以用于实现分布式缓存和本地缓存功能。通过将缓存数据存储在Redis中,可以实现多节点共享和数据持久化等功能。

      示例代码:

      import org.springframework.data.redis.core.RedisTemplate;
      import org.springframework.data.redis.core.ValueOperations;
      
      import javax.annotation.Resource;
      
      public class LocalCache {
          @Resource
          private RedisTemplate<String, Object> redisTemplate;
      
          public void put(String key, Object value) {
              ValueOperations<String, Object> ops = redisTemplate.opsForValue();
              ops.set(key, value);
          }
      
          public Object get(String key) {
              ValueOperations<String, Object> ops = redisTemplate.opsForValue();
              return ops.get(key);
          }
      
          public void remove(String key) {
              redisTemplate.delete(key);
          }
      }
      

    总结来说,Spring提供了多种实现本地缓存的方式,可以根据具体需求和环境选择合适的实现方式。以上列举了几种常用的实现方式,包括使用ConcurrentHashMap、Caffeine、Ehcache、Guava Cache和Redis等。不同的实现方式具备不同的特点和优势,可以根据具体情况选择适合的方式来实现本地缓存。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring框架通过提供Cache抽象来支持本地缓存。Spring的缓存抽象是一个灵活的、可扩展的缓存管理框架,它允许将方法调用的返回结果缓存在内存中,以提高应用程序的性能。在本地缓存中,缓存数据存储在应用程序的内存中,由于访问内存速度比访问磁盘或网络速度更快,所以使用本地缓存可以大大提高应用程序的响应速度。

    下面将从以下几个方面介绍Spring框架如何做本地缓存:

    1. 引入Spring缓存依赖
    2. 配置缓存管理器
    3. 使用注解开启缓存
    4. 使用缓存注解
    5. 清除缓存数据

    1. 引入Spring缓存依赖

    首先,需要在项目的构建配置文件中添加Spring的缓存依赖。如果使用Maven构建项目,可以在pom.xml文件中添加以下依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    

    2. 配置缓存管理器

    在Spring框架中,需要配置一个缓存管理器来管理缓存。可以通过在配置文件中添加以下配置来创建一个缓存管理器:

    @Configuration
    @EnableCaching
    public class CacheConfig {
    
        @Bean
        public CacheManager cacheManager() {
            SimpleCacheManager cacheManager = new SimpleCacheManager();
            cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("myCache")));
            return cacheManager;
        }
    }
    

    在上述配置中,创建了一个名为"myCache"的缓存实例,并将其添加到缓存管理器中。如果需要添加多个缓存实例,只需将它们分别添加到缓存管理器中即可。

    3. 使用注解开启缓存

    在需要使用缓存的类或方法上,可以通过使用Spring的缓存注解来开启缓存。首先,在配置类中添加@EnableCaching注解来开启缓存功能:

    @Configuration
    @EnableCaching
    public class CacheConfig {
        ...
    }
    

    然后,在需要使用缓存的方法上添加@Cacheable注解:

    @Service
    public class MyService {
    
        @Cacheable(value = "myCache", key = "#param")
        public String getData(String param) {
            // 缓存逻辑
        }
    }
    

    在上述示例中,通过在getData方法上添加@Cacheable注解,指定了该方法的返回结果需要缓存,并且将缓存的值存储在名为"myCache"的缓存实例中。value属性指定了缓存实例的名称,key属性指定了缓存的键,Spring会根据该键来查找缓存数据。

    4. 使用缓存注解

    Spring框架提供了多个注解来对缓存进行操作:

    • @Cacheable:用于在方法执行前检查缓存中是否存在数据,如果存在,则直接从缓存中获取数据;如果不存在,则执行方法,并将返回结果存储到缓存中。
    • @CacheEvict:用于清空或删除缓存中的数据。
    • @CachePut:用于将方法返回的结果存储到缓存中,不会对缓存中已有的数据进行判断。

    这些注解可以根据具体的业务需求来选择使用。

    5. 清除缓存数据

    当需要清除缓存中的数据时,可以使用@CacheEvict注解。该注解可以在方法执行后执行,并指定需要清除的缓存实例:

    @Service
    public class MyService {
    
        @CacheEvict(value = "myCache", key = "#param")
        public void clearCache(String param) {
          // 清除缓存逻辑
        }
    }
    

    在上述示例中,通过在clearCache方法上添加@CacheEvict注解,并指定了需要清除的缓存实例和键,当该方法执行时,指定缓存实例中的指定键对应的缓存数据会被清除。

    总结来说,使用Spring框架的缓存抽象可以轻松地实现本地缓存。通过引入必要的依赖,配置缓存管理器,添加缓存注解以及使用缓存注解,可以便捷地实现缓存功能,并提升应用程序的性能。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部