数据结构

数据类型:

二进制安全的字符串: 任意长度(最大512M不推荐过长),key都是该类型

List 列表,Set 集,SortedSet,Hash,Bit Array(最大2^32位), (HyperLogLogs,Stream)

对与List类型数据,redis会自动创建或(不存在)者自动删除(为空)

数据表示Redis内部用 redisObject表示,主要有数据类型,lru,地址等。

淘汰策略

redis可以设置最大内存使用,超过则触发淘汰机制

maxmemory  0则不做限制,64位系统是0,32位系统是3GB

LRU采取取样的形式进行淘汰

noeviction 不淘汰,内存不够报错

allkeys-lru 所有键按照LRU规则进行淘汰

volatile-lru 设置了超时的键按照LRU规则进行淘汰

allkeys-random: 随机淘汰

volatile-random:设置超时则随机淘汰

volatile-ttl:按照过期时间淘汰


超时处理

redis对设置了超过指定超时时间的key会进行删除,计时方式为存储unix时间戳

删除方式有两种,主动模式(定期抽样)和被动模式(读取时判断)

AOF中的超时删除,主节点会在日志文件中插入DEL命令


主从备份

主从备份下,主节点会向从节点发送同步命令

当主从节点间链接因为网络超时等因素打断时,从节点会进行连接并启动部分同步,同步中断时间段的数据

不能进行部分同步,则进行全量同步

数据同步是异步的,从节点会定期向主节点发送其收到的数据

全量同步:主节点启动后台进程生成RDB文件,并启动一个buffer缓存客户端命令,生成RDB文件后发送给从节点,从节点保存并刷入内存,buffer中的命令也会传给从节点。




部署,数据备份/恢复

持久化方式

RDB 快照

优点:磁盘占用小,快速灾难恢复,高性能(每次生成启动子进程) ,缺点:不能保证数据丢失,启动子进程可能导致极短时间的不可用

AOF 日志

优点: 可靠,损坏风险小 缺点: 文件大,恢复较慢,根据策略,可能会有影响性能(可能频繁进行IO操作)

reactor单线程模型

分布式锁

单实例模式: set key val NX PX timeout, 其中key为资源,val通常为申请锁的客户端id

多实例模式:可用性更高,命令和单实例一致,但是需要获取多个实例中的N/2+1个实例的锁 

两种模式都不能有副本,容易出现同步不及时导致的问题


分布式部署/一致性hash


其它:

6版本开始支持TLS