提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、Redis为什么速度快?
1、基于内存进行数据存储,减少了磁盘io的开销,读写数据的速度快。
2、因为Redis是一个IO多路复用模型,一个线程可以监听多个文件描述符,不在网络io上花费过多时间。
3、redis是一个单线程模型,避免了线程间切换及争用资源锁(同步机制)的开销。
(在存取数据、网络连接模块是单线程的)
4、redis的数据结构都进行了优化,存取数据的速度都更加快。
二、Redis的应用场景有哪些?
1、存储热门数据,减轻数据库压力。
2、作为简单的消息队列,实现异步操作。
3、利用Redis的原子性自增操作,可以作为一个计数器,帮助实现一个限速器,比如当用户点击速度过快时,超过一定阈值就限制用户访问,以避免给服务端带来压力。
4、利用redis的setnx操作实现分布式锁。当用户利用setnx操作创建一个锁a时,如果返回1,则说明创建成功,当前资源处于空闲状态,用户就可以对这个共享资源进行操作,操作完后释放锁;当返回0时,说明锁被其他用户占用,则继续等待过一段时间再请求。
三、Redis怎样作为队列?
1、可以简单地使用List数据结构,结合LPUSH、LPOP两个操作实现数据的先进先出功能。
2、延时队列的实现:使用sortedset作为数据结构,具体的信息作为key,存入的时间戳记录为score。调用zadd方法生产消息,消费者调用zrangebyscore方法获取N秒之前的队列数据进行轮询处理。
四、Redis的主从复制原理
1、全量复制
(1)当启动一个节点时,他会发送一个SYNC命令给主节点,尝试与主节点进行同步。
(2)主节点收到命令后,生成一份RDB快照,在此期间,将收到的写操作指令记录在内存缓冲区中。
(3)主节点将RDB快照传送给从节点。
(4)从节点加载收到的RDB快照。
(5)主节点将缓冲区保存的写指令传输给从节点。
(6)从节点执行写指令。
2、增量复制
情况一:主节点每执行一些写指令,就会将这些指令发送给从节点,从节点就会发生增量复制。
情况二:当从节点中途发生了网络故障失去与主节点的连接等情况时,从节点会向主节点发送一个PSYNC指令,以获取从上次同步以来的增量同步。
五、Redis过期键的删除策略
1、被动删除:当访问数据时发现key已过期,则将这个数据删除。
2、主动删除:定时去检查数据,随机检查一些键,如果键过期了,就将其删除。
3、内存不够时清理:redis有最大内存限制,当数据存储超过最大内存时,就会根据redis设置的内存淘汰策略(最近最少使用、最不经常使用,、随机)进行删除。
六、Redis数据结构
1、hashmap
数组加链表
(常用方法:
HSET myhash key value 向myhash这个哈希表中存入数据
HGET myhash key 取出myhash这个哈希表中键值为key的数据
)
2、String
底层为自己定义的SDS数据结构,包括字符数组、字符串长度、分配给字符数组的长度等信息,可以动态调整自身的长度。
(常用方法:
SET mykey “hello” 新建一个字符串
GET mykey 获取字符串值
STRLEN mykey 获取字符串长度
)
3、List
底层为list数据结构,封装了头节点,尾节点、链表长度
4、set(无序集合)
SADD myset member1
5、sortedset(有序集合)
ZADD myset score1 member1
哈希表加跳表的结构组成,跳表使得查找数据的时间复杂度为log(n)。
跳表:通过建立多级上层索引,加快查找元素的过程。