Spring Boot整合Spring Data Redis-整合步骤

如何通过SpringBoot去整合我们的Redis,这里我们先对SpringBoot Redis做一个简单的介绍,其实SpringBoot Redis,

和我们之前讲的Spring JPA都是Spring Data下的一个模块,其实不同的是什么呢,Spring Data JPA,我们对数据库操作

的一些行为,那么SpringBoot Data Redis,简化了我们在项目当中,如果使用Redis的话,对于Redis操作的一些行为,

当然SpringBoot Data除了我们说的那两个模块之外,还有JDBC,还有MongoDB,这都是他在SpringData下提供的模块,

这些模块的出发点呢,也是针对了如果我们项目当中使用了这些技术,那么他就可以去简化技术操作的一些行为,现在我们

把笔记整理一下,SpringData Redis他是什么呢,Spring Data Redis是属于Spring Data下的一个模块,然后他的作用是

什么呢,就是简化对于Redis的一个操作,这是他的一个作用,然后接下来我们看一下,如何在我们的代码当中,如何使用

SpringBoot去整合Redis,首先打开我们的eclipse,我们先去创建一个项目,这里我们就快速创建一个,在我们的项目当中

找一个最简单的,首先对pom文件做一个修改,项目修改完以后,我们接下来看,我们既然想整合Spring Data Redis,我们要

在项目当中添加相应的坐标,在这里我们添加一个坐标



	org.springframework.boot
	spring-boot-starter-data-redis


提供了一个启动器,那么这个启动器的名字叫什么呢,spring-boot-starter-data-redis,我们把这个坐标加入以后,

看一下Maven Dependecies,把它展开,会多了一个Spring-data-redis的一个jar包,这是Spring data整合Redis的

一个核心jar包,除此之外还会多一个jedis的jar包,这个jedis jar包大家不陌生了,其实jedis的主要作用是提供了

JAVA操作redis的一套API,我们以前用spring整合redis的时候也用了这个jar包,所以这两个jar包进来以后,就可以

使用spring data redis去做相应的开发,第一步我们把坐标加进来之后呢,在这里我们先回顾一下,如果我们用Spring

整合Redis的时候,需要怎么做,大家应该还有印象,我们需要在Spring当中,添加一个对于Redis的一个配置文件,

那么在配置文件当中呢,我们可能要配这么几个东西,比如我们要做一个Redis的连接,起码我们要在配置文件中去配一个叫

Jedis Pool Config的对象,然后里面给一些连接池的信息,当然你如果不配Jedis Pool Config,他也会有一个默认的

参数值的设定,大家应该还记得,我们除了要配这个以外呢,其次我们还要配一个Jedis的客户端,如果你要是单机版的,

Jedis Client,如果是集群版的呢,Jedis Cluster,其实我们现在用SpringBoot来整合我们的Redis,也得去做,只不过在

配置整合他的时候呢,我们在SpringBoot当中,不需要再去创建配置文件了,我们把以往在配置文件里的配置,现在全部

移植到了代码当中,通过注解加方法,来实现这样一个配置,那我们看一下代码当中怎么去做呢,首先我们打开项目,我可以

在项目下去新建一个类,这个类当然你放到哪个包下都行,放到这个config包下,然后我给他起个名,这个名称你叫什么都行,

比如我叫RedisConfig,那么这个类的作用是什么呢,完成对于Redis整合的一些配置,我们在这里要配置一些连接池,Redis的

连接池,RedisConfig可以,我们还要将连接池注入给客户端,把我们原来在xml里面所做的,全移植到类当中了,这个类肯定

是一个配置类,既然是配置类了,我们肯定要让SpringBoot去启动的时候,去初始化他,这个时候我们要用到一个@Annotation,

@Configuration,其实这个Annotation并不陌生了,之前用过,这个是SpringBoot的配置注解,在哪个类上加上注解,要去加载

这个类,我们加载这个类的目的,方法对Redis做一个配置,所以这里还要提供一些方法,至于提供几个方法,完全由我们自己

来设计,总而言之你需要在方法当中,最后返回一个RedisTemplate的一个对象就可以了,你也可以在一个方法上去完成所有的

配置,你也可以放到不同的方法上去实现,那么为了我们便于理解,我们就采用分解的形式,来对他做一个配置,JedisPoolConfig

参数的配置,那如果需要做这个事的话,我这个方法要怎么编写呢,创建JedisPoolConfig

/**
 * 1.创建JedisPoolConfig对象。在该对象中完成一些链接池配置
 *
 */
@Bean
public JedisPoolConfig jedisPoolConfig(){
	JedisPoolConfig config = new JedisPoolConfig();
	//最大空闲数
	config.setMaxIdle(10);
	//最小空闲数
	config.setMinIdle(5);
	//最大链接数
	config.setMaxTotal(20);
	
	return config;
}

