博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot项目整合Redis
阅读量:3950 次
发布时间:2019-05-24

本文共 3846 字,大约阅读时间需要 12 分钟。

  老早就想记录一下Springboot项目中整合Redis的过程,今天终于忍不住对它下手了(在整合Redis之前,需确保redis处于启动状态)

在这里插入图片描述

   废话不多说,直接新建Springboot项目。

Springboot整合Redis

1.创建项目选择依赖 在这里插入图片描述

2.在项目的pom.xml文件中手动引入commons-pool2连接池依赖

org.apache.commons
commons-pool2
2.7.0

3.在application.properties配置文件中配置redis连接信息

server:  port: 8082spring:  redis:    database: 4 #使用redis中哪个库    port: 6379     host:192.168.138.121    password: 123456  #redis连接密码    timeout: 60000  #连接超时时间    lettuce: #由于Spring Boot2.x 的改动,连接池相关配置需要通过spring.redis.lettuce.pool或者 spring.redis.jedis.pool 进行配置      pool:        max-active: 200 #连接池最大连接数(使用负值表示没有限制) 默认8        max-wait: -1 #连接池最大阻塞等待时间(使用负值表示没有限制)        min-idle: 0 #连接池中的最小空闲连接        max-idle: 10 #连接池中的最大空闲连接

4.写一个测试controller(当然也可以用Junit启动进行测试,我个人习惯写个controller,通过浏览器访问进行测试)

@RestControllerpublic class testController {
@Autowired private StringRedisTemplate stringRedisTemplate; /** *在redis中有两个模板可以使用,最后专门说明 */// private RedisTemplate
redisTemplate; @RequestMapping("/set") @ResponseBody public Object setValue() {
stringRedisTemplate.opsForValue().set("name", "zhangsan"); return "走了 set "; } @RequestMapping("/get") @ResponseBody public Object getValue() {
return stringRedisTemplate.opsForValue().get("name"); }}

5.启动项目,首先访问localhost:8082//set,然后redis就会在4号库中以key value的形式将name 和 zhangsan存储起来。

在这里插入图片描述
6.下面看一下redis中的4号库是否存储了key为name,value为zhangsan的数据。我这里直接使用的是Redis Desktop Manager工具来操作的redis。这样方便我们查看redis中的值的存储情况。

在这里插入图片描述

7.从redis管理工具中我们可以看到4号库中确实存了一个key为name,value为zhangsan的一组数据。说明我们的reids集成正常。下面看一个get取值。
  在浏览器中访问localhost:8082//get,然后看看返回的结果。
在这里插入图片描述
  返回结果正常。到这里,简单的redis集成OK了,下面说一下集成的过程中,有哪些点需要注意的。

需要留意的点

  在前面创建项目的过程中,提到了Redis中默认是有两个模板可以使用,分别是StringRedisTemplateRedisTemplate,这个当我们在引入了Redis相关的依赖之后,在其自动配置类RedisAutoConfiguration中就可以看到(可以在idea中 搜索此配置类进行查看)。

@Configuration(proxyBeanMethods = false)@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)@Import({
LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })public class RedisAutoConfiguration {
@Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate
redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate
template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; }}
两种模板的区别
  实不相瞒,当年我在这里吃了不少泥,那时候公司项目紧张,老项目中直接封装了一个redis工具类,对于两种模板都有相应的数据操作方法封装,然后就老是搞混,比如用stringRedisTemplate模板存储的数据,最终在取值的时候用了redisTemplate模板去取值,老是取不到,但是明明我redis中已经存入值了。现在在这里记录一下两种模板的区别。

  StringRedisTemplate

  采用的String序列化方式,redis中存储的key和value都是可读的。
  在上面的代码中,我们使用的就是此模板来进行存值的,所以在redis中,我们能够很直观的看到key和value。
在这里插入图片描述

  RedisTemplate

  采用的JDK序列化方式,将key和value序列化为字节数组之后,再存储到redis中,当取值的时候,再将redis中的值反序列化之后进行返回。

  我们在测试controller中,使用redisTemplate模板来存值,看一下redis中的值是什么款式

@RestControllerpublic class testController {
@Autowired// private StringRedisTemplate stringRedisTemplate; /** *在redis中有两个模板可以使用,最后专门说明 */ private RedisTemplate
redisTemplate; @RequestMapping("/set") @ResponseBody public Object setValue() {
redisTemplate.opsForValue().set("name", "zhangsan"); return "走了 set "; } @RequestMapping("/get") @ResponseBody public Object getValue() {
return redisTemplate.opsForValue().get("name"); }}

在这里插入图片描述

总结:
  1.因为两种模板的序列化方式不同,所以存储的数据互不相同。也就是说:
   用RedisTemplate存的值不能用StringRedisTemplate来取值
   用StringRedisTemplate存的值不能用RedisTemplate来取值

  2.两种模板如何选择?

   StringRedisTemplate适合用来存储字符串类型的数据
   RedisTemplate适合用来存储复杂的对象类型的数据

转载地址:http://pjhwi.baihongyu.com/

你可能感兴趣的文章
Android电源管理相关应用技巧分享
查看>>
Android录音失真具体解决方案
查看>>
Android根文件系统相关应用介绍
查看>>
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>
高效率的危害
查看>>