项目---外卖2

37 阅读3分钟

CacheEvict注解

清理缓存 一般用在删除和更新相关的业务上 lQLPJxavfF0f6DPM4c0CvrBqHZmt5V0xYgMglQ2oQIEA_702_225.png

lQLPJxavfF0f5B7NAQvNAu6wdxpZlHr_e1kDIJUM4oCBAA_750_267.png

Cacheable注解

在方法执行前Spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有数据,调用方法井将方法返回值放到缓存中 一般用在数据查找时 1663157233460_0AFE5725-8993-4906-AF28-E257030352A8.png

  • condition 当满足什么条件时才缓存
  • unless 当满足什么条件后就不缓存

1663160114544.png

spring Cache 使用redis作为缓存产品

1663159304222.png

1663160114544.png

缓存项目中套餐数据

1663161698289.png

增加缓存

1663162636310.png

1663162664828.png

@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("新增成功");
}

读写分离

1663248131970.png

97901805ec868a707b719f3bf32c9b2.png

主从复制

1663248380045.png

克隆虚拟机 改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

1663729038890.png

blog.csdn.net/weixin_5629…

配置主库

1663248723691.png

6ccc1eb089654d187385bba5bec250b.png

1663317663306_38EF34CC-F822-4f61-97DB-8C6ABEB965F9.png grant replication slave on*.*to'xiaoming'@'%'identified by 'Root@123456' 1663319513769_66BF5A97-92AA-4fcc-8CA0-09FB23E634A1.png

image.png 执行完这个操作以后就不要在主库进行其他操作了,否则会导致日志文件位置变化

windows下配置主库

二、配置主库

  1. 1.停止主mysql:net stop mysql

  2. 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. 3.保存,重启主库,net start mysql

  4. 4.在主库中建立一个用户(专门用给从库连接的,注意这是在主库里面建立的) grant replication slave,reload,super on . to myslave@localhost identified by ‘myslave密码’ ; myslave是用户名,myslave密码是用户对应的密码,localhost也可以写ip

  5. 5.刷新权限 flush privileges;

  6. 6.show master status; # 找到File 和 Position 的值记录下来

配置从库

image.png

image.png
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 86d2b685d4348d2c6f92c97fe32e436.png

1663320320107_7D5A761C-028C-49a8-A7DC-F072CB000508.png

f166b0882d5879bfd34f797659166e7.png

主从复制 测试

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
  

读写分离案例

1663332010813_14A7E9B8-605D-4203-B434-6BC6973E9DCC.png

1663332166685_C4B4DE06-D61A-4d10-9284-16055A42B48C.png

读写分离入门案例

1663332761713_8F81B07E-EB6E-42f0-ADF7-6BF73A44BF8B.png

image.png

1afa3c8f4b8c10f448c3244ffbaf9a2.png

1663334181143_6450530C-9A48-4c2e-81A1-D59062979FC0.png

项目实现读写分离

Nginx

概述

6cdfe9704dcd14a06adf88a6eb2dde1.png

bad9d6b20c0081b32a6a0434f7c3621.png

1663467861366_0A2B2145-E5CD-496a-9421-4D3291A8A581.png

1663469853338_0981FB25-712A-4fab-B759-9B530F99FDE0.png

Nginx 命令

1663470165341_F2E675DD-6EA7-41ed-BB60-F3608D9974F1.png

image.png

1663470801382_5A640EB7-78D6-434f-8ABA-4765FE6FEF73.png

1663471653951_824BF3E2-2579-4724-98DA-EED07E333AAB.png

image.png

将nginx加入到环境变量 就可以直接打名字使用了

1663471957530_66DD8187-77F2-4631-8378-6FDC5BB5BA6D.png

image.png

Nginx配置文件结构

1663472136268_46498E20-A532-45fd-AB9D-9C6B382C1C6A.png

Nginx具体应用

1663487405169_C75AD85B-23F2-40ca-8B8F-C1D5BB3657FA.png

部署静态资源

  • vim nginx.conf 1663487927224_7552DBC0-D59C-479e-BAC0-47B314B91C97.png

1663488094360_D78C5224-2AED-4818-8C08-00B501820D22.png

部署常见错误

当访问该地址的时候,nginx 会按照 index.html,index.htm ,index.php 的先后顺序在根目录中查找文件。如果这三个文件都不存在,那么nginx就会返回 403 Forbidden。

blog.csdn.net/zhexienianl…

反向代理

你买东西的时候找代理人帮你去买就是正向代理,找代理商卖给你东西就是反向代理,厂商就是web服务器,代理商就是nginx反向代理服务器 37dcf59b38bfa45bd905cb5e5113cf6.png 1663489265697_4EFAA666-8EEC-4f78-93A0-92C91E83BF55.png

  • 直接粘贴不需要覆盖之前的
  • vim nginx.conf 8ac45ed96cdce3aa8266528f941d9d6.png

负载均衡

多服务器的反向代理 image.png

1663492208775_2AB03C35-64D4-4367-9442-67477512135B.png

image.png

1663492545058_E17B8337-9002-4ae7-8C09-6B891F7ECD91.png

前后端分离

1663493303193_9F0A5822-CBB4-4286-B1A8-AE71031DD4AE.png

介绍

1663493409942_0609B9AB-4BD9-4889-8DD5-EB9C63B6059F.png image.png image.png 定制接口 image.png

前端

image.png

YApi

1663503160308_F133ACAD-7A9B-4499-B532-C4BE49285C67.png

1663503273333_E23E3CD4-EDDC-48b1-973B-030A56A53938.png

Swagger

image.png

1663504945670_53C12EA2-6629-4078-955D-1DD8186F9CBB.png

image.png

1663505059630_11D7B717-679C-4879-B0AB-057ADA719E97.png

image.png

1663507154603_50A196B9-4826-41a5-B8AD-379630960AEC.png 1663507337611_FCF8D5C1-CF4B-4f92-880F-56F8E319C7E2.png

Swagger注解 (增加接口文档的说明性)

1663552206355_22D3F305-C341-433c-9C7E-4F0CDE75E6BC.png

image.png

1663552974457_6336AD3A-4DF6-41cc-BCE7-9DFB34D50A44.png

1663552987465_D8A105B2-90B4-41b8-8376-16FF32FF5D03.png

项目部署

部署架构

1663554513732.png

1663554543145.png

部署前端

fb6b98ebea83ce7b2c3aa57b18dd89e.png

1663647716086_3078C9AD-801D-41b7-80E2-D8A50873E6E0.png

1663648590301_946F2DF4-2FE6-4e8c-961A-D4A9B20B8064.png

后端部署

1663648704213_6D2D90FE-B889-4909-9FFD-C7EEB8C37315.png

1663648796941_696F9FB4-8660-448f-B80A-F263CB7E9E5F.png

1663648973821_CDBD82D7-A400-4e1f-93E2-2C1A0C051DD9.png

image.png