Spring Cache和Mysql主从复制

瑞吉外卖开发项目 瑞吉外卖 阅读详情

目录

Spring Cache

 简介

步骤

mysql主从复制

介绍

 准备

首先我的主库选的是centos虚拟机,从库选的ubuntu虚拟机。如下图。

卸载mysql(centos)

安装mysql(centos版)

配置主库(centos)

卸载mysql(ubuntu)

安装mysql:

配置从库

mysql主从复制用途

Sharding-JDBC(是一个可以轻松实现数据库读写分离的框架)

 入门案例步骤


Spring Cache

 简介

步骤

下面是我们需要进行的步骤。

首先我们用的是redis。

1.导入maven坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

2.配置核心文件application.yml

 spring:
     cache:
        type: redis
        redis:
          time-to-live: 1800000 #设置缓存数据过期时间

3.在启动类上加@EnableCaching注解。然后我们进行对应缓存配置即可。

4.接下来我们举几个代码例子来说明每个注解的运用。

    /**
     * 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);
    }

    //@CacheEvict(value = "userCache",key = "#p0.id")
    //@CacheEvict(value = "userCache",key = "#user.id")
    //@CacheEvict(value = "userCache",key = "#root.args[0].id")
    @CacheEvict(value = "userCache",key = "#result.id")
    @PutMapping
    public User update(User user){
        userService.updateById(user);
        return user;
    }

    /**
     * Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
     * value:缓存的名称,每个缓存名称下面可以有多个key
     * key:缓存的key
     * condition:条件,满足条件时才缓存数据
     * unless:满足条件则不缓存
     */
    @Cacheable(value = "userCache",key = "#id",unless = "#result == null")
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id){
        User user = userService.getById(id);
        return user;
    }

    @Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")
    @GetMapping("/list")
    public List<User> list(User user){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(user.getId() != null,User::getId,user.getId());
        queryWrapper.eq(user.getName() != null,User::getName,user.getName());
        List<User> list = userService.list(queryWrapper);
        return list;
    }

注意:这里的参数key支持Spring的表达式语言SPEL语法。

result代表返回值,p0表示第一个参数,也可直接用参数名。

mysql主从复制

介绍

 准备

准备两台服务器,分别安装mysql并启动服务成功。

首先我的主库选的是centos虚拟机,从库选的ubuntu虚拟机。如下图。

卸载mysql(centos)

 安装的前提我们已经卸载完成之前安装的mysql。

这里我就卸载了一次。

CentOS7安装MySQL8.0 - 码农教程

可以参考上面的内容,写的挺好的,实在不行就只能重新安装一次虚拟机。

安装mysql(centos版)

下载
wget http://repo.mysql.com/mysql80-community-release-el7-5.noarch.rpm
安装
rpm -ivh mysql80-community-release-el7-5.noarch.rpm
yum update
yum install mysql-community-server

基本上我们就安装好了,接下来我们开始数据库的基本配置了。

启动mysql
systemctl start mysqld.service
mysql在安装后会创建一个root@locahost账户,并把初始密码放到了/var/log/mysqld.log;

sudo cat /var/log/mysqld.log | grep password

mysql -u root -p
然后输入我们上面获得的密码。

修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password!';
然后我们这里应该会遇到不符合密码要求的情况。
这时候我们需要设置密码权限。

查看密码要求
SHOW VARIABLES LIKE 'validate_password%';

更改密码最小长度要求为4
set global validate_password_length=4;
设置密码等级为最低
set global validate_password_policy=0;


 我们还可能会用到的命令

进入mysql后

显示数据库列表
show databases;
使用mysql数据库
use mysql;
查询mysql的user表中的数据
select * from user;

配置主库(centos)

然后我们就可以配置主库了

1.首先修改下数据库配置文件my.cnf,centos的这个文件是在/etc/my.cnf

我们需要在[mysqld]下加上以下两行配置。

log-bin=mysql-bin #启动二进制
server-id=100 #唯一id

重启mysql服务

