SpringCache+主从复制

@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复制过程分成三步:

  1. master将将改变记录到二进制日志(binary log)
  2. slave将master的binary log拷贝到它的中继日志(relay log)
  3. 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
-----------------------------------------
创作不易!转载请注明作者及文章链接或作者博客链接——
- 作者:pidanxia
- 链接:https://pidanxia.ink
(链接可为:**文章链接**或者**作者博客链接**)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