1.4G的文件,里面是8位的手机号码,内存是200M,怎么实现去重?
大文件找中位数问题
- 将大文件划分为多个小文件,每个小文件都可以在内存中处理。
- 对于每个小文件,使用快速排序算法将其排序,并将排序后的结果写回磁盘。
- 对于每个排序后的小文件,读取并保存其中位数。如果有奇数个元素,中位数为中间的那个元素,如果有偶数个元素,则取中间两个元素的平均值作为中位数。
- 将所有小文件的中位数保存在一个数组中,并对其进行排序。
- 如果中位数数组的长度为偶数,则取中间两个元素的平均值作为中位数,如果长度为奇数,则取中间的那个元素作为中位数。
MySQL有2000千万数据, Redis里面只能存20W的数据, 你怎么保证存的都是热点数据呢?
引申到LFU算法。最近最不常使用的
使用logc记录访问频次(访问频率)
所以,Redis 在访问 key 时,对于 logc 是这样变化的:
- 先按照上次访问距离当前的时长,来对 logc 进行衰减;
- 然后,再按照一定概率增加 logc 的值
统计每个键值对在一段时间内被访问的频率,然后淘汰那些访问频率最低的键值对。具体实现过程中,Redis会维护一个从键值对到其访问频率的映射表,然后定期根据这个映射表来淘汰访问频率最低的键值对。