springboot整合redis并在项目中使用(解决key也同时被序列化的问题)

springboot+redis:

pom文件:
在这里插入图片描述

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

我的逻辑是在进入home页面自动请求需要加载的数据:

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

services:
在这里插入图片描述传输的实体类:
在这里插入图片描述
z注意:因为productvo是传输对象(涉及面向对象编程的思想与各个对象各司其职的考虑,所以pojo不能用于传输,封装了一个vo传输实体类),所以需要实现序列化接口:
在这里插入图片描述

key也会被序列化,导致可读性差(如图):在这里插入图片描述

在这里插入图片描述
z这是service代码:

package com.per.mybootall.service.impl;

import com.google.gson.Gson;
import com.per.mybootall.dao.ProductMapper;
import com.per.mybootall.pojo.Product;
import com.per.mybootall.service.HomeLoadInter;
import com.per.mybootall.vo.ProductVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class HomeLoadimpl implements HomeLoadInter {
    @Autowired
    private ProductMapper productmapper;
    @Autowired
    private  ProductVO proVO;
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;
    @Override
    public List<ProductVO> selectProductMessage(){
        //字符串的序列化器
        RedisSerializer redisSerializer=new StringRedisSerializer();
        redisTemplate.setKeySerializer(redisSerializer);

        List<ProductVO> list=new ArrayList<ProductVO>();
        List<ProductVO> listredis=  (List<ProductVO>)redisTemplate.opsForValue().get("HomeLoadMassage");

        if(null==listredis){
            System.out.println("缓存咩有的时候:"+listredis);
            for(long i=1;i<2;i++){
                Product pro= productmapper.selectByPrimaryKey(i);
                proVO.setName(pro.getName());
                proVO.setSubtitle(pro.getSubtitle());
                proVO.setMainImage(pro.getMainImage());
                proVO.setSubImage(pro.getSubImage());
                proVO.setPrick(pro.getPrick());
                proVO.setStock(pro.getStock());
                list.add(proVO);
            }
            redisTemplate.opsForValue().set("HomeLoadMassage",list);
        }
        System.out.println("缓存查询有的时候:"+listredis);
        System.out.println("home页面加载的数据:"+list.toString());
        return list;

    }
}

dao层实现:

在这里插入图片描述
页面请求验证:
在这里插入图片描述
第一次拿值均为null,第二次则拿到了相应的值:
在这里插入图片描述
t同时key的值也不会被序列化而导致可读性贼差:
在这里插入图片描述
ok,纪录完成,有不明白的可以留言问我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值