学习笔记
待秃头肥宅
知道的永远太少
展开
-
Go踩坑记录
goroutine和闭包 for i:= 0; i < 10; i++ { go func(){ time.Sleep(time.Duration(100) * time.Millisecond) fmt.Printf("%d\n", i) }() } 预期:输出0~9 实际:输出全部是10 原因:在10个goroutine中,输出的 i都是for循环这个scope里的 i,这...原创 2019-12-18 13:40:56 · 180 阅读 · 0 评论 -
Redis LFU 实现 -- 掷硬币的艺术
最近看了Redis的LFU缓存淘汰的实现,被惊艳到了。最近遇人总是问一句,用8个bit计数,能计多少? Redis在4.0之后支持配置缓存淘汰使用LFU(Least Frequently Used, 最少使用算法)。知道LFU的应该都知道LFU需要记录关于缓存的访问次数,Redis是怎么记的访问次数呢? Redis记录访问次数使用了一种近似计数算法——Morris算法。Morris算法利用随机...原创 2019-09-27 20:36:23 · 2067 阅读 · 0 评论