zoukankan      html  css  js  c++  java
  • Springboot~@Cacheable非侵入式缓存

    早在很多年前,我曾经封装过关于.net unity aop的缓存[https://www.cnblogs.com/lori/p/5169420.html],面向方法的缓存,而如今,spring早已经集成了这个技术,并且得到了广大的应用。

    添加依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
      <version>2.3.0.RELEASE</version>
    </dependency>
    

    开启缓存功能

    @SpringBootApplication
    @EnableCaching
    public class TestApplication {
        public static void main(String[] args) {
            SpringApplication.run(TestApplication.class, args);
        }
    }
    
    

    缓存功能失灵

    • 检查redis依赖是否有问题,版本等
    • 配置里是否关闭了redis自动配置功能spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

    添加缓存

     /**
         * 不参数的
         * redis key list::SimpleKey []
         * @return
         */
        @Cacheable(value = "list", key = "")
        @GetMapping("list")
        public ResponseEntity list() {
            return ResponseEntity.ok(
                    new Info("zzl", "lind",new Date())
            );
        }
    
        /**
         * 带参数的,支持实体类型
         * redis key list::name,instance of list::zhansan
         * @param name
         * @return
         */
        @GetMapping("detail")
        @Cacheable(value = "list", key = "#p0")
        public ResponseEntity listOne(@RequestParam String name) {
            return ResponseEntity.ok(new Info("zzl", "lind", new Date())
            );
        }
    

    清除缓存

    /**
         * del redis key for list::SimpleKey []
         * @return
         */
        @GetMapping("del")
        @CacheEvict(value = "list")
        public String delAll() {
            return "ok";
        }
    
        /**
         *  del redis key for list::name
         * @param name
         * @return
         */
        @GetMapping("del/{name}")
        @CacheEvict(value = "list", key = "#p0")
        public String del(@PathVariable String name) {
            return "ok";
        }
    

    定义redis缓存策略

    /**
         * spring cache配置,以json的方式存储到redis.
         *
         * @return
         */
        @Bean
        public RedisCacheConfiguration redisCacheConfiguration() {
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            jackson2JsonRedisSerializer.setObjectMapper(om);
    
            RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
            redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
                    RedisSerializationContext
                            .SerializationPair
                            .fromSerializer(jackson2JsonRedisSerializer)
            ).entryTtl(Duration.ofMinutes(30));
    
            return redisCacheConfiguration;
        }
    

    自定义序列化后的截图,改为json

    • 之前是二进制的,可读性不高
    • 正在改为json的,提高可读性

  • 相关阅读:
    IE的F12开发人员工具不显示问题
    CENTOS 6.5 平台离线编译安装 PHP5.6.6
    PHP 5.6 编译安装选项说明
    CENTOS 6.5 平台离线编译安装 Mysql5.6.22
    CENTOS 6.5 平台离线安装 Apache2.4
    Bringing Whoops Back to Laravel 5
    在 Laravel 中使用图片处理库 Integration/Image
    让 windows 下的命令行程序 cmd.exe 用起来更顺手
    Laravel Composer and ServiceProvider
    VisualStudio2013 如何打开之前版本开发的(.vdproj )安装项目
  • 原文地址:https://www.cnblogs.com/lori/p/14849333.html
Copyright © 2011-2022 走看看