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);
    }

测试结果

spring boot redis (三,终极整合)_第1张图片
21.png

未解决的问题

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

    @Cacheable(value = "companys")
    public Page 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() ~[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() ~[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() ~[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 boot redis (三,终极整合))