@CachePut:
- 将方法返回值放入缓存
- value:缓存的名称,每个缓存名称下面可以有多个key
- key:缓存的key
@CachePut(value = “userCache”,key = “#user.id”)
@PostMapping
public User save(User user){
userService.save(user);
return user;
}
@CacheEvict:
- 清理指定缓存
- value:缓存的名称,每个缓存名称下面可以有多个key
-
key:缓存的key
//@CacheEvict(value = “userCache”,key = “#p0”)
//@CacheEvict(value = “userCache”,key = “#root.args[0]”)
@CacheEvict(value = “userCache”,key = “#id”)
@DeleteMapping(“/{id}”)
public void delete(@PathVariable Long id){
userService.removeById(id);
}
@Cacheable:
- 在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
- value:缓存的名称,每个缓存名称下面可以有多个key
- key:缓存的key
- condition:条件,满足条件时才缓存数据
-
unless:满足条件则不缓存
@Cacheable(value = “userCache”,key = “#id”,unless = “#result null”) //unless = “#result null”:返回值为空的时候不缓存,因为condition没有result所以可以考虑用unless
@GetMapping(“/{id}”)
public User getById(@PathVariable Long id){
User user = userService.getById(id);
return user;
}
Spring Cache使用方式:
在SpringBoot项目中使用SpringCache的操作步骤(使用redis缓存技术)
1、导入maven坐标
spring-boot-starter-data-redis、spring-boot-starter-cache
2、配置application.yml
-------------------------------------------------
spring:
cache:
redis:
time-to-live: 1800000 #设置缓存数据的过期时间
-------------------------------------------------
3、在启动类上加入@EnableCaching注解,开启缓存注解功能
4、在Controller的方法上加入@Cacheable、@CacheEvict等注解,进行缓存操作
缓存套餐数据:
1、导入依赖
2、application.yml中配置过期时间
-------------------------------------------------
spring:
cache:
redis:
time-to-live: 1800000 #设置缓存数据的过期时间
-------------------------------------------------
3、在启动类上加入@EnableCaching注解,开启缓存注解功能
4、在SetmealController的list方法上加入@Cacheable注解
-------------------------------------------------
返回类R需要实现Serializable序列化接口,否则无法缓存
public class R<T> implements Serializable
@Cacheable(value = "setmealCache",key = "#setmeal.categoryId + '_' +#setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal){……}
-------------------------------------------------
5、在SetmealController的save和delete方法上加入CacheEvict注解
-------------------------------------------------
@CacheEvict(value = "setmealCache",allEntries = true)
//allEntries表示要清理setmealCache分类下面的所有缓存数据,默认值为false
public R<String> delete(@RequestParam List<Long> ids){……}
@CacheEvict(value = "setmealCache",allEntries = true)
//allEntries表示要清理setmealCache分类下面的所有缓存数据,默认值为false
public R<String> save(@RequestBody SetmealDto setmealDto){……}
-------------------------------------------------
Mysql主从复制:
- MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
MySQL复制过程分成三步:
- master将将改变记录到二进制日志(binary log)
- slave将master的binary log拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
配置-前置条件:
提前准备好两台服务器,分别安装Mysql并启动服务成功
主库:Master :192.168.66.100
从库:Slave :192.168.66.101
配置-主库Master:
1、修改Mysql数据库的配置文件 /etc/my.cnf:
-----------------------------------------
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志
server-id=100 #[必须]服务器唯一ID
-----------------------------------------
2、重启Mysql服务
-----------------------------------------
systemctl restart mysqld
-----------------------------------------
3、登录Mysql数据库,执行下面SQL
-----------------------------------------
mysql -uroot -proot
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
注:上面SQL的作用是创建一个用户xiaoming,密码为Root@123456,并且给xaioming用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。
-----------------------------------------
4、登录Mysql数据库,执行下面SQL,记录下结果中File和Position的值:
show master status;
注意:上面SQL的作用是查看Master的状态,执行完此SQL后不要再执行任何操作
配置-从库Slave:
这里如果主从配置IO线程是no的要去改一下uuid',如果虚拟机是克隆的,位置在/var/lib/mysql/auto.cnf
1、修改Mysql数据库的配置文件 /etc/my.cnf:
-----------------------------------------
[mysqld]
server-id=101 #[必须]服务器唯一ID
-----------------------------------------
2、重启Mysql服务
-----------------------------------------
systemctl restart mysqld
-----------------------------------------
3、登录Mysql数据库,执行下面SQL
-----------------------------------------
mysql -uroot -proot
change master to master_host='192.168.66.100',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000002',master_log_pos=441;
若报错:This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first.
说明之前执行过这个IO进程,需要先用命令停掉:
stop slave;
start slave;
-----------------------------------------
4、登录Mysql数据库,执行下面SQL,查看从数据库的状态:
-----------------------------------------
show slave status;
/*
show slave status \G; //竖向排列
show slave status; //在Navicat里打开
*/
重点看:
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.66.100
Master_User: xiaoming
Master_Port: 3306
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
//如果Slave_IO_Running: No
//这里如果主从配置IO线程是no的要去改一下uuid',如果虚拟机是克隆的,位置在/var/lib/mysql/auto.cnf
-----------------------------------------