摘要:
BitSet/HyperLogLog 聚合统计 建议使用Set类型,但是以下命令时间复杂度均为O(N),数据量大时可能会有阻塞问题。 以user:id存储的用户id数据为例。 交集 统计8月4日相对于8月3日留存的用户。 SINTERSTORE user:id:rem user:id:2020080 阅读全文
摘要:
切片集群 多个 Redis 实例组成一个集群,然后按照一定的规则,把收到的数据划分成多份,每一份用一个实例来保存。 Redis Cluster 定义 Redis官方提供的实现切片集群的方案,采用了16384个哈希槽用于处理数据和实例的映射关系。 首先根据key计算哈希槽hash_slot = CRC 阅读全文
摘要:
主从模式 读写分离,master处理读写命令,slave仅处理读命令。 为什么仅有一个masater能处理读? 这是避免引入加锁、实例间协商是否完成修改等操作。 主从同步方式 通过replicaof {master_ip} 6379去请求RDB文件,同步细节如下。 从库给主库发送 psync 命令, 阅读全文
摘要:
回放AOF(Append Only File) 用 AOF 方法进行故障恢复的时候,需要逐一把操作日志都执行一遍。如果操作日志非常多,Redis 就会恢复得很缓慢,影响到正常使用。 AOF具体见Redis持久化:AOF日志。 读取RDB(Redis DataBase) 内存数据的全量快照,即把内存数 阅读全文
摘要:
单线程澄清 Redis的单线程,指的是Redis的键值对读写由一个线程来完成。 Redis的多线程: 持久化 异步删除 集群数据同步 网络IO (Redis6.0引入,5.0及之前都是单线程) 单线程快的原因 内存数据库 Redis完全基于内存,大部分操作都是在内存中完成的。内存操作相比于磁盘操作, 阅读全文
摘要:
在线验证算法 排序数组 算法实现 1. 快排 思路 树的前序遍历。 每次选取一个数作基准值,将小于基准值的数放在左边,大于基准值的数放在右边。遍历左子树及右子树,直到只有1个数为止。 实现 class QuickSort { public static void sort(int[] nums) { 阅读全文
摘要:
# 思路 LFU每个freq对应的集合其实就是个LRU,淘汰K时,会首先选取freq最小的集合,其次选取最久未使用的Key。 更新或者查询时,会将对应的K/V从当前freq提升至freq+1集合的末尾(假如头代表最久未使用)。 ## 插入 ![image](https://img2023.cnblo 阅读全文
摘要:
# 思路 LRU算法,访问/更新/插入都会将数据置于队尾(假设队头淘汰)。 看3种情况的变化: * 插入:简单置于队尾即可。 * 更新:删除原有节点,新增节点置于队尾。 * 访问:将原节点提至队尾。 除了插入只需要简单接到链表尾部以外,更新和访问都是可能操作链表中间的,所以自然地就需要引入Map来快 阅读全文
摘要:
# Kruskal ## 思路 贪心思想,将所有边进行排序,依次连接。利用UF判断亮点连通性,若2点已经连通,则跳过,避免成环。 ## 实现 ``` class Solution { public int minimumCost(int n, int[][] connections) { int c 阅读全文
摘要:
[MySQL 精选 60 道面试题](https://blog.csdn.net/hahazz233/article/details/125372412) 阅读全文