systemctl restart mysqld

登录到mysql,我们添加一个用户,并设置权限,这个到从库配置会用到。

    用户创建:create user 'username'@'%' identified by 'password:';

  授权:grant all privileges on *.* to 'username'@'%' with grant option;

  查看用户权限:select host, user, authentication_string, plugin from user;

  删除用户:DROP USER 'username'@'host';

这里给的是最高权限。

最后,用show master status;我们可以查询到两个关键的值(file和position),我们后面需要用到。

本地navicat连接mysql

用上面创建的用户密码连接即可,user默认权限为本地localhost,我们需要更改成%才可使用。

如果想要用本地navicat连接mysql的,可以试试下面的

首先,查看虚拟机设置中的网络,我们可以看到本机的ip地址。

然后我们需要把虚拟机防火墙关闭。(我这里试过将iptables防火墙加入3306端口,但还是不管用)

systemctl stop firewalld.service(默认安装的是firewall防火墙)

出现进程冲突

sudo kill -s 9 进程id

卸载mysql(ubuntu)

如果我们在登陆时遇到这个错误。

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

我们基本就可以卸载了。

mysql启动停止命令

sudo service mysql stop

sudo service mysql start

卸载

sudo apt-get remove mysql-server

sudo apt-get autoremove mysql-server

sudo apt-get remove mysql-common

sudo rm /var/lib/mysql/ -R

sudo rm /etc/mysql/ -R

sudo apt-get autoremove mysql* --purge

sudo apt-get remove apparmor

安装mysql:

sudo apt-get install mysql-server mysql-common

我们这时候该登录了,我们会发现我们不知道密码,或者你遇到密码忘记的情况,我们这里介绍一下如何修改密码。

1、关闭服务
sudo service mysql stop

2、修改mysql配置文件my.cnf
我们会发现他跟centos位置名字都不一样,但是他也在/etc下,具体位置应该是/etc/mysql/mysql.conf.d/mysqld.cnf
sudo /etc/mysql/mysql.conf.d/mysqld.cnf
增加两行
[mysqld]#这个不用写,在他下面写。
skip-grant-tables
skip-networking

3、然后启动mysql,就可以直接登录进去。修改密码
use mysql; 
flush privileges;
update user set authentication_string='password' where user='root'; 
alter user 'root'@'localhost' identified with mysql_native_password by 'password'; 
flush privileges;
停止mysql
sudo service mysql stop
并且删除我们之前在mysqld.cnf增加的内容(或注释)

4.然后重新启动,密码就修改成功了
sudo service mysql start
登录
mysql -uroot -p
输入密码即可

配置从库

1.修改mysql配置文件

sudo /etc/mysql/mysql.conf.d/mysqld.cnf

在【mysqld】下加入

server-id=101#注意这要跟上面的主库配置不一样,都是唯一的。

然后重启mysql

sudo service mysql start

开放mysql
sudo ufw allow mysql
防火墙关闭
sudo ufw disable
防火墙打开
sudo ufw enable
查看状态
sudo ufw status

然后登录mysql输入以下命令

里面的参数上面都提到过。
change master to master_host='主库ip地址',master_user='user',master_password='password',master_log_file='...',master_log_pos=157;


stop slave;
start slave;

show master status;

show slave status;

这时我们需要检查一下navicat是否可以访问

不出意外地话我们这里还会出现问题。无法连接。

我们这时候需要进入mysql配置文件再找到“address=127.0.0.1”这行代码,把它改成“address=0.0.0.0”即可。

然后我们一定要重启计算机。然后就可以访问了。然后我们就可以测试了。

 测试结果发现,我们修改主库的表等数据,我们从库会自动更新。

mysql主从复制用途

 行锁就是同时操作一条多条数据, 这边开事务增删改时候会上锁, 那边就不能增删改查了。

Sharding-JDBC(是一个可以轻松实现数据库读写分离的框架)

 入门案例步骤

 1.导入maven

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>

