SpringBoot集成redis(3)

1.快速入门

关于redis的基础部分请看Redis技术_别是雨萧吧的博客-优快云博客_redis技术,在本文中我们只讲述redis和SpringBoot的集成。默认redis是已经安装好的哈

1.当然啦首先要导依赖

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

2.配置文件

spring:
  redis:
    port: 6379
    host: 127.0.0.1

3.实体类

import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.Date;

@Data
@ApiModel(value="Traveller对象", description="")
@Table(name="traveler")
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Traveler{
    @Id//这个是主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//设置增长方式是自增
    private int id;
    @Column
    private String travelerName;//旅行者姓名
    @Column
    private String element;//旅行者的元素力
    @Column
    private Integer isDeleted;//是否被删除
    @Column
    private Date gmtCreate;//创建时间
    @Column
    private Date gmtModified;//最后一次修改时间
}

4.vo类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TravelerVo{
    private int id;
    private String travelerName;//旅行者姓名
    private String element;//旅行者的元素力
    private Integer isDeleted;//是否被删除
    private Date gmtCreate;//创建时间
    private Date gmtModified;//最后一次修改时间
}

2.查询操作

1.controller层

import com.guguo.Entity.Traveler;
import com.guguo.Entity.vo.TravelerVo;
import com.guguo.service.TravelerService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

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

@RestController
public class TravelController{
    @Autowired
    private TravelerService travelerService;


    @GetMapping("/findTravelerUsedRedisById")
    public TravelerVo findTravelerUsedRedis(int id){
        TravelerVo travelerVo=travelerService.findTravelerUsedRedisById(id);
        return travelerVo;//返回封装好的数据
    }

}

2.service层

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.guguo.Entity.Traveler;
import com.guguo.Entity.vo.TravelerVo;
import com.guguo.dao.TravelerDao;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Optional;
import java.util.concurrent.TimeUnit;

@Service
public class TravelerService {

    public static final String TRAVELERCACHEPREFIX = "cache:traveler:";//redis中关于travle的key前缀
    @Autowired
    private TravelerDao travelerDao;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    ObjectMapper objectMapper = new ObjectMapper();// JSON工具

    public TravelerVo findTravelerUsedRedisById(int id) {
        //先看看redis中有没有
        String cacheTraveler = stringRedisTemplate.opsForValue().get(TRAVELERCACHEPREFIX + id);
        //判断语句,缓存中存在则直接返回
        if (!StringUtil.isNullOrEmpty(cacheTraveler)) {
            try {
                Traveler traveler = objectMapper.readValue(cacheTraveler, Traveler.class);// 将子字符串转换为对象
                TravelerVo travelerVo = new TravelerVo();//创建vo对象用来进行结果返回
                BeanUtils.copyProperties(traveler,travelerVo);
                return travelerVo;
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        //缓存中不存在,则从数据库里进行数据查询
        Optional<Traveler> optional = travelerDao.findById(id);
        Traveler traveler = optional.get();
        //数据库里不存在,返回null
        if (traveler==null){
            return null;
        }
        //数据库里存在,则将信息写入Redis
        try {
            String shopJSon = objectMapper.writeValueAsString(traveler);
            stringRedisTemplate.opsForValue().set(TRAVELERCACHEPREFIX+id,shopJSon,30, TimeUnit.MINUTES);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        //返回
        TravelerVo travelerVo = new TravelerVo();//创建vo对象用来进行结果返回
        BeanUtils.copyProperties(traveler,travelerVo);
        return travelerVo;
    }
}

3.更新操作

controller层代码:

    @GetMapping("/updateTravelerUsedRedisById")
    public void updateTravelerUsedRedisById(Traveler traveler){
        travelerService.updateTravelerUsedRedis(traveler);
    }

service层代码

    public void updateTravelerUsedRedis(Traveler traveler) {
        Traveler travelerDB = travelerDao.save(traveler);//对数据库进行更新
        //把更新好的数据放进redis中
        String shopJSon = null;
        try {
            shopJSon = objectMapper.writeValueAsString(travelerDB);
            stringRedisTemplate.opsForValue().set(TRAVELERCACHEPREFIX+travelerDB.getId(),shopJSon,30, TimeUnit.MINUTES);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值