那么这个方法怎么写呢,其实这个方法不管你叫什么名,你只要返回一个JedisPoolConfig对象就可以了,你叫什么都行,

我们叫jedisPoolConfig,然后这个方法也是要让SpringBoot去执行的一个方法,那么对于这样的方法呢,上面也要加一个

@Bean的注解,这个注解我们之前也用过,这个注解最大的特点就是,SpringBoot在启动时,对于@Configuration这样的类,

会加载同时去执行一下@Bean标记的方法,其实说白了,@Bean标记和我们配置文件当中Bean标签是一个含义的,并且把这个

方法和返回的对象,放到SpringIOC容器里去缓存,就是这个意思,那在这个方法里肯定要返回一个pool对象,那么在这里我们先去创建他,

如果你在这里没有对JedisPoolConfig做任何配置,那么他就会走连接池默认的配置,我们也可以做自己所需要的配置,这里有一个

setMaxIdle,这个就是配置最大空闲数的,除了最大空闲数以外呢,minIdle,这是最小空闲数,除此之外还有一个最大连接数,

这些值可以根据你的实际情况来处理,我就暂时先配置这些,这样我们就完成了一些简单的配置,SpringBoot对于方法一执行,

我们创建的JedisPoolConfig放到IOC里面去,然后接下来第二步,我们要去创建一个JedisConnectionFactory这样的一个对象

/**
 * 2.创建JedisConnectionFactory:配置redis链接信息
 */
@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){
	JedisConnectionFactory factory = new JedisConnectionFactory();
	//关联链接池的配置对象
	factory.setPoolConfig(config);
	//配置链接Redis的信息
	//主机地址
	factory.setHostName("10.40.8.152");
	//端口
	factory.setPort(6379);
	
	return factory;
}

这个对象主要是为了,需要把我们刚才创建的JedisPoolConfig,还有redis的一些连接配置,也是在这个方法里完成的,我们来

写一个吧,这是第二步,这个对象叫JedisConnectionFactory,通过他来配置我们的连接参数,这个也要让Spring来做一个执行,

所以我要加一个@Bean,就是返回JedisConnectionFactory,在方法里我去创建这个对象,这个方法其实我们是需要一个参数了,

就是把我们刚刚创建的连接池的对象拿过来,这个时候在Spring的IOC容器里已经有了,所以让SpringBoot执行这个方法的时候,

把这个对象拿过来,放到这里,然后我们通过这个对象,把我们的JedisPoolConfig传到里面,这样就完成了配置信息的一个关联,

接下来我们就要配置Redis的一些信息,这个是关联连接池的配置对象,接下来配置连接Redis的信息,比如我们要知道Redis在什么

位置,我们给定当前Redis所在的当前地址,我们的Redis装到了Linux当中,这个是我们运行Redis的服务器,然后我们可以去配置

Redis的端口,Redis里监听了这个端口,接下来是Redis的端口,端口我们并没有对他做修改,默认的是6379,这样就配置好了,

这里你还可以设置他的database,我们Redis装完以后,是有16个库,然后他他的下标是0到15,这块会给一个索引,如果没给默认的就是

0的库,下标所以为0的,那这里我们不给了,然后return factory,这样第二步创建JedisConnectionFactory,接下来就是我们的

第三步,第三步我们要去创建什么呢,这个就是要创建SpringBoot Redis,操作Redis的一个缓存模板对象,创建RedisTemplate,

这个模板对象呢,就是里面封装了一些API,让我们去对Redis操作,以前用Spring整合Redis的时候,我这里面还要去定义一些方法,

自己去定义一些Redis操作的行为,然后通过调用这个方法,这些都在RedisTemplate里面封装了,这个对象的作用就是,

用于执行操作Redis的方法,还是加一个@Bean,这个对象叫RedisTemplate,其实泛型就是你要操作的数据类型,比如Key

是String类型的,value可以给一个Object,然后方法名叫redisTemplate

/**
 * 3.创建RedisTemplate:用于执行Redis操作的方法
 */
@Bean
public RedisTemplate redisTemplate(JedisConnectionFactory factory){
	RedisTemplate template = new RedisTemplate<>();
	//关联
	template.setConnectionFactory(factory);
	
	//为key设置序列化器
	template.setKeySerializer(new StringRedisSerializer());
	//为value设置序列化器
	template.setValueSerializer(new StringRedisSerializer());
	
	return template;
}

这个方法里需要一个参数,就是我们刚刚创建的JedisConnectionFactory,因为只有通过它才知道,去对哪个Redis

