Redis

Redis 作为 MySQL 的缓存

1、高性能

2、高并发

数据结构

String SDS(简单动态字符串)缓存对象、常规计数、
List双向链表或压缩列表 (3.2版之后使用quicklist)消息队列
Hash压缩列表或哈希表 (7.0版之后使用listpack)缓存对象、购物车等
Set哈希表或整数集合聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动
ZSet压缩列表或跳表(7.0版之后使用listpack)排序场景,比如排行榜、电话和姓名排序等

线程模式

对Redis是单线程的理解 - 知乎 (zhihu.com)

redis单线程模型,本质上指的是服务端的数据处理阶段,【接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端

redis分客户端和服务端,一次完整的redis请求事件有多个阶段:
1、客户端与服务端建立连接(socked通信方式),可以同时建立多个连接
2、redis读写事件,向服务端发送请求
3、服务端数据处理(接收到请求即开始单线程,返回数据后再开始完成下一个接收到的请求)
4、返回数据

redis很快:
1、基于内存,读写速度很快;
2、基于I/O多路复用;内核一直监听这些 Socket 上的连接请求或数据请求,接收到请求就交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流的效果。
3、避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销

数据持久化

AOF日志每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里先执行命令再写入日志;
AOF 日志过大,会触发AOF 重写机制
RDB快照将某一时刻的内存数据,以二进制的方式写入磁盘;save 命令:主线程生成 RDB 文件,写入 RDB 文件的时间太长,会阻塞主线程
bgsave 命令:创建一个子进程来生成 RDB 文件,这样可以避免主线程的阻塞;执行快照的时候——写时复制技术
混合持久化方式AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据

AOF 重写机制:记录当前数据库中的所有键值对——作为新的AOF文件;由后台子进程 bgrewriteaof 来完成的,主进程可以继续处理命令请求,避免阻塞主进程

big key

定义:(大value)key存储的value很大、hash,list,set等存储value值多

问题:reids单线程,大key阻塞进程;执行相关命令耗时、占用cpu;

解决:可删除(非热key);不可删除(拆分、压缩)

对AOF日志的影响:
AOF三种写回磁盘的策略:Always、Everysec、No。(主要是控制 fsync() 函数的调用时机)

Always(同步写回)大key:主线程执行,阻塞时间久
Everysec(每秒写回)异步执行、不影响
No(操作系统控制写回)永不执行、不影响

AOF写入大key,很快触发AOF重写机制;AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过 ​​fork() 函数​​创建一个子进程来处理任务。(1)创建子进程,复制父进程的页表(包含虚拟地址和映射),越多大key,页表越大,可能阻塞进程;(2)发生写时复制(复制物理地址),因为大key占用物理地址大,父进程可能发送阻塞

Redis四种模式

单机模式、

主从模式、

将一台Redis服务器的数据,复制到其他的Redis服务器;
数据的复制是单向的,只能由主节点(master)到从节点(slave);

主从复制:
共有三种模式:全量复制、基于长连接的命令传播、增量复制(和repl_backlog_size 大小有关系)。

replication bufferrepl backlog buffer
 全量复制阶段和增量复制阶段增量复制阶段
连接断开,删除缓存,从节点重新连接,重新开始全量复制环形结构,缓存区满了会覆盖

主从数据不一致:
1、因为主从节点间:异步
2、应对:保证主从网络连接良好;开发一个外部程序来监控主从节点间的复制进度 。

哨兵模式、

实现主从节点故障转移:监控、选主、通知

1、主节点故障?
主观下线:多个哨兵判断(哨兵通常以集群形式出现,哨兵节点至少要有 3 个)
客观下线(只适用于主节点):

2、主从切换
选举出了哨兵 leader 后,挑选出一个状态良好、数据完整的从节点,发送 SLAVEOF no one 命令,转换为「主节点」。

可能导致数据丢失的两种情况:

  • 异步复制同步丢失;(master宕机时由于部分数据未同步到slave导致的数据丢失)
  • 集群产生脑裂

解决:
# 要求至少一个salve,完成数据同步,才认为数据写入成功
min-slaves-to-write 1

# 配置复制和不同延迟不能超过10秒
min-slaves-max-lag 10
 

集群模式

在多个 Redis 节点之间进行数据共享的设施

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值