本文仅示例展示最基本建立缓存的方式,其他一概不论哦。至于缓存更新策略,甚至是分布式缓存建立,更不会涉及其他穿透或是雪崩等问题。
仅仅是博主的一次小实践,其他问题以后慢慢更新吧
如果你也想揭开redis神秘的面纱,就跟着步骤一起敲起来吧
导入spring和redis整合的依赖
org.springframework.boot
spring-boot-starter-data-redis
大家是不是老生常谈了,对于经典拥有姓名和年龄的实体类User。当然对应数据库中也要建立好相关映射嗷~这里采用MP的@TableName注解完成映射,省去写xml映射文件的步骤了。
@Data
@TableName("user")
public class User {
private Integer id;
private String name;
private Integer age;
}
再往数据库里手动来点小数据吧
这个没啥好说的,我们在application.yml或者是application.properties中修改项目配置,得把redis的基础设置添加进去。
spring:
#mysql数据库链接配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/csdn?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: 123456
redis:
host: 127.0.0.1 #redis安装的服务器地址,这里因为是本机就是127.0.0.1
port: 6385 #redis端口号
password: Re45@6 #redis密码
database: 0 #选择数据库
Dao层:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cn.shydemo.pojo.User;
public interface UserDao extends BaseMapper {
}
Service:
import com.baomidou.mybatisplus.extension.service.IService;
import com.cn.shydemo.pojo.User;
import java.util.List;
public interface IUserService extends IService {
/**
* 获取用户列表
* @return
*/
List selectUserList();
}
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cn.shydemo.dao.UserDao;
import com.cn.shydemo.pojo.User;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {
@Override
public List selectUserList() {
//采用Mybatis-plus封装好的方法直接获取列表
List users = query().list();
return users;
}
}
Controller:
import com.cn.shydemo.pojo.User;
import com.cn.shydemo.service.user.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
private IUserService userService;
@GetMapping("/get_user_list")
public List selectUserList(){
return userService.selectUserList();
}
}
----------------------------------------------------------直接开弄--------------------------------------------------------
确实查到了。再来看控制台。
因为此前调整过打印sql的配置,所以控制台也是打印了sql。此时说明该访问是直接访问数据库的,并没有经过缓存。
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public List selectUserList() {
//首先从缓存获取数据,如果没有再访问数据库
//这里假设key为users
String value = stringRedisTemplate.opsForValue().get("users");
if (StringUtils.isNotBlank(value)){
//将Json字符串进行反序列化为存放User对象的列表
JSONArray jsonArray = JSON.parseArray(value);
//通过fastJson的方法直接将Json数组转换为User对象集合
List users = jsonArray.toJavaList(User.class);
return users;
}
//采用Mybatis-plus封装好的方法直接获取列表
List users = query().list();
//将查到的结果存到redis中
//先转换成json字符串
String usersJson = JSON.toJSONString(users);
stringRedisTemplate.opsForValue().set("users",usersJson);
return users;
}
}
这里直接使用spring整合的关于redis使用-----StringRedisTemplate
方法tips:
根据key取出相应的value
stringRedisTemplate.opsForValue().get("users")
设置以String为key和String为value的键值对stringRedisTemplate.opsForValue().set("users",usersJson)
我们同样看控制台是否打印sql来判断查询有没有直接到数据库
结果:依然200完美运行hhh
控制台:
结果:
控制台:由于我刚刚clear一下,现在依旧没有sql语句嗷
不确定的话,我们还可以通过redis可视化界面工具查看下结果
怎么样?是不是很奇妙hhh
以此篇作为笔者redis学习记录的开端篇章吧,一些redis的基础使用和实战应用后续慢慢更新记录吧!