进行操作,通过他的参数传递过来,在这里我们还是得创建一个对象,然后我们要把JedisConnectionFactory对象,

注入给他,我们还有这样的一个工作需要去做,RedisTemplate这个对象,他所提供的API,在Redis操作的时候,

他需要我们设置一个对key和value序列化对象的一个指定,序列化的一个指定,我们来看一下序列化对象是什么意思,

org\springframework\data\spring-data-redis\1.8.11.RELEASE\spring-data-redis-1.8.11.RELEASE.jar

org.springframework.data.redis.serializer

这些是序列化器,这些序列化器呢,主要的作用是为了让我们向Redis里面存储数据的时候,对key和value做了一些序列化的

操作,这么说可能挺抽象的,举个例子,原来我们使用Spring整合Redis的时候,我现在想将一个对象,存到Redis里,怎么办,

我们肯定不能直接把某个对象扔到Redis里,这个时候我们需要用到一个工具类,比如说你可以通过JSON的格式,用一个

JSON的工具类,先把你的对象转成JSON,然后把转化完的字符串,放到Redis里去存储,Redis的特点呢,这个种key和value的

结合,存的内容就是字符串,字符串的形式去存的,不管你是使用的String类型还是List类型,比如String类型和List类型,

最大的区别是组织方式上会有一些区别而已,其他的存的都是字符类型,所以这块我就直接给他一个对象,没法去给你存

这个对象,那么我们就必须去给他做一个转换的处理,那么在我们Spring Data Redis当中呢,其实就为你准备了一些

序列化器,可以根据一个序列化器,去做一个对象到序列化的一个处理器,这样我们就变得容易的多了,换句话说有了序列化

器了,转换的工具就不需要了,比如我们先操作String类型为主,叫StringRedisSerializer,是针对于字符串的序列化器,

那么我们这里要对谁进行序列化器的一个使用呢,两个,一个是他的key,一个是他的value,我们要用哪个序列化器我们

就去用谁,字符串的序列化器

template.setKeySerializer(new StringRedisSerializer());

这个是给key设置序列化器,也就是key都是可以是自定义的对象了,他就会根据序列化器序列化我们的对象,序列化到

字符串的一个转换,然后我们还得给我们的value设置一个序列化器

template.setValueSerializer(new StringRedisSerializer());

还是new一个字符串的序列化器,这样我们SpringBoot去整合Redis,整合工作就已经配置好了,你可以把这写整合成一个,

这里只返回一个RedisTemplate,然后把这些行为放到一个方法里,返回RedisTemplate,这也是可以的,所以这也是为了讲解

一个配置过程,编写Spring Data Redis的配置类

  4.0.0
  com.learn
  spring-boot-redis
  0.0.1-SNAPSHOT
  
    org.springframework.boot
    spring-boot-starter-parent
    1.5.12.RELEASE
  
  
	
		UTF-8
		UTF-8
		1.8
	
  
  
  
    
        org.springframework.boot
        spring-boot-starter-web
    
    
    
        org.springframework.boot
        spring-boot-starter-data-redis
    

package com.learn.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import redis.clients.jedis.JedisPoolConfig;

/**
 * 完成对Redis的整合的一些配置
 */
@Configuration
public class RedisConfig {

	/**
	 * 1.创建JedisPoolConfig对象。在该对象中完成一些链接池配置
	 *
	 */
	@Bean
	public JedisPoolConfig jedisPoolConfig(){
		JedisPoolConfig config = new JedisPoolConfig();
		//最大空闲数
		config.setMaxIdle(10);
		//最小空闲数
		config.setMinIdle(5);
		//最大链接数
		config.setMaxTotal(20);
		
		return config;
	}
	
	/**
	 * 2.创建JedisConnectionFactory:配置redis链接信息
	 */
	@Bean
	public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){
		JedisConnectionFactory factory = new JedisConnectionFactory();
		//关联链接池的配置对象
		factory.setPoolConfig(config);
		//配置链接Redis的信息
		//主机地址
		factory.setHostName("10.40.8.152");
		//端口
		factory.setPort(6379);
		factory.setPassword("1234");
		
		return factory;
	}
	
	/**
	 * 3.创建RedisTemplate:用于执行Redis操作的方法
	 */
	@Bean
	public RedisTemplate redisTemplate(JedisConnectionFactory factory){
		RedisTemplate template = new RedisTemplate<>();
		//关联
		template.setConnectionFactory(factory);
		
		//为key设置序列化器
		template.setKeySerializer(new StringRedisSerializer());
		//为value设置序列化器
		template.setValueSerializer(new StringRedisSerializer());
		
		return template;
	}
}

 

你可能感兴趣的:(Spring Boot整合Spring Data Redis-整合步骤)