Redis 基础和使用场景

Redis为什么这么快:

  1. Redis是使用内存存储的,没有磁盘IO开销,读写速度快

  2. 单线程实现(Redis6.0以前),避免了多线程之间线程的切换和锁竞争的开销

  3. IO多路复用,使用单线程来轮询描述符,将数据库的操作都转成了事件,不在网络I/O上浪费过多的事件

  4. 高效的数据结构:redis对每种数据类型底层都做了优化,使的速度更快

Redis为什么使用单线程:

  1. 单线程可以避免过多的上下文切换开销。程序始终运行在单个线程内,没有多线程切换的场景。

  2. 避免同步机制的开销。如果redis选择多线程,需要考虑数据同步问题,则必然会引入某些同步机制,会导致在操作数据过程中带来更多的开销,增加程序复杂度的同时降低性能

  3. 实现简单,维护方便。如果使用多线程,需要考虑线程安全问题,使其变得复杂

Redis应用场景有哪些:

  1. 缓存热点数据,缓急数据库压力

  2. 利用redis原子性的自增操作,可以实现计数器的功能,比如统计用户点赞数,用户访问数等

  3. 作为简单的消息队列,实现异步操作

  4. 限度器,可用于限制某个用户访问某个接口的频率,比如秒杀场景,用于防止用户快速点击带来的不必要的压力

  5. 好友关系,利用集合的一些命令,比如交集、并集、差集等,实现共同好友、共同爱好之类的功能

Redis是如何实现消息队列的:

  1. 使用List,生产者lpush,消费者rpop

  2. 发布订阅模式。类似MQ的主题模式。

  3. redis自带的stream消息队列

Redis主从复制的原理:

主数据库可以进行读写操作,当数据变化时会自动同步到从数据库

从数据库只可读,会接收主数据库数据进行同步

主从复制的原理:

  1. 当启动一个从节点时,会发送一个PSYNC 命令给主节点

  2. 如果从节点第一次连接到主节点,会触发一次全量复制。此时主节点会启动一个后台线程,生成一份RDB快照文件

  3. 同时还会将从客户端client新收到的所有写命令缓存在内存中。RDB文件生成后,主节点会将RDB文件发送给从节点,从节点会将RDB文件写入到本地磁盘,然后再从本地磁盘加载到内存中

  4. 接着主节点会将内存中缓存的写命令发送到从节点,开始同步数据

  5. 如果从节点跟主节点之间网络出现故障,连接断开了,会自动重连,连接之后主节点仅会将部分缺失的数据同步给从节点

Redis 过期key的删除策略:

被动删除。在访问key时,如果发现key过期,便会将其删除

主动删除。定期清除key,每次清理会遍历所有的DB,从db随机取出20个key,如果过期就删除,否则就继续清理下一个DB

内存不足时清理。Redis有最大内存的限制,通过maxmemory参数可以设置最大内存,当使用的内存超过了设置的最大内存,就要进行内存释放,在进行内存释放的时候,会按照配置的淘汰策略清理内存

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-03-05 18:38  迷路小孩  阅读(111)  评论(0)    收藏  举报