Redis的前前后后左左右右

本文介绍了Redis作为内存型键值对数据库的特点,包括其高性能、数据结构、单线程设计以及适用场景如缓存、分布式锁等。还探讨了缓存穿透、击穿和雪崩的解决方案。此外,文章详细讲解了主从复制、哨兵模式和持久化策略(RDB和AOF)。
摘要由CSDN通过智能技术生成

douyin LSY_HELLOWORLD,已成功入职互联网大厂,请关注我,了解非科班的程序员的工作生活把

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

优点

运行在内存上,读写性能好,10W/S
支持数据持久化
支持事务
支持主从复制
数据结构丰富

缺点

数据库容量受到物理内存的限制
不具备自动恢复功能
主机宕机,从机未能及时同步,导致数据不一致问题
较难支持在线扩容

单线程

Redis是单线程,但并不是只有一个线程,只是网络IO中只有一个线程,因此不需要考虑并发安全性,其他模块,离例如AOF和RDB使用另外线程。
为什么要是设计成单线程?
绝大部分请求是存粹的内存操作,非常快速,足够了
避免了不必要的上下文切换和竞争
非阻塞IO,内部采用epoll多路复用

Redis内部使用文件事件处理器
文件事件处理器包含四部分
多个socket
IO多路复用程序
文件事件分派器
事件处理器(连接应答,命令请求,命令回复)

多个socker对应不同请求,多路复用监听不同的socker,把其放入队列中,文件事件分派器从队列中取出一个事件,交给事件处理器处理。

适用情况

热点数据进行缓存
分布式锁
消息队列
排行榜
计数器
特定限时数据的存放

缓存穿透,缓存击穿和缓存雪崩

缓存穿透是访问的数据在缓存和数据库里都没有,会不断穿过缓存重复访问数据库。
解决办法,对对访问进行校验,不合法的直接返回;如果数据库中没有,则缓存里存一个空置;布隆过滤器;

缓存击穿是数据库中有该数据,但是缓存中该热点数据过期,导致同时访问该数据的请求都越过缓存访问数据库。
解决办法,让热点数据永不过期;

缓存雪崩是一大批数据同时过期,查询这批数据的访问都到了数据库。
解决办法,设置随机过期时间;热点数据永不过期;对于集群部署,将热点数据分布在不同缓存中;应用层限流;多级缓存。

主从复制、读写分离

主库master负责写,同时对数据持久化,从节点根据主库的日志进行重写,实现同步。主库负责写,从库负责读。

哨兵模式

哨兵负责监控redis集群主库的状态,在主库宕机时,要从slave中选择一个升级为master,通知客户端新的master。

RDB快照

1 save命令
主进程来创建RDB快照,创建完成之前,主进程阻塞
2 bgsave命令
主进程fork一个子进程,在fork子进程的时候是阻塞的,由子进程来负责RDB快照

AOF日志

将写入操作记录到日志里实现持久化。
策略三种:
always,每执行一次写入操作就记录到日志中,性能最低
everysec,每秒钟写入一次,性能适中
no,由操作系统决定什么时候写入,性能较高
在服务宕机的时候,丢失数据的程度由低到高。

AOF重写

在AOF文件大到一定程度时,进行重写,将命令合并,写入另一个文件,写完的时候替换原来的,以此来缩小文件大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSY_HELLOWORLD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值