Spring Boot 实战(13)springboot 整合redis

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
接下来配置 Redis 的信息,信息包含两方面,一方面是 Redis 的基本信息,另一方面则是连接池信息:

spring.redis.database=0

spring.redis.password=123

spring.redis.port=6379

spring.redis.host=192.168.66.128

spring.redis.lettuce.pool.min-idle=5

spring.redis.lettuce.pool.max-idle=10

spring.redis.lettuce.pool.max-active=8

spring.redis.lettuce.pool.max-wait=1ms

spring.redis.lettuce.shutdown-timeout=100ms

自动配置

当开发者在项目中引入了 Spring Data Redis ,并且配置了 Redis 的基本信息,此时,自动化配置就会生效。

我们从 Spring Boot 中 Redis 的自动化配置类中就可以看出端倪:

@Configuration

@ConditionalOnClass(RedisOperations.class)

@EnableConfigurationProperties(RedisProperties.class)

@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })

public class RedisAutoConfiguration {

@Bean

@ConditionalOnMissingBean(name = “redisTemplate”)

public RedisTemplate<Object, Object> redisTemplate(

RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {

RedisTemplate<Object, Object> 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;

}

}

这个自动化配置类很好理解:

  • 首先标记这个是一个配置类,同时该配置在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)

  • 然后导入在 application.properties 中配置的属性

  • 然后再导入连接池信息(如果存在的话)

  • 最后,提供了两个 Bean ,RedisTemplate 和 StringRedisTemplate ,其中 StringRedisTemplate 是 RedisTemplate 的子类,两个的方法基本一致,不同之处主要体现在操作的数据类型不同,RedisTemplate 中的两个泛型都是 Object ,意味者存储的 key 和 value 都可以是一个对象,而 StringRedisTemplate 的 两个泛型都是 String ,意味者 StringRedisTemplate 的 key 和 value 都只能是字符串。如果开发者没有提供相关的 Bean ,这两个配置就会生效,否则不会生效。

使用

接下来,可以直接在 Service 中注入 StringRedisTemplate 或者 RedisTemplate 来使用:

@Service

public class HelloService {

@Autowired

RedisTemplate redisTemplate;

public void hello() {

ValueOperations ops = redisTemplate.opsForValue();

ops.set(“k1”, “v1”);

Object k1 = ops.get(“k1”);

System.out.println(k1);

}

}

Redis 中的数据操作,大体上来说,可以分为两种:

  • 针对 key 的操作,相关的方法就在 RedisTemplate 中

  • 针对具体数据类型的操作,相关的方法需要首先获取对应的数据类型,获取相应数据类型的操作方法是 opsForXXX

调用该方法就可以将数据存储到 Redis 中去了,如下:

在这里插入图片描述

k1 前面的字符是由于使用了 RedisTemplate 导致的,RedisTemplate 对 key 进行序列化之后的结果。

RedisTemplate 中,key 默认的序列化方案是 JdkSerializationRedisSerializer 。

而在 StringRedisTemplate 中,key 默认的序列化方案是 StringRedisSerializer ,因此,如果使用 StringRedisTemplate ,默认情况下 key 前面不会有前缀。

不过开发者也可以自行修改 RedisTemplate 中的序列化方案,如下:

@Service

public class HelloService {

@Autowired

RedisTemplate redisTemplate;

public void hello() {

redisTemplate.setKeySerializer(new StringRedisSerializer());

ValueOperations ops = redisTemplate.opsForValue();

ops.set(“k1”, “v1”);

Object k1 = ops.get(“k1”);

System.out.println(k1);

}

}

当然也可以直接使用 StringRedisTemplate:

@Service

public class HelloService {

@Autowired

StringRedisTemplate stringRedisTemplate;

public void hello2() {

ValueOperations ops = stringRedisTemplate.opsForValue();

ops.set(“k2”, “v2”);

Object k1 = ops.get(“k2”);

System.out.println(k1);

}

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
2-1714655832773)]

一线互联网P7面试集锦+各种大厂面试集锦

[外链图片转存中…(img-4NOUPCwG-1714655832774)]

学习笔记以及面试真题解析

[外链图片转存中…(img-uvD7ASvz-1714655832774)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值