Redis—SpringDataRedis
2023-12-14 20:05:38
    		与其明天开始,不如现在行动!
SpringDataRedis
SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis
官网地址: https://spring.io/projects/spring-data-redis
- 提供了对不同Redis客户端的整合 (Lettuce和Jedis)
 - 提供了RedisTemplate统一API来操作Redis
 - 支持Redis的发布订阅模型
 - 支持Redis哨兵和Redis集群
 - 支持基于Lettuce的响应式编程
 - 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
 - 支持基于Redis的]DKCollection实现
 
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
RedisTemplate的两种序列化实践方案:
- 方案一 
  
- 自定义RedisTemplate
 - 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
 
 - 方案二 
  
- 使用StringRedisTemplate
 - 写入Redis时,手动把对象序列化为JSON
 - 读取Redis,手动把读取到的JSON反序列化为对象
 
 
方案一
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); } 
💎总结
本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!
    			文章来源:https://blog.csdn.net/weixin_54620350/article/details/135001978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!