NoSql_Redis问题解决方案

2022-07-30  本文已影响0人  Eqo

Redis是一个基于内存的键值类型的nosql数据库
在大数据领域,主要使用 单机结构和 分片集群
但是单点Redis会存在以下几种问题:

根据以上几点,Redis给出了解决防范

数据恢复问题

1.1 Redis 持久化之RDB持久化

将redis内存中的数据,全都保存到磁盘当中

触发条件:
主动触发 :

RDB条件:
Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 900 1  
save 300 10  
save 60 10000 
1.2 Redis 持久化之AOF 持久化

在两次RDB持久化之间,很可能出现数据丢失问题,因此在两次RDB持久化之间,增加了日志,存储持久化世界内的事务性操作,看是AOF持久化
将事务性操作 增删改操作写入日志当中
AOF默认是关闭的,需要修改redis.conf配置文件来开启AOF:

 # 700行 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率也可以通过redis.conf文件来配:

ADF与AOF对比
企业当中这两个配合使用

image.png

并发能力问题

主从架构实现读写分类,通常读的的压力比写的压力大,类似双十一都在疯狂浏览商品信息.
主从架构解决的是读的并发,没有解决写的高并发
单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。


image.png

使用主从集群,一个master接收读写请求,多个slave接收读请求.实现读写分类,然后数据同步到其他机器

主从机器内的数据都是一样的,每个节点访问的数据都是一样的,类似于zk.
三个实例没有任何关系,配置主从:replicaofslaveof(5.0以前)命令,有临时和永久两种模式
多台redis机器声明ip,指定主从

故障恢复问题

Redis提供哨兵(Sentinel)机制来实现主从集群的自动故障恢复

image.png

哨兵集群的功能:

存储能力问题

redis提供了分片集群用于解决海量存储和高并发写的问题
分片集群,解决了高并发,容错,存储等问题.其他集群模式在公司可能回是过度模式.
原理:

image.png

问题1: 多个master,客户端发送的请求是怎样分配给哪个master的?
redis会把数据映射到插槽上,共有0~16383共16384个插槽(hash slot)上,把插槽平均分给每个master个
根据每个key的值的通过crc 转换成整形 然后hash取余 ,根据余数分配到,拥有该卡槽的 master


image.png

问题2 如何将同一类数据固定的保存在同一个Redis实例?
数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:
key中包含"{}",且“{}”中至少包含1个字符,“{}”中的部分是有效部分
key中不包含“{}”,整个key都是有效部分

key中有{}就只读{}内的内容.
key= {user1}123456

一类数据使用相同的有效部分,如key都以{typeId}为前缀

上一篇 下一篇

猜你喜欢

热点阅读