zoukankan      html  css  js  c++  java
  • SpringBoot整合Redis

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

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

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

    然后新建项目,加入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

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

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

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

    在RedisService中加入

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

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

    源码下载 :大老杨码云

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

  • 相关阅读:
    关于Windows 8 用户使用习惯调查结果
    Silverlight 可能迎来新版本
    项目总结(1)集中处理上下文
    VSS 团队 沟通
    中国程序员的迷茫?中国软件行业的悲哀?
    开始学点System.Net NameSpace的Class拉
    .Net FSO简单小结(简单到不能再简单了)
    DotNet Framework不协调的一面 ??
    几个开源项目配置信息的存储和处理的方式
    我对委托的一点理解,欢迎斧正
  • 原文地址:https://www.cnblogs.com/dalaoyang/p/8873866.html
Copyright © 2011-2022 走看看