springBoot2.0使用spring Cach+redis进行数据缓存

一、需求背景

小程序导航栏菜单信息存储在数据库中,用户每次访问菜单时都需要进行数据库查询,非常不必要。遂将菜单数据缓存至redis中对功能进行优化。

二、功能实现

1.maven依赖


    org.springframework.boot
    spring-boot-starter-cache




    org.springframework.boot
    spring-boot-starter-data-redis

2.定义CachConfig

使用注解 @EnableCaching,开启缓存,并配置Redis缓存管理器。

@Configuration
@EnableCaching
public class CacheConfig {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        //设置缓存的默认超时时间:30分钟
        config.entryTtl(Duration.ofMinutes(30L))
                ////如果是空值,不缓存
                .disableCachingNullValues()
                //设置key序列化器
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                //设置value序列化器
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer((new GenericJackson2JsonRedisSerializer())));

        return RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .transactionAware()
                .build();
    }
}

至此,配置工作已完成。

三、springCach的使用

@Service
@CacheConfig(cacheNames="userCach")
public class UserService {

    /**
     * 将结果缓存,当参数相同时,不会执行方法,从缓存中取
     *
     * @param id
     * @return
     */
    @Cacheable(key = "#id")
    public User findUserById(Integer id) {
        System.out.println("查询缓存" + id);
        return new User(id, "小明");
    }

    /**
     * 缓存结果
     *
     * @param user
     * @return
     */
    @CachePut(key = "#user.id")
    public User update(User user) {
        System.out.println("缓存对象" + user);
        return user;
    }

    /**
     * 移除缓存,根据指定key
     *
     * @param user
     */
    @CacheEvict(key = "#user.id")
    public void deleteById(User user) {
        System.out.println("删除指定缓存 " + user);
    }

    /**
     * 移除当前 cacheName下所有缓存
     *
     */
    @CacheEvict(allEntries = true)
    public void deleteAll() {
        System.out.println("移除当前 cacheName下所有缓存");
    }

}

四、注解说明:

@Cacheable :将方法的结果缓存起来,下一次方法执行参数相同时,将不执行方法,返回缓存中的结果。

@CacheEvict:移除指定缓存。

@CachePut :标记该注解的方法总会执行,根据注解的配置将结果缓存。

@Caching: 可以指定相同类型的多个缓存注解,例如根据不同的条件。

@CacheConfig: 类级别注解,可以设置一些共通的配置,@CacheConfig(cacheNames=“user”), 代表该类下的方法均使用这个cacheNames。

你可能感兴趣的:(SpringBoot)