说在前头: 本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,能力有限,文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。
前言
Redis是目前业界使用最广泛的内存数据存储。相比memcached,`Redis支持更丰富的数据结构`,例如hashes, lists, sets等,`同时支持数据持久化`。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文将介绍SpringBoot整合和操作Redis。
整合
1.引入依赖
主要引入spring-boot-starter-data-redis
依赖即可使SpringBoot操作Redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2. 编写启动类
启动类无需做其他的修改,按正常的流程编写即可
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3.编写application.yml配置文件
spring:
redis:
database: 0 # 链接的数据库索引(默认为0)
port: 6379 # redis服务端口(默认为6379)
host: 127.0.0.1 # redis服务地址
4.编写测试类
具体操作redis的对象是RedisTemplate
,由spring注入,支持泛型!
@SpringBootTest
class ApplicationTests {
@Autowired
RedisTemplate<String, String> redisTemplate;
@Test
public void set() {
String string = "这是用于测试的字符串!";
// 将字符串以键值对应的方式存入redis中
redisTemplate.opsForValue().set("string", string);
}
@Test
public void get() {
// 获取set方法中存入的字符串
String string = redisTemplate.opsForValue().get("string");
System.out.println("返回结果:" + string);
}
}
5.开始测试
首先我们需要运行测试类中的set()
方法,将字符串对象string存入redis,set方法运行完毕后,我们可以使用redis的可视化工具Redis Desktop Manager
查看(如下图)
可以看到,数据库索引为0,键为string,值为“这是用于测试的字符串”的字符串数据已经成功存入redis中,接下来,我们试着将该字符串从redis中取出。因此,我们需要接着运行get()
方法,运行成功后,控制台打印信息将会如下图
扩展
1.操作其他类型的数据
在上面的测试中,我们试着操作了string类型的数据。但我们都知道,redis不只是提供了字符串的键值对应数据,还提供了众多的数据类型供我们使用,以下是常用的数据类型的具体操作的对应方法。
opsForValue
: 用于操作String类型的对象opsForList
: 用于操作List类型的对象opsForHash
: 用于操作Hash类型的对象opsForSet
: 用于操作Set类型的对象opsZSet
: 用于操作ZSet类型的对象
2.设置缓存过期时间
springboot操作redis时,是可以对redis存入的值设置过期时间的,拿上面测试的代码做例子,在未设置过期时间时,存入redis只需要如下:
redisTemplate.opsForValue().set("string", string);
当我们需要对该字符串设置30秒的过期时间时:如下
redisTemplate.opsForValue().set("string", string, 30, TimeUnit.SECONDS);
3.对象序列化问题
如果我们需要将我们自己自定义的一个对象存入redis中,我们需要先将该对象实现Serializable
接口,使该对象能够序列化。(若对象未实现该接口,redis将无法将该对象存入,并且将报出以下错误)
关于SpringBoot整合Redis就讲到这里啦,若有什么遗漏之处还请各位指正!!!