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();
}
}