2.配置yml

  spring:
   shardingsphere: #主从配置,修改ip即可
    datasource:
      names:
        master,slave
#        master,slave,slave1
      # 主数据源
      master:  #主库
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.246.130:3306/reggie?characterEncoding=utf-8
        username: ys
        password: ys001024
      # 从数据源
      slave: #从库
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.246.128:3306/reggie?characterEncoding=utf-8
        username: ys
        password: ys001024
#      slave1: #从库
#        type: com.alibaba.druid.pool.DruidDataSource
#        driver-class-name: com.mysql.cj.jdbc.Driver
#        url: jdbc:mysql://192.168.138.102:3306/reggie?characterEncoding=utf-8
#        username: root
#        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
#      slave-data-source-names: slave,slave1
    props:
      sql:
        show: true #开启SQL显示,默认false
  main: #允许bean定义覆盖(这里是因为有两个DataSource(导入的这个sharing包的)创建,会发生冲突。
    allow-bean-definition-overriding: true

然后我们就可以用了,前提我们需要配置好两个mysql服务器。

 注意:千万不要导错依赖。

SpringBoot优化 Git常用命令与在IDEA中的使用;Linux常用命令;Redis中间件和Spring cache缓存;MySQL主从复制;Nginx反向代理和负载均衡;前后端项目分离。 阅读详情

相关推荐

从波形图到参数调优:一次无感BLDC电机启动失败的深度解析

本文深入解析无感BLDC电机启动失败案例,通过波形分析揭示参数不匹配和IPM保护机制触发等关键问题。详细探讨了过零点检测、PWM周期设置及强拖参数调优的底层逻辑,并分享IPM模块保护机制与实战调优技巧,最终实现99.98%的启动成功率。

weixin_29182481的博客 819

Spring Cache、Mysql主从复制、读写分离案例

Spring Cache的基本介绍、Mysql主从复制的演示及配置流程、读写分离案例

weixin_61843013的博客 727

74hc595驱动模块的Verilog设计(线性状态机)

