Redis的常见知识点

Redis:
一、使用Redis有哪些好处?
(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
二、为什么redis需要把所有数据放到内存中?
    Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。
    如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。
三、Redis是单进程单线程的?
    redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。 
四、redis主从复制?
    redis主从配置比较简单,基本就是在从节点配置文件加上:slaveof 192.168.33.130 6379
主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。
    redis复制过程如下:
1、slave server启动连接到master server之后,salve server主动发送SYNC命令给master server
2、master server接受SYNC命令之后,判断,是否有正在进行内存快照的子进程,如果有,则等待其结束,否则,fork一个子进程,子进程把内存数据保存为文件,并发送给slave server
3、master server子进程进程做数据快照时,父进程可以继续接收client端请求写数据,此时,父进程把新写入的数据放到待发送缓存队列中
4、slave server 接收内存快照文件之后,清空内存数据,根据接收的快照文件,重建内存表数据结构
5、master server把快照文件发送完毕之后,发送缓存队列中保存的子进程快照期间改变的数据给slave server,slave server做相同处理,保存数据一致性
6、master server 后续接收的数据,都会通过步骤1建立的连接,把数据发送到slave server

需要注意:slave server如果因为网络或其他原因断与master server的连接,当slave server重新连接时,需要重新获取master server的内存快照文件,slave server的数据会自动全部清空,然后再重新建立内存表,这样会让slave server 启动恢复服务比较慢,同时也给master server带来较大压力,可以看出redis的复制没有增量复制的概念,这是redis主从复制的一个主要弊端,在实际环境中,尽量规避中途增加从库redis2.8之前不支持增量,到2.8之后就支持增量了!

原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。    这是一个典型的分布式读写分离模型。我们可以利用master来插入数据,slave提供检索服务,这样可以有效减少单个机器的并发访问数量。 读写分离架构的缺陷在于,不管是Master还是Slave,每个节点都必须保存完整的数据,如果在数据量很大的情况下,集群的扩展能力还是受限于单个节点的存储能力,而且对于Write-intensive类型的应用,读写分离架构并不适合。


redis:会周期性的把数据写入磁盘或者修改操作写入追加的记录文件,并在基础上实现了master-slave(主从)同步。
重要的特点:实现数据持久化
    1.使用RDB快照的方式,将内存中的数据不断写入磁盘;会出现数据丢失
    2.使用AOF日志方式,记录每次更新的日志。即每条会使Redis内存数据发生改变的命令都会追加到一个log文件中,也就是说这个log文件就是Redis的持久化数据。

缺陷:由于主从之间是异步传输,所以存在丢失数据的风险。
    例如:客户端写主节点B,B回复客户端OK,B传送写操作到从节点B1、B2和B3. 由于B在回复客户端前,不会等待从节点的确认。所以如果此时B发生故障,虽然从节点会被推举出一个主节点,但是还没有传送到从节点的数据将
永远丢失了。

六、redis常见性能问题和解决方案
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
七、redis集群:

     Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,没有中心节点,各个节点地位一致,具有线性可伸缩的功能。

redis集群群优点:
1.主从备份,防止主机宕机。
2.读写分离,分担master的任务。
3.任务分离,分担工作与计算。
----
方案
1.master下面有两个孩子,两个孩子直接指向master(树).
2.线性,第一个孩子指向master,第二个孩子指向第一个孩子.

原理
主从通信:slave启动之后连接master,slave发出同步命令,slave拿到dump出的rdb
快照,之后再拿缓冲aof队列中的日志数据进行数据填充。
---master配置:
1.关闭rdb快照(备份工作交给slave)
2.可以开启aof

Redis Cluster
1.分布式存储架构:
    节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。
2.数据的放置策略:
    Redis Cluster将整个key的数值域分成16384个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是16384    
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统。

例:--replicas 1 表示我们希望为集群中的每个主节点创建一个从节点,由于sedis的集群最少需要3个主节点,如果我们每个主节点需要一个从节点,那么最少需要6台机器(或者说6个实例)。
145、147、148这3个将成为主节点,140、141、143将依次称为主节点的从节点

16384个哈希槽,那么每一个哈希槽中存的key 和 value是什么?
当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。
你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,
你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。

redis cluster(集群)
3.0之后的功能,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。
Redis集群提供了以下两个好处
1、将数据自动切分(split)到多个节点
2、当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。
    一个 redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。
    集群中的每一个节点负责处理一部分哈希槽。
集群中的主从复制
    集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。
    这样集群就不会因为一个主节点的下线而无法正常工作
注意:
1、如果某一个主节点和他所有的从节点都下线的话,redis集群就会停止工作了。redis集群不保证数据的强一致性,在特定的情况下,redis集群会丢失已经被执行过的写命令
2、使用异步复制(asynchronous replication)是redis 集群可能会丢失写命令的其中一个原因,有时候由于网络原因,如果网络断开时间太长,redis集群就会启用新的主节点,之前发给主节点的数据就会丢失。

3.一个主节点可以有多个从节点。
当从节点首次或者重连主节点时,主节点会进行后台存储,即将数据snapshot为磁盘上的rdb文件,
也将rdb文件发给从节点进行存储。
后台存储过程中以及之后的产生的写操作,主节点都会异步的发送到从节点,从节点执行这些操作以保证数据同步。
默认情况下,从节点对客户端只提供读服务。

==================================

七、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
   相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值