在spring boot中,默认集成的redis是Spring Data Redis,Spring Data Redis针对redis提供了非常方便的操作模版RedisTemplate
idea中新建spring boot项目的时候,引入Spring Data Redis依赖:
创建成功后的项目依赖pom.xml如下:
其实spring-boot-starter-data-redis依赖中就包含了spring-data-redis依赖
application.properties中配置redis的信息:
可以看到默认连接的redis服务端主机和端口是localhost和6379
我的redis安装在了本地,端口也是默认的6379,所以application.properties中没有写东西
当开发者在项目中引入了Spring Data Redis,并配置了redis的基本信息,此时自动化配置就会生效,看一下spring boot中redis的自动化配置类
- 首先标记这是一个配置类,同时该配置在RedisOperations存在的情况下才会生效(即项目中引入了Spring Data Redis)
- 然后导入在application.properties中配置的属性
- 然后再导入连接池信息
- 最后,提供了两个bean,RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子类,两个方法基本一致,
不同之处主要体现在操作的数据类型不同,RedisTemplate中的两个泛型都是Object,意味着存储的key和value都可以是一个对象,而StringRedisTemplate
的两个泛型都是String,意味着StringRedisTemplate的key和value都只能是字符串。如果开发者没有提供相关的bean,这两个配置就会生效,否则不会生效
终端开启redis服务端,并保持开启状态,确保一会可以连得上redis服务端:
Spring Data Redis中真正操作redis可以采用RedisTemplate的方式
- 针对key的操作,相关的方法就在RedisTemplate中
- 针对具体数据类型的操作,相关的方法首先获取对应的数据类型,获取对应数据类型的操作方法是opsForXXX
在测试类中注入redisTemplate,redis支持的五种数据类型在RedisTemplate类中对应相应的方法:
以操作字符串的opfForValue()方法为例:
name前面的字符是由于使用了RedisTemplate导致的,RedisTemplate对key进行序列化之后对结果
RedisTemplate中,key默认的序列化方案是JdkSerializationRedisSerializer
而在StringRedisTemplate中,key默认的序列化方案是StringRedisSerializer,因此,如果使用StringRedisTemplate,默认情况下key前面不会有前缀
不过开发者也可以自行修改RedisRemplate中的序列化方案,也可以直接使用StringRedisTemplate
另外需要注意,spring boot的自动化配置,只能配置单机的redis,如果是redis集群,则所有的东西都需要手动配置