CacheEvict注解
清理缓存 一般用在删除和更新相关的业务上
Cacheable注解
在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有数据,调用方法井将方法返回值放到缓存中
一般用在数据查找时
- condition 当满足什么条件时才缓存
- unless 当满足什么条件后就不缓存
spring Cache 使用redis作为缓存产品
缓存项目中套餐数据
增加缓存
@GetMapping("/list")
@Cacheable(value = "stemealCache",key = "#setmeal.categoryId + '_' + #setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal){
System.out.println(cacheManager.getCacheNames());
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(setmeal.getCategoryId()!=null,Setmeal::getCategoryId,setmeal.getCategoryId());
queryWrapper.eq(setmeal.getStatus()!=null,Setmeal::getStatus,1);
queryWrapper.orderByDesc(Setmeal::getUpdateTime);
setmealService.list(queryWrapper);
List<Setmeal> list = setmealService.list(queryWrapper);
return R.success(list);
}
删除缓存
/**
* 删除套餐
* @param ids
* @return
*/
@DeleteMapping
//只要修改一个,就删除stemealCache下所以的缓存
@CacheEvict(value = "stemealCache",allEntries = true)
public R<String> delete(@RequestParam List<Long> ids){
log.info("ids {}",ids);
setmealService.removeWithDish(ids);
return R.success("套餐数据删除成功");
}
/**
新增套餐
**/
@PostMapping
@CacheEvict(value = "stemealCache",allEntries = true)
public R<String> save(@RequestBody SetmealDto setmealDto){
log.info("套餐信息:{}",setmealDto);
setmealService.saveWithDish(setmealDto);
return R.success("新增成功");
}
读写分离
主从复制
克隆虚拟机 改ip 改mysql uuid
因为克隆的ip地址和mac地址是一样的所以需要修改。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
每台机器的这个文件名可能不同
进入网卡配置文件中修改IPADDR的值,并删除文件中的UUID和HWADDR两行
保存、退出;
service network restart
重启网络使ip生效
blog.csdn.net/qq_37909141…
mysql修改uuid
配置主库
grant replication slave on*.*to'xiaoming'@'%'identified by 'Root@123456'
执行完这个操作以后就不要在主库进行其他操作了,否则会导致日志文件位置变化
windows下配置主库
二、配置主库
-
1.停止主mysql:net stop mysql
-
2.主库里my.ini文件 [mysql] #设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 max_connections=200 character-set-server=utf8 default-storage-engine=INNODB #=========主从复制关键配置===================== server_id=1 #主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定 log-bin=mysql-bin #二进制文件存放路径,存放在根目录data #binlog-do-db=test #需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制 #binlog-ignore-db=mysql #不需要复制的库,和上项同理 #=========主从复制关键配置=====================
-
3.保存,重启主库,net start mysql
-
4.在主库中建立一个用户(专门用给从库连接的,注意这是在主库里面建立的) grant replication slave,reload,super on . to myslave@localhost identified by ‘myslave密码’ ; myslave是用户名,myslave密码是用户对应的密码,localhost也可以写ip
-
5.刷新权限 flush privileges;
-
6.show master status; # 找到File 和 Position 的值记录下来
配置从库
change master to master_host='192.168.58.101',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=441
主从复制 测试
shardingsphere:
datasource:
names:
master,slave
master:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.58.100:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
slave:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.58.100:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: root
masterslave:
load-balance-algorithm-type: round_robin
name: dataSource
master-data-source-name: master
slave-data-source-names: slave
props:
sql:
show: true
main:
allow-bean-definition-overriding: true
读写分离案例
读写分离入门案例
项目实现读写分离
Nginx
概述
Nginx 命令
将nginx加入到环境变量 就可以直接打名字使用了
Nginx配置文件结构
Nginx具体应用
部署静态资源
- vim nginx.conf
部署常见错误
当访问该地址的时候,nginx 会按照 index.html,index.htm ,index.php 的先后顺序在根目录中查找文件。如果这三个文件都不存在,那么nginx就会返回 403 Forbidden。
反向代理
你买东西的时候找代理人帮你去买就是正向代理,找代理商卖给你东西就是反向代理,厂商就是web服务器,代理商就是nginx反向代理服务器
- 直接粘贴不需要覆盖之前的
- vim nginx.conf
负载均衡
多服务器的反向代理
前后端分离
介绍
定制接口
前端
YApi
Swagger