module hc595_driver( input clk, //50Mhz input rst_n, //复位信号 input [15:0] data, //数码管待显示数据,8位段选数据,8位位选数据 input en, //使能 o...

qq_41294540的博客 3740

ShardingSphere学习----MySQL主从复制

MySQL主从复制一. Sharding-JDBC 实现读写分离二. 主从复制原理三. 搭建一主一从 MySQL环境①. 复制之前 MySQL 目录②. 修改端口号,文件路径③. 把复制修改之后从数据库在 windows 安装服务④. 测试连接⑤. 配置 MySQL 主从服务器⑥. 创建用于主从复制的账号⑦. 测试主从复制效果四. Sharding-JDBC 实现读写分离①. 主库和从库上都建库建表②. 配置读写分离策略③. 测试代码运行 一. Sharding-JDBC 实现读写分离 为了确保数据库

1183

Arduino Uno 实验15——MQ-135 气体传感器模块

MQ-135 气体传感器模块简介(空气质量检测 有害气体检测)   MQ135气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在污染气体时,传感器的电导率随空气中污染气体浓度的增加而增大。MQ135气体传感器对氨气、硫化物、苯系蒸汽的灵敏度高,对烟雾和其它有害气体的监测也很理想。这种传感器可检测多种有害气体,是一款适合多种应用的低成本传感器。   主要用途:家庭和环境的有害气体检测装置   主要芯片:LM393、MQ-135气体传感器 不同气体的型号选择

weixin_42645653的博客 2万+

【WILEY】wiley期刊投稿详解:从revision到Accepted全流程实例讲解

注意:包括没标注修改位置的word文件和标注了修改位置的word文件。

Everyday try to become better -Kobe Bryant 1万+

继SpringCloudAlibaba后阿里又一神作:MySQL应用实战与性能调优

MySQL是当下流行的关系型数据库管理系统,使用C和C++语言编写而成,因而具有源码级的可移植性。在Web应用方面,MySQL是非常好的关系数据库管理系统(Relational DatabaseManagement System,RDBMS)应用软件之一。今天给大家分享一份非常牛X的MySQL应用实战与性能调优手册,书中内容循序渐进,实战为主,学习、参考皆宜实用技巧融入案例中,可查可练非常适合学习!InnoDB内存结构解析和优化实战。B-Tree索引和哈希索引的比较。MySQL 8安装和升级。

the shy 175

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 117

springboot cache缓存之访问数据库(以mysql为例)

本文给出了springboot cache缓存在访问数据库中的应用,首先给出了缓存的概念、适用场景,然后给出了完整的java程序和代码注释,最后指出了使用springboot cache常见的问题和解决方案。写下此文为了记录下最近研究springboot cache遇到的坑和解决方案,也希望能够对其他的初学者有一些帮助。 什么是缓存cache? 外存:可以简单的理解为电脑上的CDEF盘和U盘;此类...

Jackie_123789的博客 2742

LS-Dyna模态分析实战:从模型构建到结果解读的全流程指南

本文提供了一份详尽的LS-Dyna模态分析实战指南。文章系统讲解了如何利用LS-Dyna内置的隐式求解器进行特征值求解,从模型构建、几何清理、材料与连接设置,到核心的边界条件与隐式求解控制(如*CONTROL_IMPLICIT_EIGENVALUE),最后完成计算并解读频率与振型结果。旨在帮助工程师在熟悉的环境中高效完成结构振动特性分析,为后续动态响应分析奠定基础。

info6的博客 261

利用setEcoMode优化innovus中的ecoAddRepeater批量操作效率

本文详细介绍了在Cadence Innovus工具中,如何利用setEcoMode命令的batchMode参数,显著提升ecoAddRepeater命令在批量插入buffer或inverter时的操作效率。通过合并重复的初始化和数据库更新开销,该模式可将大规模时序修复操作的执行速度提升数倍,并提供了完整的脚本示例与最佳实践,帮助后端设计工程师优化ECO流程。

mango的博客 510

springboot之mysql、mybatis、SpringCache、redis缓存

需要了解 mybatis二级缓存默认开启,需要设置二级缓存介质才可生效,二级缓存底层是管理一级缓存, 将每个本地一级缓存集合化管理 二级缓存介质 Ehcache、SpringCache、Redis SpringCache缓存介质的不同实现 代码 项目结构 创建database name :demo table :user(id,name,age) statement:inser...

专注Java领域与微服务架构,热爱人工智能与深度学习 1336

数据挖掘在人力资源分析中的实战案例

在当今竞争激烈的商业环境中,人力资源管理对于企业的成功至关重要。有效的人力资源管理能够提高员工绩效、降低员工流失率、优化人才招聘等。而数据挖掘技术为人力资源管理提供了强大的工具,通过对大量人力资源数据的分析,可以发现潜在的规律和模式,为企业的决策提供有力支持。本文的目的是通过实际案例展示数据挖掘在人力资源分析中的具体应用,涵盖员工绩效预测、人才招聘筛选、员工流失分析等多个方面。通过详细的案例分析,帮助读者理解数据挖掘技术在人力资源管理中的实际操作和应用价值。

移动开发前沿的博客 489

瑞吉外卖2.0 Redis 项目优化 Spring Cache MySQL主从复制 sharding-JDBC Nginx YApi Swagger

Bean//默认的Key序列化器为:JdkSerializationRedisSerializer缓存短信验证码保存方式:Session-->Redis@Autowired//获取手机号if(StringUtils.isNotEmpty(phone)){//手机号非空//工具类 生成随机的4位验证码//调用阿里云提供的短信服务API("签名","模板",手机号,动态验证码)完成发送短信//SMSUtils.sendMessage("瑞吉外卖","",phone,code);

我亦无他,唯手熟尔 1325

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【分布式系统没有银弹】,Spring Boot + MySQL读写分离,MySQL + Redis 双写一致性

MASTER, // 主库:写操作SLAVE // 从库:读操作读写分离:使用Dynamic-Datasource,配置简单,社区支持好,比Sharding-JDBC更轻量Redis+MQ方案适合 热点数据的缓存更新。不适用于大批量操作。建议对需要缓存的数据做分类,只对高频查询的数据使用MQ同步。建议在查询方法上使用显式指定,避免默认路由错误。对于复杂查询,可以考虑在MyBatis中使用@Select指定数据源。监控主从延迟,避免从库数据不一致。🌟小技巧。

fupinghaohao的博客 760

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

瑞吉外卖学习笔记

全局块:和 Nginx 运行相关的全局配置events 块:和网络连接相关的配置http 块:代理、缓存、日志记录、虚拟主机配置http 全局块Server 块Server 全局块location 块http块中可以配置多个Server,每个Server块中可以配置多个location块。root html;

2301_80165178的博客 780

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

vue基于springboot的蛋糕购物商城网站的设计与实现_95m4l-vue

Spring封装了很多的java类库文件,在开发过程中,不需要写太多复杂的类文件,只需要引用spring这个框架,就可以完成快速开发的需要,所以Java编程的逻辑代码就变得比较清晰,各层之间的解耦性也比较强,可重用性也得到了很好的发挥,使得开发难度也更加轻松容易,它的主要两个特性就是依赖注入、面向接口思想;Vue实现了MVVM框架,通过后台的模型进行业务逻辑的处理,并将数据绑定到视图层中,在视图层绑定显示控件,将Model对象的数据绑定到页面控件中,实现数据的自动同步。:商品添加、删除、数量修改。

bishe288的博客 385

瑞吉外卖项目----(2)缓存优化

缓存优化

LL的博客 539

瑞吉外卖项目学习心得

由JDK所提供。ThreadLocal并不是一个Thread,而是Thread的局部变量,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal为每一个线程提供单独的一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。public void set(T value) 设置当前线程的线程局部变量的值。

小赵的博客 379

Spring boot整合Spring Data Jpa,Redis和Spring Cache入门练习

这两天一直在学习Spring Cache,下面就简单总结一下。 首先,从创建项目开始:我使用的是Spring tool suit创建的Spring boot + Spring Data Jpa 项目,这里就不详细讲了。项目简单整合Redis和Spring Cache。 下面是主配置文件application.properties的配置: spring.datasource.url = jd...

weixin_42904666的博客 1329

mysql caching_Spring Caching抽象和Google Guava Cache

mysql caching Spring为缓存昂贵的方法调用提供了强大的现成支持。 这里详细介绍了缓存抽象。 我的目标是使用Spring Guava Cache涵盖Spring现在提供的4.0+版本的较新的缓存实现之一。 简而言之,请考虑一种具有几种慢速方法的服务: public class DummyBookService implements BookService { @O...

最佳 Java 编程 156

Spring Cache:注解式缓存的使用

Spring 从 3.1 开始定义了 org.springframework.cache.Cache和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术;并支持使用 JCache(JSR-107)注解简化我们开发;Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合;Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现;

Nanki_的博客 1256

Spring Cache 全景指南

不是一个具体的缓存实现(它不是 Redis,也不是 EhCache),而是一套缓存抽象层(Cache Abstraction)。

czlczl20020925的博客 768

mysql evict_spring cache 学习——@CacheEvict 使用详解

1. 功能说明除了填充缓存,spring cache 也支持使用 @CacheEvict 来删除缓存。@CacheEvict 就是一个触发器,在每次调用被它注解的方法时,就会触发删除它指定的缓存的动作。跟 @Cacheable 和 @CachePut 一样,@CacheEvict 也要求指定一个或多个缓存,也指定自定义一的缓存解析器和 key 生成器,也支持指定条件(condition 参数)。关...

weixin_28775381的博客 651
上一篇: VSCode配置C和C++语言
下一篇: Nignx服务器,项目部署和Yapi,Swagger工具
低调$(生活)
博客等级 码龄6年 4689粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调$(生活)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值