• SpringBoot缓存技术


    一、SpringBoot整合Ehhcache

    添加maven依赖

    1 <dependency>
    2     <groupId>org.springframework.boot</groupId>
    3     <artifactId>spring-boot-starter-cache</artifactId>
    4 </dependency>
    5 <dependency>
    6     <groupId>net.sf.ehcache</groupId>
    7     <artifactId>ehcache</artifactId>
    8 </dependency>

    创建Ehcache配置文件src/main/resources/ehcache.xml

     1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
     2     <diskStore path="java.io.tmpdir"/>
     3     <!--defaultCache:echcache 的默认缓存策略-->
     4     <defaultCache 
     5         maxElementsInMemory="10000" 
     6         eternal="false"
     7         timeToIdleSeconds="120" 
     8         timeToLiveSeconds="120" 
     9         maxElementsOnDisk="10000000"
    10         diskExpiryThreadIntervalSeconds="120"
    11         memoryStoreEvictionPolicy="LRU">
    12         <persistence strategy="localTempSwap"/>
    13     </defaultCache>
    14     <!-- 自定义缓存策略-->
    15     <cache name="user"
    16         maxElementsInMemory="10000"
    17         eternal="false"
    18         timeToIdleSeconds="120"
    19         timeToLiveSeconds="120"
    20         maxElementsOnDisk="10000000"
    21         diskExpiryThreadIntervalSeconds="120"
    22         memoryStoreEvictionPolicy="LRU">
    23         <persistence strategy="localTempSwap"/>
    24     </cache>
    25 </ehcache>

    在application.properties中添加

    spring.cache.ehcache.config=ehcache.xml

    在启动类上加注解

    @EnableCaching

    在业务层可以使用注解缓存数据

    1 @Override
    2 @Cacheable(value="user")
    3 public User findUserById(Integer id) {
    4     return this.userMapper.findUserById(id);
    5 }

    @Cacheable的作用就是把方法的返回值添加到ehcache缓存中,value属性为ehcache配置文件中的缓存策略,不设定使用默认。

    要求实体类需要实现Serializable接口。

    @CacheEvict为清除缓存

    1 @Override
    2 @CacheEvict(value="user", allEntries=true)
    3 public void saveUser(User user) {
    4     this.userMapper.save(user);
    5 }

    二、SpringBoot整合Redis

    SpringDataRedis是属于SpringData下的一个模块,作用是简化redis的操作。添加mvaen依赖:

    1 <dependency>
    2     <groupId>org.springframework.boot</groupId>
    3     <artifactId>spring-boot-starter-data-redis</artifactId>
    4 </dependency>

    编写SpringDataRedis配置类

     1 @Configuration
     2 public class RedisConfig {
     3     @Bean
     4     public JedisPoolConfig jedisPoolConfig() {
     5         JedisPoolConfig config = new JedisPoolConfig();
     6         config.setMaxIdle(10);
     7         config.setMinIdle(5);
     8         config.setMaxTotal(20);
     9         return config;
    10     }
    11     @Bean
    12     public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config) {
    13         JedisConnectionFactory factory = new JedisConnectionFactory();
    14         factory.setPoolConfig(config);
    15         factory.setHostName("127.0.0.1");
    16         factory.setPort(6379);
    17         return factory;
    18     }
    19     @Bean
    20     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    21         RedisTemplate<String, Object> template = new RedisTemplate<>();
    22         template.setConnectionFactory(factory);
    23         template.setKeySerializer(new StringRedisSerializer());
    24         template.setValueSerializer(new StringRedisSerializer());
    25         return template;
    26     }
    27 }

    也可以把参数独立出来

    1 spring.redis.pool.max-idle=10
    2 spring.redis.pool.min-idle=5
    3 spring.redis.pool.max-total=20
    4 spring.redis.hostname=127.0.0.1
    5 spring.redis.port=6379
     1 @Configuration
     2 public class RedisConfig {
     3     @Bean
     4     @ConfigurationPropeties(prefix="spring.redis.pool")
     5     public JedisPoolConfig jedisPoolConfig() {
     6         JedisPoolConfig config = new JedisPoolConfig();
     7         //其他参数已经自动注入
     8         return config;
     9     }
    10     @Bean
    11     @ConfigurationProperties(prefix="spring.redis")
    12     public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config) {
    13         JedisConnectionFactory factory = new JedisConnectionFactory();
    14         factory.setPoolConfig(config);
    15         //其他参数已经自动注入
    16         return factory;
    17     }
    18     @Bean
    19     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    20         RedisTemplate<String, Object> template = new RedisTemplate<>();
    21         template.setConnectionFactory(factory);
    22         template.setKeySerializer(new StringRedisSerializer());
    23         template.setValueSerializer(new StringRedisSerializer());
    24         return template;
    25     }
    26 }

    使用springboot中的redis非常简单

    1 this.redisTemplate.opsForValue().set("user", user);
    2 (User)this.redisTemplate.opsForValue().get("user");
  • 相关阅读:
    usaco-ariprog1-pass
    usaco-crypt1-pass
    usaco-barn-repair-pass-KISS
    usaco-mixing milk-pass
    面试HR
    LCS求最长公共子序列(DP)
    毕业随想(转载)
    0-1背包问题(DP)
    排序算法
    二叉搜索树的实现 java
  • 原文地址:https://www.cnblogs.com/guanghe/p/10969326.html
Copyright © 2020-2023  润新知