Go 进阶训练营 – 评论系统架构设计四:可用性设计 1009 | 5 | Go 进阶训练营 | 2022-11-21 11:06 | 2022-11-21 11:06 909 字 | 4 分钟 Singleflight 对于热门的主题,如果存在缓存穿透的情况,会导致大量的同进程、跨进程的数据回源到存储层,可能会引起存储过载的情况,如何只交给同进程内,一个人去做加载存储? 使用归并回源的思路:https://pkg.go.dev/golang.org/x/sync/singleflight,同一时间只有一个协程去拿数据,拿到数据前,相同任务…
跳表:为什么Redis一定要用跳表来实现有序集合? 699 | 0 | 日常 | 2022-11-07 20:55 | 2022-11-07 20:55 1715 字 | 7 分钟 前言 时间复杂度O(logn)的二分查找很高效,但是依赖数组随机访问的特性,如果是链表,如何做到O(logn)? 跳表 原始链表查找时,需要遍历链表,时间复杂度就是O(n),光靠原始链表是不行的。 我们可以增加辅助链表,达到索引的作用,使用起来类似二叉搜索树。 查找时,从上往下,一层一层的查找,类似二叉搜索树。索引层可以继续增加,效率会得到提升。 …