Redis相关知识点

 

1、什么是redis

   是一个基于内存的高性能key-value数据库

2、redis特点

   1)因为是内存数据库,则性能非常出色

   2)可持久化(定时异步从内存中flush到硬盘)

   3)支持多种数据类型(Strings、Lists、Sets、Sorted Set、hashs)

   4) redis是单进程单线程(利用队列技术将并发访问变为串行访问)

   5)支持主从模式(slave启动时会连接master来同步数据,读写分离)

3、redis的回收策略

            volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰

            volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰

            volatile-random:从已设置过期时间的数据集中任意选择数据淘汰

            allkeys-lru:从数据集中挑选最近最少使用的数据淘汰

            allkeys-random:从数据集中任意选择数据淘汰

            no-enviction:禁止驱逐数据

4、Redis集群原理

对象保存到Redis之前先经过CRC16哈希到一个指定的Node上,例如Object4最终Hash到了Node1上。

每个Node被平均分配了一个Slot段,对应着0-16384,Slot不能重复也不能缺失,否则会导致对象重复存储或无法存储。

Node之间也互相监听,一旦有Node退出或者加入,会按照Slot为单位做数据的迁移。例如Node1如果掉线了,0-5640这些Slot将会平均分摊到Node2和Node3上,由于Node2和Node3本身维护的Slot还会在自己身上不会被重新分配,所以迁移过程中不会影响到5641-16384Slot段的使用。

 

简单总结下哈希Slot的优缺点:

 

缺点:每个Node承担着互相监听、高并发数据写入、高并发数据读出,工作任务繁重

优点:将Redis的写操作分摊到了多个节点上,提高写的并发能力,扩容简单。

5、一致性hash算法

先来看看一致性 Hash 算法的一些特点:

 

  1. 构造一个 0 ~ 2^32-1 大小的环。
  2. 服务节点经过 hash 之后将自身存放到环中的下标中。
  3. 客户端根据自身的某些数据 hash 之后也定位到这个环中。
  4. 通过顺时针找到离他最近的一个节点,也就是这次路由的服务节点。
  5. 考虑到服务节点的个数以及 hash 算法的问题导致环中的数据分布不均匀时引入了虚拟节点。

6、Redis主从复制原理

  1. 从节点执行 slaveof 命令
  2. 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制
  3. 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点
  4. 连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连
  5. 如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。
  6. 权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。
  7. 当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。

 

1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;

2. 当Master收到SYNC命令之后,会做两件事:

a) Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件);

b) Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);

3. 当Master在后台把数据保存到快照文件完成之后,Master会把这个快照文件传送给Slave,而Slave则把内存清空后,加载该文件到内存中;

4. 而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步;

5. Master/Slave此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致;

6. 需要注意的是Master和Slave之间一旦发生重连都会引发全量同步操作。但在2.8之后版本,也可能是部分同步操作。

 

部分复制

2.8开始,当Master和Slave之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。

Master端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;同时,Master和Slave之间都维护一个复制偏移量(replication offset)和当前Master服务器ID(Master run id)。当网络断开,Slave尝试重连时:

a. 如果MasterID相同(即仍是断网前的Master服务器),并且从断开时到当前时刻的历史命令依然在Master的内存缓冲区中存在,则Master会将缺失的这段时间的所有命令发送给Slave执行,然后复制工作就可以继续执行了;

b. 否则,依然需要全量复制操作;

 

Redis 2.8 的这个部分重同步特性会用到一个新增的 PSYNC 内部命令, 而 Redis 2.8 以前的旧版本只有 SYNC 命令, 不过, 只要从服务器是 Redis 2.8 或以上的版本, 它就会根据主服务器的版本来决定到底是使用PSYNC 还是 SYNC :

 

如果主服务器是 Redis 2.8 或以上版本,那么从服务器使用 PSYNC 命令来进行同步。

如果主服务器是 Redis 2.8 之前的版本,那么从服务器使用 SYNC 命令来进行同步

7、redis使用场景

一:缓存——热数据

热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。

二:计数器

诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能!。

三:队列

四:位操作(大数据处理)

五:分布式锁与单线程机制

 

8、缓存雪崩、缓存穿透、缓存预热、缓存更新概念以及解决方法

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值