【SpringBoot】Redis的Java客户端

  • RedisTemplate的两种序列化实践方案
    方案一:
  1. 自定义RedisTemplate
  2. 修改RedisTemplate的序列化器为GenericJackson2JsonRedisSerializer
//我们可以自定义RedisTemplate的序列化方式
package redis.config.redis;  
  
import org.springframework.context.annotation.Bean;  
import org.springframework.data.redis.connection.RedisConnectionFactory;  
import org.springframework.data.redis.core.RedisTemplate;  
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;  
import org.springframework.data.redis.serializer.RedisSerializer;  
  
public class RedisConfig {  
    @Bean  
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){  
        //创建RedisTemplate对象  
        RedisTemplate<String,Object> template = new RedisTemplate<>();  
        //设置连接工厂  
        template.setConnectionFactory(connectionFactory);  
        //创建JSON序列化工具  
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();  
        // 设置Key的序列化  
        template.setKeySerializer(RedisSerializer.string());  
        template.setHashKeySerializer(RedisSerializer.string());  
        // 设置Value的序列化  
        template.setValueSerializer(jsonRedisSerializer);  
        template.setHashValueSerializer(jsonRedisSerializer);  
        // 返回  
        return template;  
    }  
}

注释:SpringBoot的版本选择2.5.7,高版本的会报错

public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){} 

就是这个connectionFactroy是红色的,显示no beans of.....无法注入。
pom.xml文件:

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>2.5.7</version>  
    <relativePath/> <!-- lookup parent from repository -->  
</parent>
<properties>  
    <java.version>1.8</java.version>  
</properties>
<dependencies>  
    <!--redis依赖-->  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-data-redis</artifactId> 
    </dependency>  
    <!--common-pool-->  
    <dependency>  
        <groupId>org.apache.commons</groupId>  
        <artifactId>commons-pool2</artifactId>  
    </dependency>  
    <!--Jackson依赖-->  
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-databind</artifactId>  
    </dependency>

方案二:

  1. 使用StringRedisTemplate
  2. 写入Redis时,手动把对象序列化为JSON
  3. 读取Redis时,手动把读取到的JSON反序列化为对象
package com.example.springdataredisdemo;  
  
import com.fasterxml.jackson.core.JsonProcessingException;  
import com.fasterxml.jackson.databind.ObjectMapper;  
import org.junit.jupiter.api.Test;  
import org.springframework.boot.test.context.SpringBootTest;  
import org.springframework.data.redis.core.StringRedisTemplate;  
import redis.pojo.User;  //自定义的类
import javax.annotation.Resource;  
import java.util.Map;  
  
  
@SpringBootTest  
class SpringDataRedisStringTests {  
  
    @Autowired
    private StringRedisTemplate stringRedisTemplate;  
  
    @Test  
    void testString() {  
        // 写入一条String数据  
        stringRedisTemplate.opsForValue().set("name", "虎哥");  
        // 获取string数据  
        Object name = stringRedisTemplate.opsForValue().get("name");  
        System.out.println("name = " + name);  
    }  
  
    private static final ObjectMapper mapper = new ObjectMapper();  
    @Test  
    void testSaveUser() throws JsonProcessingException {  
        //创建对象  
        User user = new User("虎哥",21);  
        //手动序列化  
        String json = mapper.writeValueAsString(user);  
        //写入数据  
        stringRedisTemplate.opsForValue().set("user:200",json);  
  
        //获取数据  
        String jsonUser = stringRedisTemplate.opsForValue().get("user:200");  
        //手动反序列化  
        User user1= mapper.readValue(jsonUser,User.class);  
        System.out.println("user1 = " + user1);  
    }  
  
    @Test  
    void testHash(){  
        stringRedisTemplate.opsForHash().put("user:400","name","虎哥");  
        stringRedisTemplate.opsForHash().put("user:400","age","21");  
  
        Map<Object,Object> entries = stringRedisTemplate.opsForHash().entries("user:400");  
        System.out.println("entries = " + entries);  
    }  
  
}
package redis.pojo;  
  
import lombok.AllArgsConstructor;  
import lombok.Data;  
import lombok.NoArgsConstructor;  
import java.io.Serializable;  
  
@Data  
@NoArgsConstructor  
@AllArgsConstructor  
public class User implements Serializable {  
    private String name;  
    private Integer age;  
}

关注重点:

@Autowired
private StringRedisTemplate stringRedisTemplate;  

心得:关于SpringBoot的版本,JDK版本,跟着老师教程一样的版本比较好,不然会出现奇怪的错误,还无法解决,即版本不兼容。


参考链接:
基础篇-22.Redis的Java客户端-RedisTemplate操作Hash类型_哔哩哔哩_bilibili

posted @   山风拂水弦  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示