Spring Boot2.0 整合Redis实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_cxrs/article/details/88921016

目标:Spring Boot 整合Redis缓存  ,可在程序中通过代码操作Redis来读取数据。

前提条件:Redis服务已安装完成。

具体安装步骤请百度查找。

下面是整合步骤

  1. Pom.xml配置相关依赖包
    dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  2. 初始化配置RedisConfig类
    /**
     * Redis配置
     *
     * @author yuewei
     */
    @Configuration
    public class RedisConfig {
    
        @Bean
        @SuppressWarnings("all")
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
            template.setConnectionFactory(factory);
            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);
            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
            // key采用String的序列化方式
            template.setKeySerializer(stringRedisSerializer);
            // hash的key也采用String的序列化方式
            template.setHashKeySerializer(stringRedisSerializer);
            // value序列化方式采用jackson
            template.setValueSerializer(jackson2JsonRedisSerializer);
            // hash的value序列化方式采用jackson
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
            return template;
        }
    }
  3. Redis相关属性文件配置
    spring:
    redis:
       database: 0
       host: localhost
       port: 6379
       password: 123456      # 密码(默认为空)
       timeout: 6000ms  # 连接超时时长(毫秒)
       jedis:
         pool:
           max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
           max-wait: -1ms      # 连接池最大阻塞等待时间(使用负值表示没有限制)
           max-idle: 10      # 连接池中的最大空闲连接
           min-idle: 5       # 连接池中的最小空闲连接
  4. Redis工具类即RedisUtil类
    **
     * Redis工具类
     */
    @Component
    public class RedisUtils {
        @Autowired
        private RedisTemplate<String, Object> redisTemplate;
    
        @Resource(name="redisTemplate")
        private ValueOperations<String, String> valueOperations;
    
        /**  默认过期时长,单位:秒 */
        public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
        /**  不设置过期时长 */
        public final static long NOT_EXPIRE = -1;
    
        public void set(String key, Object value, long expire){
            valueOperations.set(key, toJson(value));
            if(expire != NOT_EXPIRE){
                redisTemplate.expire(key, expire, TimeUnit.SECONDS);
            }
        }
    
        public void set(String key, Object value){
            set(key, value, DEFAULT_EXPIRE);
        }
    
        public <T> T get(String key, Class<T> clazz, long expire) {
            String value = valueOperations.get(key);
            if(expire != NOT_EXPIRE){
                redisTemplate.expire(key, expire, TimeUnit.SECONDS);
            }
            return value == null ? null : fromJson(value, clazz);
        }
    
        public <T> T get(String key, Class<T> clazz) {
            return get(key, clazz, NOT_EXPIRE);
        }
    
        public String get(String key, long expire) {
            String value = valueOperations.get(key);
            if(expire != NOT_EXPIRE){
                redisTemplate.expire(key, expire, TimeUnit.SECONDS);
            }
            return value;
        }
    
        public String get(String key) {
            return get(key, NOT_EXPIRE);
        }
    
        public void delete(String key) {
            redisTemplate.delete(key);
        }
    
        /**
         * Object转成JSON数据
         */
        private String toJson(Object object){
            if(object instanceof Integer || object instanceof Long || object instanceof Float ||
                    object instanceof Double || object instanceof Boolean || object instanceof String){
                return String.valueOf(object);
            }
            return JSON.toJSONString(object);
        }
    
        /**
         * JSON数据,转成Object
         */
        private <T> T fromJson(String json, Class<T> clazz){
            return JSON.parseObject(json, clazz);
        }
  5. 控制Redis是否启用的切面
     

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class RedisTest {
    
        @Autowired
        private RedisUtils redisUtils;
    
        @Test
        public void contextLoads() {
    
            redisUtils.set("user", "testuser");
    
            System.out.println(redisUtils.get("user"));
        }
    

执行测试方法如果控制台能打印出redisUtils设置的值则表示整合成功。

猜你喜欢

转载自blog.csdn.net/java_cxrs/article/details/88921016