服务端
文章平均质量分 93
冰释物语
C 开发工程师
展开
-
sync.map源码解析
golang浅谈sync.mapgo语言原生的map并不是线程安全的一种数据结果,如果想要达到安全则需要使用锁,如果map比较大,则加锁解锁代价相对比较大,常见的做法拆分map,使用key值hash的方式进行小规模的锁操作,前者性能影响较大,后者使用锁较多,容易出错go在1.9之后提供了sync.Map,一种并发安全的map数据结构操作方式跟常见的map大同小异,只是在遍历的时候操作不太一样func main() { var m sync.Map // 1. 写入 m.Store("te原创 2021-01-04 15:45:41 · 447 阅读 · 0 评论 -
Redis持久化机制
Redis常见持久化方式盖题RDB优点缺点AOFAOF 缓冲区文件同步策略AOF同步流程盖题Redis提供常见的两种数据持久化方式AOF和RDB方式,目的是在于防止进程退出之后造成数据丢失问题RDBRDB持久化方式是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化的过程一般分为手动持久化和自动触发持久化优点1、RDB是一个紧凑的二进制文件,代表Redis在某一个时间点的数据写照,非常适合备份和全量复制等场景。2、Redis加载RDB恢复数据远快于AOF方式。缺点1、RDB方式无法做原创 2020-10-18 22:10:50 · 171 阅读 · 0 评论 -
Redis与跳跃表
redis与跳跃表盖题跳跃表的基本思路skiplist数据结构简介盖题跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的,跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找Redis使用跳跃表作为有序集合键的底层实现之一跳跃表的基本思路表处理的是有序的链表(一般是双向链表,下图未表示双向),如下:这个链表中,如果要搜索一个数,需要从头到尾比较每个元素是否匹配,直到找到匹配的数为止,即时间复杂度是 O(n)。同理,插入一个数并保持链表有序,原创 2020-08-09 21:12:53 · 193 阅读 · 0 评论 -
Go语言内存逃逸分析
go语言内存逃逸分析什么是逃逸逃逸分析过程指针逃逸动态类型逃逸逃逸常见情况如何避免总结什么是逃逸逃逸分析是编译器用于决定变量分配到堆上还是栈上的一种行为。函数的运行都是在栈上面运行的,在栈上面生命临时变量,分配内存,函数运行完毕之后,回收内存,每个函数的栈空间都是独立的,其他函数是无法进行访问,但是在默写情况下栈上面的数据需要在函数结束之后还能被访问,这时候就会设计到内存逃逸了,什么是逃逸,就是抓不住如果数据从栈上面逃逸,会跑到堆上面,栈上面的数据在函数结束的时候回自动回收,回收代价比较小,栈的原创 2020-08-06 17:36:47 · 1036 阅读 · 0 评论