Redis
Redis概述
基于内存的nosql数据库,只支持linux系统,多用于做缓存、排行榜、计数器、分布式回话、分布式锁等等。
与memcache的区别
持久化:支持数据持久化(AOF追加和RDB快照),redis缓存有备份存在硬盘上;memcache数据都存在内存中,断电之后会挂掉
存储类型:redis支持string、list、set、map、sorted set多种数据存储类型;memcache只支持K/V形式的数据
分布式:redis原生支持cluster分布式集群,可以进行数据备份;memcache需要依靠客户端实现分片
redis底层
redis是纯内存数据库,使用单线程避免线程切换和竞争产生资源消耗,非阻塞I/O多路复用模型使其I/O处理速度很快。
- redis单线程模型
redis基于reactor模式开发了网络事件的处理器,也就是在单线程中处理多个事件,就像NIO中的selector一样,一个线程管理多个通道
淘汰策略
volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
allkeys-random:从数据集中任意选择数据淘汰
redis高可用
master-slave模式(主从)通常高可用需要使用6台redis服务器,3主3从
- 哨兵机制
监控:哨兵每隔一定时间就像服务器节点发送ping,来判断节点状态。若哨兵ping不到某个哨兵节点,则视为该节点主观下线,超过大部分的哨兵ping无结果视为客观下线。当主服务器客观下线时,哨兵节点对其进行故障转移,开始投票,选举一个哨兵作为leader。
master数据库出现故障时,可以通过投票机制,从slave节点选举新的master,实现从数据库转换为主数据库
哨兵除了会监控master和slave节点,哨兵之间也会互相监控 - 故障转移
主服务器发生故障之后,从该主服务器的从服务器中选出一个来替换主服务器,当主服务器重新上线是,变为现在的主服务器的从服务器。
哨兵机制缺点:需要进行主从复制,性能下降,主服务器宕机后,从服务器替换主服务器的时间,服务不可用。
一致性hash算法。虚拟IP,hash环,最近redis服务器
16384个hash槽,每个节点负责一部分槽位,每个key会被映射到相应的槽位,负责这个槽位的master为其提供服务。