Java后端
·2025-04-22复习第十四天
什么是 Java 的 CAS(Compare-And-Swap)操作?
存在的问题
ABA:通过添加版本解决
单变量
循环开销
你使用过哪些 Java 并发工具类?
Semaphore acquire release 信号量
AtomicInteger 原子整形
ReentranLock 可重入锁
CyclicBarrier 循环屏障 循环屏障 wait
CountDown 计数器 wait countdown
你了解 Java 线程池的原理吗?
核心参数:核心线程数、最大线程数、存活时间、工作队列、拒绝策略
工作队列:
SynchronizedQueue:不使用队列
PriorityQueue:
LinkedBlockQueue:
ArrayBlockQueue:
拒绝策略:
丢弃抛出异常
直接丢弃
丢弃队头元素
调用者来执行
创建线程池方式:
单个
多个
不设上限
定时任务
偷取任务的
Redis 数据过期后的删除策略是什么?
定期删除:周期性删除100ms,拉取20个键,判断是否有超过25%的键过期,如果是,则继续拉去,总时长不可以超过25ms。缺点CPU占用率高
惰性删除:查找到的时候才删除,缺点:内存泄露
兜底策略
如果内存满了
最近最少使用
最少使用频率
随机删除
最小存活时间的进行删除
不执行删除操作,拒绝
Redis 主从复制的实现原理是什么?
主节点将数据同步给从节点
开始同步
全量同步:psync ?-1 触发全量复制,主节点生成RDB文件发给从节点,从节点根据RDB文件进行重放,主节点将这生成RDB文件之后的数据也发给从节点。
增量同步:主节点和从节点会维护一个长链接,psync 主节点ID offset 主节点从环形缓冲区中取出偏移量后面的数据发给从节点,如果没有,则进行全量复制
Redis 的持久化机制有哪些?
RDB:生成内存中的一个快照,以二进制的形式进行存储,适合主从复制,备份等场景
AOF:写入命令的时候追加到AOF文件中,实时性比较高
RDB优点:恢复快,服务器宕机后可以使用其进行恢复 缺点:缺少上一次备份后的数据
AOF优点:缺失数据比较少 缺点:恢复速度比较慢
生成RDB流程
* 先判断是否在生成RDB或者执行AOF重写
* fork一个子进程
* 子进程复制生成RDB文件
* 将新的替换旧的
生成RDB过程中的写入操作
* 使用写时复制技术
* 将要写入数据所在的页进行复制
AOF重写
* fork一个子进程
* 将内存中的键转化为对应的写入命令,写入到AOF文件中
* 主进程仍然将新的请求写入到原来的AOF缓冲区并刷入到原来的AOF文件中
* 主进程还需要将重写期间的命令写入新的AOF文件中
* 新的替换旧的
混合持久化机制
* 先fork一个子进程
* 生成RDB文件
* 将RDB文件添加到AOF的头部,将生成RDB文件期间新增的数据添加到AOF文件中
* 旧的替换新的
* redis7.0做了优化,主进程直接生成增量AOF文件,然后和重写的AOF文件进行合并
5
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
