复习
- 持久化
- RDB
- 优势:
- 文件紧凑,便于传输及恢复
- 使用子进程持久化,最大化性能
- 恢复比AOF快
- 劣势:
- 持久化间隔时间较长,一旦故障,丢失的数据量较大
- 数据集大时,持久化消耗性能
- 优势:
- AOF
- 优势:
- 持久化间隔比较短,丢失数据少
- 日志文件追加写方式,如果损坏,支持修复,丢失数据较少
- 日志文件支持重写,压缩文件大小,过程绝对安全
- 日志文件格式人类可读以及易解析
- 劣势:
- 文件体积较RDB大
- 持久化速度比RDB慢
- 优势:
- 支持同时开启,优先读AOF
- 建议:RDB+AOF;RDB;
- 配置
- RDB save 300 9
- appendfsync
- always 每次修改即持久化
- everysec 每秒
- no 不保存
- RDB
- 事务
- multi exec discard watch
- 在客户端讲一批指令打包发给服务器执行
- 如果客户端出错,取消事务
- 如果服务器出错,继续执行
- watch (CAS compare and set)
- 监视一个key,在事务中的指令执行时,如果该key 的值发生了变化,则取消事务
- 高可用与集群
- 高可用: 哨兵 sentinel 选择主机,调整主从关系,保证集群一直有主机在工作,保证了集群的可用
- 数据扩展:cluster ,3主3从,数据分布在三台主机上,每台主机存在一定数量的hash槽,从机数据从主机获得
- 先创建6个redis实例
- 创建redis-cluster集群
Redis性能高的原因
- 内存存储,速度快
- C语言编写,C语言性能比较高直接操作内存
- Redis的文件事件处理器是单进程的(但是不代表内部没有多进程,持久化就是多进程的),通过IO 多路复用机制,提升整体的性能
Redisson
https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95
添加依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.1</version>
</dependency>
修改配置 ```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 {
@Value("${spring.redis.host}")
public String redisHost;
@Value("${spring.redis.port}")
public String redisPort;
@Bean
public RedissonClient redissonClient(){
Config config = new Config();
config.useSingleServer()
.setAddress("redis://"+redisHost+":"+redisPort);
return Redisson.create(config);
}
}
3. 编写代码
```java
package com.woniuxy.redis.redissondemo.controller;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
@RestController
@Slf4j
public class RedissonController {
@Autowired
private RedissonClient redissonClient;
@GetMapping("doLock")
public String doLock(String flag) throws InterruptedException {
log.info("{} 准备加锁",flag);
RLock clientLock = redissonClient.getLock("incr_balance");
boolean locked = clientLock.tryLock();
if(locked){
TimeUnit.SECONDS.sleep(15);
clientLock.unlock();
log.info("{} 解锁成功",flag);
}else{
log.info("{}加锁失败",flag);
return "lock fail";
}
return "lock finish";
}
@GetMapping("testBloom")
public String doBloom(){
RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("userLogin");
//尝试初始化,预计元素55000000,期望误判率0.03
bloomFilter.tryInit(55000000L, 0.03);
//添加在线人数,可以在启动时从数据库加载,之后进行动态增删
bloomFilter.add("chengyuxiang");
bloomFilter.add("huangguang");
bloomFilter.add("gankeke");
bloomFilter.add("wangyang");
bloomFilter.add("fugang");
bloomFilter.add("yanglin");
bloomFilter.add("yanchuanchuan");
bloomFilter.add("xuyang");
//使用
log.info("总在线人数{}",bloomFilter.count()) ;
log.info("{}是否存在 {}","yanglin",bloomFilter.contains("yanglin")) ;
log.info("{}是否存在 {}","tangxiao",bloomFilter.contains("tangxiao")) ;
return "success";
}
}
Git 版本管理工具 VCS(Version Control System)
其他vcs: svn
代码合并: 自动合并来自于不同开发者的代码
代码版本管理:每次代码提交,形成一个版本,记录代码变更,作者,时间
- 代码追溯
- 代码回滚
代码托管:将代码统一放在一个服务器上进行托管
….
git-server
国外:github.com
国内√:gitee.com 码云
- 注册
- 新建一个仓库
git-client
- 下载安装
- 打开一个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已管理)
注意点:
- 建项目,将项目放置在git clone之后的文件夹里
- .gitignore 文件 能够在提交时忽略一些特定的文件及目录
- 快捷键
- ctrl+k 提交
- ctrl+shift+k 推送
- ctrl+t 拉取
冲突的解决:
关键原则:先商量,再操作,严禁不商量直接覆盖别人的代码
分支: https://learngitbranching.js.org/?locale=zh_CN
提交频率
- 先pull,再push
- 不报错,可以运行,就可以提交
- 一天至少提交3次
项目相关
四个仓库:
前台前端 vue
前台后端 spring-boot
后台前端 vue
后台后端 spring-boot
日期节点:
7.8 之前确认需求
7.9 产出数据库设计
7.16 答辩
7.19 阶段考
要求:
主线跑通