摘要:
一、底层结构剖析 我们来自顶向下来分析redis内部字典的数据结构 dict dictht 哈希表,只使用 ht[0] ht[1] 用于 rehash的临时空间 计算索引 dictEntry 存放键值对的结构体 dictType 二、拉链法解决hash碰撞 可以参考 " https://www.cn 阅读全文
摘要:
一、SDS 1、SDS结构体 redis3.2之前 :不管buf的字节数有多少,都用 4字节的len来储存长度 ,对于只存短字符串那么优点 浪费空间 ,比如只存 ,则 则只需要一个字节8位即可表示 redis3.2之后: \__attribute__ ((\__packed__)) 关键字是为了取消 阅读全文
摘要:
一、系统环境变量 GOROOT 指定go的安装目录,win是在 C\\Go\\ ,Linux在 /usr/local/go 下,如果不是默认的目录,则需要指定 GOROOT环境变量,否则不需要 GOPATH 工作目录,可以指定多个,环境变量中用 分割 go get下载目录的时候默认会下载到第一个GO 阅读全文
摘要:
1、Comparable 这是一个接口,要让对象拥有比较能力,那么就可以继承这个接口,实现 compareTo 方法。 comparaTo返回1则排在后面,返回 1排前面 2、Comparator Comparator 相当于一个比较器,可以对一类对象进行排序而无需继承 Comparable 接口 阅读全文
摘要:
一、reflect.Typeof() 如果传入的是一个接口,如果是动态绑定了一个实现结构体的,则显示具体结构体的Type,否则是接口的名字。这个方法返回的是一个Type接口,其实就是返回了 绑定类型的rtype,这个指针在Value这个结构体有 Typeof返回的是一个Type接口下面看看Type接 阅读全文
摘要:
单循环队列 q :用数组来记录数据 cap:代表数组的长度 len:代表元素的个数,取尾部元素可以根据头元素指针和这个值来进行计算 (queue head+queue len)%queue cap , 取余是为了在规定范围内循环使用有限空间 head:头元素的指针 出队:出头元素只需要将head往前 阅读全文
摘要:
1、map基本使用 map声明 创建 判断值是否存在 只接受一个的话默认返回的是value,两个的话有exists map遍历 删除 2、map和set go没有内置set类型,但是可以用map很轻松模仿, 因为map的key是唯一的 3、map底层结构 借鉴了如下博客。写的很好 " 深入Go的Ma 阅读全文
摘要:
一、三种指针类型 1. 普通指针 2. 非类型安全指针 unsafe.Pointer(类似c的 void ) 3. 内置类型指针 uintpter(其实就是一个整数,代表地址,支持运算) 普通指针和unsafe.Pointer类型的指针都能代表引用一个地址,被GC发现。但是uintptr是不代表引用 阅读全文
摘要:
一、nginx优点 1.反向代理 1、正向代理 : 客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 server不知道client是谁 2、反向代理: 阅读全文
摘要:
缓存穿透 查询缓存步骤: 1. 查询K V数据库缓存。存在返回 2. 如果数据不存在,则查询后端sql数据库 缓存穿透 : 恶意请求会故意查询在redis等缓存数据库里面不存在的Key,来引发后端数据库的查询。 如果数据量很大,则会增加后端的压力。这就是 ~~缓存穿透~~ 如何避免? 1. 请求过滤 阅读全文