与其明天开始,不如现在行动!
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
官网地址: https://spring.io/projects/spring-data-redis
SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中:
API | 返回值类型 | 说明 |
---|---|---|
redisTemplate.opsForValue() | ValueOperations | 操作String类型数据 |
redisTemplate.opsForHash() | HashOperations | 操作Hash类型数据 |
redisTemplate.opsForList() | ListOperations | 操作List类型数据 |
redisTemplate.opsForSet() | SetOperations | 操作Set类型数据 |
redisTemplate.opsForZSet() | ZSetOperations | 操作SortedSet类型数据 |
redisTemplate | 通用的命令 |
快速入门:
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
配置文件
spring:
data:
redis:
host: " 你的主机地址"
port: 端口号
password: "密码"
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 1000
注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
编写测试
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("name", "Lucy");
Object name = redisTemplate.opsForValue().get("name");
System.out.println("name" + name);
}
}
RedisTemplate的两种序列化实践方案:
SpringDataRedis的序列化方式
RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认采用JDL序列化。得到的结果是这样的
> get "\xac\xed\x00\x05t\x00\x04name"
"\xac\xed\x00\x05t\x00\x04Lucy"
缺点:
修改序列化方式:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//创建RedisTemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
//设置连接工厂
template.setConnectionFactory(redisConnectionFactory);
//创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//设置key序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
//设置value序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
//返回
return template;
}
}
存储对象:
User类:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
public String name;
public int age;
}
测试:
@Test
void testUser() {
redisTemplate.opsForValue().set("user:1000", new User("小明", 18));
Object o = redisTemplate.opsForValue().get("user:1000");
System.out.println("o = " + o);
}
注入StringRedisTemplate
@Autowired
private StringRedisTemplate redisTemplate;
测试
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testUser() throws JsonProcessingException {
//创建对象
User user = new User("胖虎", 20);
//手动序列化
String json = mapper.writeValueAsString(user);
redisTemplate.opsForValue().set("user:2000", json);
String jsonUser = redisTemplate.opsForValue().get("user:2000");
//手动反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user = " + user1);
}
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家!!!