spring boot redis (三,终极整合)

上一章介绍了一些基本的配置和测试,这一章就开始实际操作了。

开始前的纠结

在想缓存到底放在哪一层,之前测试的时候是放在controller上面的,但是根据自己的代码来看 有些是返回model或者ModelAndView 的,缓存里面存的就是你返回的东西,居然报错,说不能转换成json,然后放在底层的dao 还可能被其他业务调用,使用缓存就不好了。service针对具体业务,控制到这个级别就行了,最后就决定放在service层了。

单个对象的查询

    @Cacheable(value = "company")
    public Company findById(Long id) {
        return companyDao.findOne(id);
    }

单个对象保存修改

@CachePut(value = "company", key = "#root.caches[0].name + ':' + #company.id")
    public Company save(Company company){
        return companyDao.save(company);
    }

单个对象的删除(list删除也是调用单个对象删除)

    @CacheEvict(value = "company")
    public void delete( long id) {
        companyDao.delete(id);
    }

测试结果

21.png

未解决的问题

关于list分页的缓存没有解决,有给力的朋友帮忙解决下么

    @Cacheable(value = "companys")
    public Page<Company> getCompanyPageByName(String name,Integer page,Integer size ) {
        Pageable pageable = new PageRequest(page,size,SortBuilder.generateSort("createTime desc","id asc"));
        if(StringKit.isEmpty(name)){
            return companyDao.findAll(pageable);
        }else{
            return companyDao.findByNameLike("%"+name+"%",pageable);
        }
    }
错误信息
2017-12-26 15:34:08.853 ERROR 15840 --- [io-8088-exec-13] o.s.boot.context.web.ErrorPageFilter     : Forwarding to error page from request [/backend/system/company/list] due to exception [Could not read JSON: No suitable constructor found for type [simple type, class org.springframework.data.domain.PageImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: [B@503b4614; line: 1, column: 46]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class org.springframework.data.domain.PageImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: [B@503b4614; line: 1, column: 46]]

org.springframework.data.redis.serializer.SerializationException: Could not read JSON: No suitable constructor found for type [simple type, class org.springframework.data.domain.PageImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: [B@503b4614; line: 1, column: 46]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class org.springframework.data.domain.PageImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
 at [Source: [B@503b4614; line: 1, column: 46]
    at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73) ~[spring-data-redis-1.6.4.RELEASE.jar:na]
    at org.springframework.data.redis.cache.RedisCache$CacheValueAccessor.deserializeIfNecessary(RedisCache.java:378) ~[spring-data-redis-1.6.4.RELEASE.jar:na]
    at org.springframework.data.redis.cache.RedisCache.get(RedisCache.java:144) ~[spring-data-redis-1.6.4.RELEASE.jar:na]
    at org.springframework.data.redis.cache.RedisCache.get(RedisCache.java:94) ~[spring-data-redis-1.6.4.RELEASE.jar:na]
    at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:68) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.cache.interceptor.CacheAspectSupport.findInCaches(CacheAspectSupport.java:469) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:435) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:336) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:302) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at com.daiwei.project.backend.system.service.CompanyService$$EnhancerBySpringCGLIB$$998f6d25.getCompanyPageByName(<generated>) ~[classes/:0.0.1-SNAPSHOT]
    at com.daiwei.project.backend.system.controller.CompanyController.list(CompanyController.java:129) ~[classes/:0.0.1-SNAPSHOT]
    at com.daiwei.project.backend.system.controller.CompanyController$$FastClassBySpringCGLIB$$ae161425.invoke(<generated>) ~[classes/:0.0.1-SNAPSHOT]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) ~[spring-aop-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at com.daiwei.project.backend.system.controller.CompanyController$$EnhancerBySpringCGLIB$$5f416f1.list(<generated>) ~[classes/:0.0.1-SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,648评论 25 709
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,476评论 0 2
  • 老刀有点担忧,看了看手表,清晨5点。他回到楼门口等着。两旁狼吞虎咽的饥饿少年围绕着他。他认识其中两个,原来在彭蠡家...
    汤圆君花生酱A15003阅读 232评论 0 0
  • 企业
    be58e0597e58阅读 498评论 0 0