Spring毕竟是Java中的一个主流框架,如何在这个框架中使用Redis呢?
创建项目并引入相关依赖
然后进行创建。
至此就将Redis的相关依赖引入进来了。
编写Redis配置
将application.properties修改成application.yml
然后编写如下配置:
spring:
redis:
host: 127.0.0.1
port: 8888
编写代码
与Jedis不同的是,在Spring中需要通过StringRedisTemplate这个类来进行操作。
并且在这个类中会发现,没有与命令行对应的API。
原因如下:
为了对API进行分类,将每个类型的操作进行了封装,分到了其他类中。
方法 | 功能 |
opsForValue | 封装了String类型的API |
opsForHash | 封装了Hash类型的API |
opsForList | 封装了List类型的API |
opsForSet | 封装了Set类型的API |
opsForZset | 封装了Zset类型的API |
@SpringBootTest
class SpringRedisTestApplicationTests {
@Autowired
StringRedisTemplate redisTemplate;
@Test
void test01(){
redisTemplate.opsForValue().set("key1", "value1");
String s = redisTemplate.opsForValue().get("key1");
Assertions.assertEquals("value1", s);
}
}
如果要想执行flushAll呢?我们会发现根本找不到这样的API
难不成是出于安全的原因进行的考虑吗?当然不是,因为来年ping这种命令也没有封装。
那该怎么操作呢?当然在设计之初也进行了保留。
通过execute方法执行回调,即可实现原生指令的操作~
在RedisConnection中会发现,这个类继承一堆的类,这些类中就提供了基本指令的操作。
也可将每个RedisConnection简单理解为Jedis对象,也表示的是一个连接。
通过观察源码,会发现,这个回调函数必须要有返回值,而这个返回值也会作为execute的返回值。
@SpringBootTest
class SpringRedisTestApplicationTests {
@Autowired
StringRedisTemplate redisTemplate;
@Test
void test01(){
redisTemplate.execute((RedisConnection connection) -> {
connection.flushAll();
return null;
});
redisTemplate.opsForValue().set("key1", "value1");
String s = redisTemplate.opsForValue().get("key1");
Assertions.assertEquals("value1", s);
}
}