Springboot整合Redis自定义对象序列化

2022-08-22 09:28:55

1.创建一个SpringBoot项目,pom文件中引入相关依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies>

2.准备环境及创建测试所需要的类

yml文件:
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/cacheusername: rootpassword: xxxx(数据库密码)redis:host: xxxxxxx(自己redis安装的服务器ip地址)port:6379password: xxxxx(redis密码)mybatis:configuration:map-underscore-to-camel-case:truemapper-locations:- classpath:mybatis/mapper/*.xmldebug:true
SQL文件:
DROPTABLEIFEXISTS`employee`;CREATETABLE`employee`(`id`int(11)NOTNULLAUTO_INCREMENT,`dept_id`int(11)DEFAULTNULL,`email`varchar(255)DEFAULTNULL,`name`varchar(255)DEFAULTNULL,`age`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=utf8;LOCKTABLES`employee`WRITE;INSERTINTO`employee`VALUES(1,1,'zhangsan@qq.com','zhangsan',20),(2,1,'lisi@qq.com','lisi',18);UNLOCKTABLES;
Mapper文件:
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.pz.dao.EmployeeDao"><resultMaptype="com.pz.domain.Employee"id="BaseResult"><idcolumn="id"property="id"/><resultcolumn="name"property="name"/><resultcolumn="age"property="age"/><resultcolumn="email"property="email"/><resultcolumn="dept_id"property="deptId"/></resultMap><selectid="findAll"resultMap="BaseResult">
		select * from employee</select></mapper>
主启动类:
@SpringBootApplication@EnableCachingpublicclassSpringbootRedisApplication{publicstaticvoidmain(String[] args){
    SpringApplication.run(SpringbootRedisApplication.class, args);}}

controller:

@RestControllerpublicclassEmployeeController{@Autowiredprivate EmployeeService employeeService;@GetMapping("/list")public List<Employee>list(){return employeeService.findAll();}@GetMapping("/emp/{id}")public Employeeemp(@PathVariable("id") Integer id){return employeeService.selectEmp(id);}}
service:
@ServicepublicclassEmployeeService{@Autowiredprivate EmployeeDao employeeDao;@Cacheable(cacheNames="employee")public List<Employee>findAll(){
    System.out.println("查询所有员工......");return employeeDao.findAll();}@Cacheable(cacheNames="employee--id")public EmployeeselectEmp(Integer id){
    System.out.println("查询员工:"+ id);return employeeDao.selectById(id);}}
dao:
@MapperpublicinterfaceEmployeeDao{

  List<Employee>findAll();@Select("SELECT * FROM employee WHERE id = #{id}")
  EmployeeselectById(Integer id);}
实体类:
@DatapublicclassEmployeeimplementsSerializable{private Integer id;private String name;private String email;private Integer age;private Integer deptId;}
配置类:
/**
 * 自定义redis配置
 */@ConfigurationpublicclassMyRedisConfigextendsCachingConfigurerSupport{/** 重写生成key的方法:类名+方法名+参数名 */@Bean@Overridepublic KeyGeneratorkeyGenerator(){returnnewKeyGenerator(){public Objectgenerate(Object target, Method method, Object... objects){
        StringBuilder sb=newStringBuilder();
        sb.append(target.getClass().getName()).append(".").append(method.getName()).append(Arrays.toString(objects));return sb.toString();}};}@Beanpublic RedisTemplate<Object, Object>redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException{
    RedisTemplate<Object, Object> template=newRedisTemplate<Object, Object>();
    template.setConnectionFactory(redisConnectionFactory);//		Jackson2JsonRedisSerializer<Object> serializer = new// Jackson2JsonRedisSerializer<>(Object.class);
    GenericJackson2JsonRedisSerializer serializer=newGenericJackson2JsonRedisSerializer();
    template.setDefaultSerializer(serializer);return template;}}

运行主启动类,打开浏览器输入localhost:8080/emp/1或localhost:8080/emp/2

结果如下 这里 使用到了RedisDesktopManager

在这里插入图片描述
在这里插入图片描述

// 这是RedisDesktopManager安装包
    链接:https://pan.baidu.com/s/1NLGYE6uma48WxG_nrgRK-A
    提取码:pz99//安装时会报错什么URL什么的  不用管 照样能用
  • 作者:闪电7
  • 原文链接:https://blog.csdn.net/m0_46684016/article/details/111935114
    更新时间:2022-08-22 09:28:55