9.Spring 整合 Redis
- 引入依赖:spring-boot-starter-data-redis
- 配置 Redis:配置数据库参数、编写配置类,构造 RedisTemplate
- 访问 Redis:
redisTemplate.opsForValue()
redisTemplate.opsForHash()
redisTemplate.opsForList()
redisTemplate.opsForSet()
redisTemplate.opsForZSet()
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置 Redis
2.1 配置数据库参数
# RedisProperties
spring.redis.database=2
spring.redis.host=localhost
spring.redis.port=6379
2.2 编写配置类,构造 RedisTemplate
在 config 配置包下新建 RedisConfig 配置类:
- 添加注解 @Configuration
- 添加 @Bean
- 返回 RedisTemplate
- 访问数据库需要创建连接(而连接是由连接工厂创建),注入连接工厂,在方法上声明连接工厂(Spring 容器自动把 Bean 注入)
- 实例化 Bean
- 把工厂设置给 Bean:具备了访问数据库能力
- 配置序列化方式,最终把数据存入 redis 中:设置key的序列化方式(字符串)、设置value的序列化方式(JSON)、设置hash的key的序列化方式、设置hash的value的序列化方式
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 设置key的序列化方式
template.setKeySerializer(RedisSerializer.string());
// 设置value的序列化方式
template.setValueSerializer(RedisSerializer.json());
// 设置hash的key的序列化方式
template.setHashKeySerializer(RedisSerializer.string());
// 设置hash的value的序列化方式
template.setHashValueSerializer(RedisSerializer.json());
//触发参数
template.afterPropertiesSet();
return template;
}
}
3.访问 Redis
编写测试类代码:
- 注入 RedisTemplate
- 访问字符串
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = DemoApplication.class)
public class RedisTests {
@Autowired
private RedisTemplate redisTemplate;
//String 访问方式
@Test
public void testStrings() {
//声明 key
String redisKey = "test:count";
redisTemplate.opsForValue().set(redisKey, 1);
System.out.println(redisTemplate.opsForValue().get(redisKey));
System.out.println(redisTemplate.opsForValue().increment(redisKey));
System.out.println(redisTemplate.opsForValue().decrement(redisKey));
}
}