在实际开发中,为避免不必要的查询数据库,一般需要使用缓存中间件,本次使用redis作为缓存。
1. 安装Redis服务与客户端
1. Redis 中文官网:http://www.redis.cn/下载
2. Redis直接解压 Redis-x64-3.2.100.zip 即可,点击以下 redis-server.exe, 默认端口号:637
3. 安装 Redis 可视化客户端 redis-desktop-manager-0.8.8.384.exe,直接双击安装并打开客户端连接至本地服务器。(此处较简单,不做详细阐述).
2. 了解Redis相关数据存储
1.Redis中所有的数据都是字符串。命令不区分大小写,key是区分大小写的。
2.五种数据类型:String:<key, value> , Hash: <key,fields-values>, List:有顺序可重复 , Set:无顺序不可重复 , Sorted Sets (zset) :有顺序,不能重复
3. springboot整合redis
1.IDEA快速创建一个springboot项目,并导入相关依赖
<dependencies>
<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>2.1.1</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-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.在全局配置文件application.yml中配置数据库连接以及redis相关服务
spring:
datasource:
username: root
password: 123456
#mysql8版本以上的驱动包,需要指定以下时区
url: jdbc:mysql://localhost:3306/jdbc?serverTimezone=GMT%2B8
#mysql8版本以上指定新的驱动类
driver-class-name: com.mysql.cj.jdbc.Driver
#配置redis服务(密码默认为空,无需配置)
redis:
host: localhost
port: 6379
3.在类路径下创建controller,mapper.pojo,service相关包以及相关的类,本例我以User为例。此外创建好相应的数据库并打开本地数据库服务
pojo:
//实体类必须实现序列化,因为redis自动配置类默认为jdk序列化器
public class User implements Serializable{
private Integer id;
//用户名
private String username;
//真实姓名
private String realName;
//用户密码
private String password;
//性别:1 女 2 男
private Integer gender;
//生日
private Date birthday;
//1管理员 2经理 3普通用户
private Integer userType;
public User() {
}
public User(String username, Integer gender) {
this.username = username;
this.gender = gender;
}
public Integer getId() {
return id;
}
public User(Integer id, String username, String realName, String password, Integer gender, Integer userType) {
this.id = id;
this.username = username;
this.realName = realName;
this.password = password;
this.gender = gender;
this.birthday = new Date();
this.userType = userType;
} //此处get set toString方法省略
mapper:
//此处只演示查询
@Mapper
public interface UserMapper {
@Select("select * from user where id = #{id}")
User getUserById(Integer id);
service:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
//操作复杂类型
@Autowired
private RedisTemplate redisTemplate;
public User getUserById(Integer id){
//先查询一下缓存中是否有数据
Object obj = redisTemplate.opsForValue().get(id);
if(obj !=null){
return (User)obj;
}
//如果缓存中没有,则查询数据库,然后添加到数据库中
User user = userMapper.getUserById(id);
redisTemplate. opsForValue().set("user",user);
}
}
controller:
//直接返回json数据,不返回页面
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User getUserById(@PathVariable("id") Integer id){
User user = userService.getUserById(id);
return user;
}
}
4.以上准备工作均已完成,可以开始测试,启动springboot项目后,可在谷歌浏览器访问controller相应路径或postman中进行测试,并结合redis可视化客户端进行观察。(不做详细概述了)。
5.测试完后redis可视化客户端显示看起来就是这个花里胡哨的样子:
\xAC\xED\x00\x05sr\x00+com.mengxuegu.springbootcache.entities.User?\x19K\x87\x948w\x98\x02\x00\x07L\x00\x08birthdayt\x00\x10Ljava/util/Date;L\x00\x06gendert\x00\x13Ljava/lang/Integer;L\x00\x02idq\x00~\x00\x02L\x00\x08passwordt\x00\x12Ljava/lang/String;L\x00\x08realNameq\x00~\x00\x03L\x00\x08userTypeq\x00~\x00\x02L\x00\x08usernameq\x00~\x00\x03xpsr\x00\x0Ejava.util.Datehj\x81\x01KYt\x19\x03\x00\x00xpw\x08\x00\x00\x00\xF8\xCB\x85L\x00xsr\x00\x11java.lang.Integer\x12\xE2\xA0\xA4\xF7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xAC\x95\x1D\x0B\x94\xE0\x8B\x02\x00\x00xp\x00\x00\x00\x01q\x00~\x00\x09t\x00\x03666t\x00\x10\xE7\xB3\xBB\xE7\xBB\x9F\xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x981q\x00~\x00\x09t\x00\x04root
这是因为redis底层默认是jdk序列化器,此处我们可以自定义一个序列化器:
import java.net.UnknownHostException;
/*
自定义序列化器,使之在redis客户端显示为jason数据
* */
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> JsonRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
再次查询就是这个样子啦:
{
"id": 2,
"username": "lisi",
"realName": "李四",
"password": "123",
"gender": 2,
"birthday": 437414400000,
"userType": 2
}
6.完结,撒花!(第一次写,如有遗漏,请指明点出)