• SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理


    本文源码:GitHub·点这里 || GitEE·点这里

    一、Redis简介

    Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch。这些案例整理好后,陆续都会上传Git。
    SpringBoot2 版本,支持的组件越来越丰富,对Redis的支持不仅仅是扩展了API,更是替换掉底层Jedis的依赖,换成Lettuce。
    本案例需要本地安装一台Redis数据库。

    二、Spring2.0集成Redis

    1、核心依赖

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

    2、配置文件

    # 端口
    server:
      port: 8008
    spring:
      application:
        # 应用名称
        name: node08-boot-redis
      # redis 配置
      redis:
        host: 127.0.0.1
        #超时连接
        timeout: 1000ms
        jedis:
          pool:
            #最大连接数据库连接数,设 0 为没有限制
            max-active: 8
            #最大等待连接中的数量,设 0 为没有限制
            max-idle: 8
            #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
            max-wait: -1ms
            #最小等待连接中的数量,设 0 为没有限制
            min-idle: 0
    

    这样Redis的环境就配置成功了,已经可以直接使用封装好的API了。

    3、简单测试案例

    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    import java.util.concurrent.TimeUnit;
    @RestController
    public class RedisController {
        @Resource
        private StringRedisTemplate stringRedisTemplate ;
        @RequestMapping("/setGet")
        public String setGet (){
            stringRedisTemplate.opsForValue().set("cicada","smile");
            return stringRedisTemplate.opsForValue().get("cicada") ;
        }
        @Resource
        private RedisTemplate redisTemplate ;
        /**
         * 设置 Key 的有效期 10 秒
         */
        @RequestMapping("/setKeyTime")
        public String setKeyTime (){
            redisTemplate.opsForValue().set("timeKey","timeValue",10, TimeUnit.SECONDS);
            return "success" ;
        }
        @RequestMapping("/getTimeKey")
        public String getTimeKey (){
            // 这里 Key 过期后,返回的是字符串 'null'
            return String.valueOf(redisTemplate.opsForValue().get("timeKey")) ;
        }
    }
    

    4、自定义序列化配置

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    import java.io.Serializable;
    /**
     * Redis 配置
     */
    @Configuration
    public class RedisConfig {
        private static final Logger LOGGER = LoggerFactory.getLogger(RedisConfig.class) ;
        /**
         * 序列化配置
         */
        @Bean
        public RedisTemplate<String, Serializable> redisTemplate
                (LettuceConnectionFactory  redisConnectionFactory) {
            LOGGER.info("RedisConfig == >> redisTemplate ");
            RedisTemplate<String, Serializable> template = new RedisTemplate<>();
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }
    }
    

    5、序列化测试

    import com.boot.redis.entity.User;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    import java.util.ArrayList;
    import java.util.List;
    @RestController
    public class SerializeController {
        @Resource
        private RedisTemplate redisTemplate ;
        @RequestMapping("/setUser")
        public String setUser (){
            User user = new User() ;
            user.setName("cicada");
            user.setAge(22);
            List<String> list = new ArrayList<>() ;
            list.add("小学");
            list.add("初中");
            list.add("高中");
            list.add("大学");
            user.setEducation(list);
            redisTemplate.opsForValue().set("userInfo",user);
            return "success" ;
        }
        @RequestMapping("/getUser")
        public User getUser (){
            return (User)redisTemplate.opsForValue().get("userInfo") ;
        }
    }
    

    三、源代码地址

    GitHub·地址
    https://github.com/cicadasmile/spring-boot-base
    GitEE·地址
    https://gitee.com/cicadasmile/spring-boot-base
    

  • 相关阅读:
    LETTers比赛第十二场解题报告
    LETTers练习赛第十场 第四题
    LETTers练习赛第十场 第二题
    LETTers练习赛第十场 第一题
    LETTers练习赛十一场解题报告
    RedHat Enterprise Linux 基本网络配置
    c# 连接MySQL中文乱码问题的解决方法
    [原]iBatis.Net(C#)系列一:简介及运行环境
    ArcGIS 9.3 sp1 下载更新
    [原]iBatis.Net(C#)系列二:SQL数据映射
  • 原文地址:https://www.cnblogs.com/cicada-smile/p/11025678.html
Copyright © 2020-2023  润新知