SpringBoot整合Redis

作者: dalaoyang | 来源:发表于2018-04-18 12:40 被阅读353次

    偷懒了几天,好几天没写springboot了。真的不是没什么可写,是因为坚持做一件事真的很难。

    今天抽空弄了一个springboot整合redis的小例子。

    首先做好准备工作,在本地安装一个redis,具体步骤可以自行百度,然后启动redis。出现下图页面就启动成功了。

    image

    然后新建项目,加入redis依赖,pom文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.dalaoyang</groupId>
        <artifactId>springboot_redis</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot_redis</name>
        <description>springboot_redis</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    然后在application.properties加入redis配置:

    ##端口号
    server.port=8888
    
    # Redis数据库索引(默认为0)
    spring.redis.database=0 
    # Redis服务器地址
    spring.redis.host=localhost
    # Redis服务器连接端口
    spring.redis.port=6379 
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    #连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8 
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1 
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8 
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0 
    # 连接超时时间(毫秒)
    spring.redis.timeout=0
    
    

    RedisConfig配置类,其中@EnableCaching开启注解

    package com.dalaoyang.config;
    
    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    
    /**
     * @author dalaoyang
     * @Description
     * @project springboot_learn
     * @package com.dalaoyang.config
     * @email yangyang@dalaoyang.cn
     * @date 2018/4/18
     */
    @Configuration
    @EnableCaching//开启缓存
    public class RedisConfig extends CachingConfigurerSupport {
    
        @Bean
        public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
            CacheManager cacheManager = new RedisCacheManager(redisTemplate);
            return cacheManager;
        }
    
        @Bean
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
            redisTemplate.setConnectionFactory(factory);
            return redisTemplate;
        }
    }
    

    由于只是简单整合,我只创建了一个RedisService来用来存取缓存数据,实际项目中可以根据需求创建interface,impl等等,代码如下:

    package com.dalaoyang.service;
    import javax.annotation.Resource;
    
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.ValueOperations;
    import org.springframework.data.redis.serializer.RedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    import org.springframework.stereotype.Service;
    
    /**
     * @author dalaoyang
     * @Description
     * @project springboot_learn
     * @package com.dalaoyang.service
     * @email yangyang@dalaoyang.cn
     * @date 2018/4/18
     */
    @Service
    public class RedisService {
        @Resource
        private RedisTemplate<String,Object> redisTemplate;
    
        public void set(String key, Object value) {
            //更改在redis里面查看key编码问题
            RedisSerializer redisSerializer =new StringRedisSerializer();
            redisTemplate.setKeySerializer(redisSerializer);
            ValueOperations<String,Object> vo = redisTemplate.opsForValue();
            vo.set(key, value);
        }
    
        public Object get(String key) {
            ValueOperations<String,Object> vo = redisTemplate.opsForValue();
            return vo.get(key);
        }
    }
    

    实体类City:

    package com.dalaoyang.entity;
    
    import java.io.Serializable;
    
    /**
     * @author dalaoyang
     * @Description
     * @project springboot_learn
     * @package com.dalaoyang.Entity
     * @email 397600342@qq.com
     * @date 2018/4/7
     */
    public class City implements Serializable {
        private int cityId;
        private String cityName;
        private String cityIntroduce;
    
        public City(int cityId, String cityName, String cityIntroduce) {
            this.cityId = cityId;
            this.cityName = cityName;
            this.cityIntroduce = cityIntroduce;
        }
    
        public City(String cityName, String cityIntroduce) {
            this.cityName = cityName;
            this.cityIntroduce = cityIntroduce;
        }
    
        public City() {
        }
    
        public int getCityId() {
            return cityId;
        }
    
        public void setCityId(int cityId) {
            this.cityId = cityId;
        }
    
        public String getCityName() {
            return cityName;
        }
    
        public void setCityName(String cityName) {
            this.cityName = cityName;
        }
    
        public String getCityIntroduce() {
            return cityIntroduce;
        }
    
        public void setCityIntroduce(String cityIntroduce) {
            this.cityIntroduce = cityIntroduce;
        }
    }
    

    测试类CityController

    package com.dalaoyang.controller;
    
    import com.dalaoyang.entity.City;
    import com.dalaoyang.service.RedisService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author dalaoyang
     * @Description
     * @project springboot_learn
     * @package com.dalaoyang.controller
     * @email 397600342@qq.com
     * @date 2018/4/7
     */
    @RestController
    public class CityController {
    
        @Autowired
        private RedisService redisService;
    
    
        //http://localhost:8888/saveCity?cityName=北京&cityIntroduce=中国首都&cityId=1
        @GetMapping(value = "saveCity")
        public String saveCity(int cityId,String cityName,String cityIntroduce){
            City city = new City(cityId,cityName,cityIntroduce);
            redisService.set(cityId+"",city);
            return "success";
        }
    
    
    
        //http://localhost:8888/getCityById?cityId=1
        @GetMapping(value = "getCityById")
        public City getCity(int cityId){
            City city = (City) redisService.get(cityId+"");
            return city;
        }
    }
    

    到这里配置基本上都完成了,然后启动项目访问http://localhost:8888/saveCity?cityName=北京&cityIntroduce=中国首都&cityId=18

    image

    发现报错了,看了一下后台,如下

    image

    发现是实体类没有序列化,然后给City类序列化,然后访问http://localhost:8888/saveCity?cityName=北京&cityIntroduce=中国首都&cityId=18发现这次成功了。

    然后查看redis,发现key值的编码不对

    image

    在RedisService中加入

     //更改在redis里面查看key编码问题
            RedisSerializer redisSerializer =new StringRedisSerializer();
            redisTemplate.setKeySerializer(redisSerializer);
    

    在查看redis的key发现编码正确了

    image

    源码下载 :大老杨码云

    个人网站:https://dalaoyang.cn

    相关文章

      网友评论

        本文标题:SpringBoot整合Redis

        本文链接:https://www.haomeiwen.com/subject/xzsvkftx.html