复习

  • 持久化
    • RDB
      • 优势:
        • 文件紧凑,便于传输及恢复
        • 使用子进程持久化,最大化性能
        • 恢复比AOF快
      • 劣势:
        • 持久化间隔时间较长,一旦故障,丢失的数据量较大
        • 数据集大时,持久化消耗性能
    • AOF
      • 优势:
        • 持久化间隔比较短,丢失数据少
        • 日志文件追加写方式,如果损坏,支持修复,丢失数据较少
        • 日志文件支持重写,压缩文件大小,过程绝对安全
        • 日志文件格式人类可读以及易解析
      • 劣势:
        • 文件体积较RDB大
        • 持久化速度比RDB慢
    • 支持同时开启,优先读AOF
    • 建议:RDB+AOF;RDB;
    • 配置
      • RDB save 300 9
      • appendfsync
        • always 每次修改即持久化
        • everysec 每秒
        • no 不保存
  • 事务
    • multi exec discard watch
    • 在客户端讲一批指令打包发给服务器执行
      • 如果客户端出错,取消事务
      • 如果服务器出错,继续执行
    • watch (CAS compare and set)
      • 监视一个key,在事务中的指令执行时,如果该key 的值发生了变化,则取消事务
  • 高可用与集群
    • 高可用: 哨兵 sentinel 选择主机,调整主从关系,保证集群一直有主机在工作,保证了集群的可用
    • 数据扩展:cluster ,3主3从,数据分布在三台主机上,每台主机存在一定数量的hash槽,从机数据从主机获得
      • 先创建6个redis实例
      • 创建redis-cluster集群

Redis性能高的原因

  1. 内存存储,速度快
  2. C语言编写,C语言性能比较高直接操作内存
  3. Redis的文件事件处理器是单进程的(但是不代表内部没有多进程,持久化就是多进程的),通过IO 多路复用机制,提升整体的性能

2021年7月7日 Redis4 - 图1

Redisson

https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95

  1. 添加依赖

    1. <dependency>
    2. <groupId>org.redisson</groupId>
    3. <artifactId>redisson</artifactId>
    4. <version>3.11.1</version>
    5. </dependency>
  2. 修改配置 ```java spring: redis: host: localhost port: 6379

package com.woniuxy.redis.redissondemo.config;

import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

@Configuration public class RedissonConfig {

  1. @Value("${spring.redis.host}")
  2. public String redisHost;
  3. @Value("${spring.redis.port}")
  4. public String redisPort;
  5. @Bean
  6. public RedissonClient redissonClient(){
  7. Config config = new Config();
  8. config.useSingleServer()
  9. .setAddress("redis://"+redisHost+":"+redisPort);
  10. return Redisson.create(config);
  11. }

}

  1. 3. 编写代码
  2. ```java
  3. package com.woniuxy.redis.redissondemo.controller;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.redisson.api.RBloomFilter;
  6. import org.redisson.api.RLock;
  7. import org.redisson.api.RedissonClient;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import java.util.concurrent.TimeUnit;
  12. @RestController
  13. @Slf4j
  14. public class RedissonController {
  15. @Autowired
  16. private RedissonClient redissonClient;
  17. @GetMapping("doLock")
  18. public String doLock(String flag) throws InterruptedException {
  19. log.info("{} 准备加锁",flag);
  20. RLock clientLock = redissonClient.getLock("incr_balance");
  21. boolean locked = clientLock.tryLock();
  22. if(locked){
  23. TimeUnit.SECONDS.sleep(15);
  24. clientLock.unlock();
  25. log.info("{} 解锁成功",flag);
  26. }else{
  27. log.info("{}加锁失败",flag);
  28. return "lock fail";
  29. }
  30. return "lock finish";
  31. }
  32. @GetMapping("testBloom")
  33. public String doBloom(){
  34. RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("userLogin");
  35. //尝试初始化,预计元素55000000,期望误判率0.03
  36. bloomFilter.tryInit(55000000L, 0.03);
  37. //添加在线人数,可以在启动时从数据库加载,之后进行动态增删
  38. bloomFilter.add("chengyuxiang");
  39. bloomFilter.add("huangguang");
  40. bloomFilter.add("gankeke");
  41. bloomFilter.add("wangyang");
  42. bloomFilter.add("fugang");
  43. bloomFilter.add("yanglin");
  44. bloomFilter.add("yanchuanchuan");
  45. bloomFilter.add("xuyang");
  46. //使用
  47. log.info("总在线人数{}",bloomFilter.count()) ;
  48. log.info("{}是否存在 {}","yanglin",bloomFilter.contains("yanglin")) ;
  49. log.info("{}是否存在 {}","tangxiao",bloomFilter.contains("tangxiao")) ;
  50. return "success";
  51. }
  52. }

Git 版本管理工具 VCS(Version Control System)

其他vcs: svn
代码合并: 自动合并来自于不同开发者的代码
代码版本管理:每次代码提交,形成一个版本,记录代码变更,作者,时间

  • 代码追溯
  • 代码回滚

代码托管:将代码统一放在一个服务器上进行托管
….

image.png

git-server

国外:github.com
国内√:gitee.com 码云

  • 注册
  • 新建一个仓库

git-client

官网:http://git-scm.com/

  • 下载安装
  • 打开一个gitbash
  • 配置git环境 参考 https://gitee.com/help/articles/4122
  • git clone https://gitee.com/maizdotme/dudugua1.git
  • git status 查看工作区状态
  • git add 将文件添加到git管理中
  • git commit 提交到本地的代码仓库 git commit -m 提交消息(说明本次提交的作用)
  • git push 推到远端
  • git log 查看日志记录
  • git pull 拉取远端的修改

文件状态:

  • untracked
  • new file
  • modified 文件被修改 红色(修改git未管理) 绿色(修改git已管理)

注意点:

  1. 建项目,将项目放置在git clone之后的文件夹里
  2. .gitignore 文件 能够在提交时忽略一些特定的文件及目录
  3. 快捷键
    1. ctrl+k 提交
    2. ctrl+shift+k 推送
    3. ctrl+t 拉取

冲突的解决:
关键原则:先商量,再操作,严禁不商量直接覆盖别人的代码
image.png

分支: https://learngitbranching.js.org/?locale=zh_CN
image.png

提交频率

  1. 先pull,再push
  2. 不报错,可以运行,就可以提交
  3. 一天至少提交3次

项目相关

四个仓库:
前台前端 vue
前台后端 spring-boot
后台前端 vue
后台后端 spring-boot

日期节点:
7.8 之前确认需求
7.9 产出数据库设计
7.16 答辩
7.19 阶段考

要求:
主线跑通