[ 知识点总结 ] Redis 的一些东西(2)


淘汰策略

Redis的内存淘汰策略的大流程如下:

发起需要更多内存的申请
已经超出maxmemory
客户端
Redis检查内存使用情况
执行淘汰策略

Redis的淘汰策略有六种

名称描述
noeviction内存满了会返回错误,不淘汰
allkeys-lru所有键中,选最近最少使用的数据删除 (时间上来说)
volatile-lru在设置过期的键中,选最近最少使用的数据删除
allkeys-random所有键中,随机抛弃
volatile-random在设计过期的所有键中,随即抛弃
volatile-ttl在设置过期的键中,抛弃存活时间最短的数据
allkeys-lfu (redis4.0)所有键中,最不常被访问的数据删除 (频率上来说)
volatile-lfu (redis4.0)在设置过期的键中,最不常被访问的数据删除

持久化

RDB:快照形式是直接把内存中的数据保存到一个 dump 的文件中,定时保存,保存策略。
AOF:把所有的对 Redis 的服务器进行修改的命令都存到一个文件里,命令的集合。
Redis 默认是快照 RDB 的持久化方式。

RDB: 比较适合灾难恢复,定期以快照的形式保存数据,利于拷贝,但是不利于数据丢失的恢复。
AOF: 记录每一条命令,以秒计,所以基本保存所有操作,但是文件较大。
Redis支持同时开启RDB和AOF。


主从机制

基本流程如下:
从节点执行 slaveof masterIP masterPort,保存主节点信息
② 主从建立socket连接
从节点发送ping,主节点回应pong
④ 权限认证通过后,主节点将所有数据发送到从节点,进行数据同步
主节点持续的将写指令发送到从节点,保证主从数据一致

在一定程度上,减少了主节点读的压力,但是没有减少写的压力。
此外,redis2.8 之后,在断线重连后,主数据库只需要将断线期间执行的命令传送给从数据库。


哨兵机制

哨兵的主要作用是:监视redis各节点的运行情况
哨兵会监控所有的主从节点,以及另外的哨兵节点,哨兵的工作流程如下:
① 每隔10s,向所有节点发送info(确保明白各位的变化情况)
② 每隔2s,向所有哨兵发送hello(让各位哨兵明白我还活着,或者我有啥变化没)
③ 每隔1s,向所有节点和哨兵发送ping(看看你们还活着吗)

那如果哨兵监视的主节点挂了,该如何处理呢?
是一个从主观下线客观下线的流程
主观下线:超过时间了,这个哨兵会认为节点主观下线,哨兵会询问别的哨兵,是不是它真的挂了,需不需要恢复。如果别的哨兵也认为该节点主观下线,那么一定数量后,就会执行客观下线的主从切换
客观下线的流程:
① 选出领头哨兵
② 领头哨兵从在线的从数据库中,选择优先级最高的从数据库。优先级可以通过slave-priority选项设置。
③ 如果优先级相同,则从复制的命令偏移量越大(即同步数据越多,数据越新),越优先。
如果以上条件都一样,则选择run ID较小的从数据库。


Raft算法

通过Raft算法,进行领头人的选取
① 发送主数据库客观下线的哨兵向每个哨兵命令,要求对方选择自己为领头。
如果没有选择过其他哨兵,则会同意请求
如果发现有超过半数,且超过quorum的哨兵同意自己的请求,则自己就是哨兵领头。
可能会失败(1、选民不占大多数;2、多个同时当选):失败后是没有heart-beat的,所以会重新开选。


其余琐碎知识

1、哈希槽:每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。
2、Redis事务:单独的隔离操作,其中的所有命令都会被序列化,同时执行过程中无法被打断是一个原子操作
3、Redis一致性:读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应;更新的时候,先删除缓存,然后再更新数据库
4、ACID:
 原子性:事务要么全部完成,要么全部不完成
 一致性:事务开始前后,数据库完整性不变
 隔离性:允许多个并发事务同时对其数据进行读写和修改的能力
 持久性:事务提交之后,对数据库的修改就是永久的
5、Redis 与 memcached 相比有哪些优势?
memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型
redis 的速度比 memcached 快很多 redis 的速度比 memcached 快很多
redis 可以持久化其数据 redis 可以持久化其数据

参考:
1、https://my.oschina.net/u/3906190/blog/3024790
2、面了BAT,我总结了他们会问的Redis基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值