• SpringBoot2.X整合redis


    一、配置文件

    #reids配置
    spring:
        redis:
            database: 0
            host: 10.1.10.89
            password:
            pool:
                max-active: 200
                max-idle: 10
                max-wait: -1
                min-idle: 0
            port: 6379
            timeout: 1000

    二、配置类

    package cn.com.aaaa.test.redis;
    
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheConfiguration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.RedisSerializationContext;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    import java.time.Duration;
    
    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
    
      @Bean
      public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    
        RedisTemplate<String, Object> template = new RedisTemplate<>();
    
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
    
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
    
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
    
        return template;
      }
    
      @Bean
      public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
    
        // 配置序列化(解决乱码的问题),过期时间30秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofSeconds(30))
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
            .disableCachingNullValues();
    
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
            .cacheDefaults(config)
            .build();
        return cacheManager;
      }
    }

    三、service类

    
    
    package cn.com.aaaa.test.service;

    /**
    * @author LingXiu, 2019/11/4 18:14
    * @version V1.0
    */
    public interface RedisService {

    public void setInfo(String id,String ob);

    public String getInfo(String id);

    public Object getObject(String id);
    }
     

    四、实现类

    package cn.com.aaaa.test.service.impl;
    /**
     * @author baiyueguang,  2019/11/4 18:15
     */
    
    import cn.com.acca.test.service.RedisService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.stereotype.Service;
    
    /**
     * @author LingXiu
     * @date 2019/11/4 18:15
     */
    @Service
    public class RedisServiceImpl implements RedisService {
      @Autowired
      StringRedisTemplate stringRedisTemplate;
    
      @Autowired
      RedisTemplate redisTemplate;
    
      @Override
      public void setInfo(String id, String ob) {
        stringRedisTemplate.opsForValue().set(id,ob);
    //    redisUtil.set(id,ob);
      }
    
      @Override
      public String getInfo(String id) {
        String s = stringRedisTemplate.opsForValue().get(id);
        return s;
      }
    
      @Override
      public Object getObject(String id) {
        Ticket ticket = (Ticket) redisTemplate.opsForValue().get(id);
        return ticket;
      }
    }

    五、Controller层

    package cn.com.aaaa.test.controller;
    /**
     * @version r V1.0
     * @author LingXiu,  2019/11/4 17:03
     */
    
    import cn.com.aaaa.test.base.BaseController;
    import cn.com.aaaa.test.dto.Ticket;
    import cn.com.aaaa.test.service.RedisService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @author LingXiu
     * @date 2019/11/4 17:03
     */
    @RestController
    @RequestMapping("/redis")
    public class RedisController extends BaseController {
    
      @Autowired
      private StringRedisTemplate stringRedisTemplate;
    
      @Autowired
      private RedisTemplate redisTemplate;
    
      @Autowired
      RedisService redisService;
    
    
      @GetMapping("/getString/{key}")
      public String getString(@PathVariable String key){
        System.out.println("这个值" + key);
        System.out.println("结果" + redisService.getInfo(key));
        String result =  redisService.getInfo(key);
    
        return result;
      }
    
      @PostMapping("/set/{key}/{value}")
      public Boolean set(@PathVariable("key") String key,
                          @PathVariable("value") String value,HttpServletRequest request){
        redisService.setInfo(key,value);
    
        return false;
      }
    
      @GetMapping("/getObject/{key}")
      public Ticket getObject(@PathVariable String key){
        Ticket ticket = (Ticket) redisService.getObject(key);
        return ticket;
      }
    
    
    }

    六、Postman测试

    测试时,报了个错误。但是后来找不到。我怀疑是网络上粘贴别人代码时,可能引入的格式问题导致的。如果各位遇到了如下报错,其实是个空指针。应该是redisTemplate没有导入进来,或者说导入了一个空模板。请联系我。很高兴和大家交流。

    2019-11-07 14:28:11.962 ERROR 174764 --- [nio-8088-exec-1] c.c.a.r.e.GlobalExceptionHandler         : 发生空指针异常!原因是:
    
    java.lang.NullPointerException: null
        at cn.com.acca.ramsibe.controller.RedisController.set(RedisController.java:43) ~[classes/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_111]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_111]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) [tomcat-embed-core-9.0.17.jar:9.0.17]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) [spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.17.jar:9.0.17]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.17.jar:9.0.17]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.17.jar:9.0.17]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.17.jar:9.0.17]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.17.jar:9.0.17]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.17.jar:9.0.17]

    本文来自博客园,作者:编程狸,转载请注明原文链接:https://www.cnblogs.com/ping-pong/p/11813431.html

  • 相关阅读:
    课堂训练
    测试用例
    学生空间测试
    图书管理系统为例5w1h
    风险分析
    关于选择方案的练习作业
    图书管理系统需求报告书
    电梯演说模板
    对于敏捷开发的见解
    课堂练习2
  • 原文地址:https://www.cnblogs.com/ping-pong/p/11813431.html
Copyright © 2020-2023  润新知