Redis相关笔记|青训营笔记

71 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

个人笔记,有误请指正。

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。

redis会从内存中读写数据,也可把数据写入到硬盘中。

redis包括的基本数据结构有:

string 动态字符串,是一个可变的字节数组。一个key对应一个字符串,是redis最基本的数据类型。

list 底层使用双向链表来实现,一个key对应一个字符串列表

hash 字典,数组+链表实现,数组存放链表头指针,从key定位数组相应位置获得链表表头,再遍历获得

value值,基本类似于Java的HashMap。

set 内部使用hash结构,相同的key指向同一个value

zset 再set基础上为value赋予权重,内部按照权重进行排序。底层使用hash+跳表来实现,用hash来保障value唯一性和绑定value和权重,用跳表来排序或根据权重来获得对应的value。

使用时要注意的问题:

1、大key:对string大于10KB,对其他复杂数据结构类型元素大于5000个或大于10MB。key太大导致读写 时间长、复制容易出错、慢查询问题。

可以通过拆分为小key或者压缩写入的方法进行优化

2、热key:一段时间内被多次访问的key导致负载突增

可以自己设置本机cache来辅助热key的快速访问,或者字节自己的redis访问代理就新增了承载热key的功能,方法同前,但有现成的轮子用。

3、慢查询场景:一次性传入过多键值对使负载过大性能下降明显,zset太大性能下降,对大key操作。

4、老生常谈的缓存穿透、雪崩问题。