redis总结

redis 总结
1.redis是单线程吗
java 复制代码
Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,
这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,
比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
2.redis既然是单线程,为什么还可以运行的很快
java 复制代码
因为它所有的数据都在内存中,所有的运算都是内存级别的运算,
而且单线程避免了多线程的切换性能损耗问题。
正因为 Redis 是单线程,所以要小心使用 Redis 指令,
对于那些耗时的指令(比如keys),一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。
3.Redis 单线程如何处理那么多的并发客户端连接?

redis利用了epoll来实现IO的多路复用,将连接的信息和事件放在队列中,再依次放在文件事务分派器中,事务分派器会将会将事件发送给事务处理器。

4.redis持久化
redis持久化的方式有两种
1.RDB快照

在默认情况下,Redis将内存数据库快照保存在文件名称为dump.rdb的二进制文件中,也可以设置在固定的时间内至少有多少次的改动,内存数据库快照保存一次。

也可以手动输入指令保存数据集,指令save或者bgsave,每次执行指令都会新生成一个以.rdb结尾的文件,并将原有的文件覆盖。

注意:bgsave在数据库快照时依旧可以正常处理写指令
优点:

适合大规模的使用,恢复的速度快。

缺点:

一旦宕机,那么服务器将丢失最近写入、且未保存在快照中的数据。

2.AOF

将修改的每一句指令记录在appendonly.aof文件中,当redis重启时,程序通过执行AOF文件中的指令达到数据重构的效果。

可以配置多久同步磁盘

appendfsync always:每次有新的指令追加AOF文件就同步一次,非常慢相对也非常的安全
appendfsync everysec:每秒同步一次,即便宕机也丢失的是那一秒的数据
appendfsync no:将数据交给操作系统来处理,更快,但不安全
3.混合持久化
  1. 上述两种方式各有优劣,重启Redis,若选择RDB则会面临数据大量丢失,若选择AOF性能较与RDB而言会慢许多,为解决该问题,出现了混合持久化。

  2. 混合持久化,在AOF重写时,不单单是将内存数据转化成指令写入到AOP文件中,它是将重写这一刻前的数据进行RDB快照处理,并将快照内容和增量的AOF指令存在一起,写入到新的AOF文件中,新AOF文件一开始并不以.aof命名,待重写完新的AOF文件才会改名同时覆盖原有的文件。于是在Redis重启时,先加载RDB的内容,后重放AOF增量就可以完全替代之前的AOF全量文件重放。效率大大提高。

4.主从复制

当给master配置了一个save ,不管从库是否第一次连接主库,他都会发送PSYNC给master,当master接收的PSYNC命令,会在后台进行数据持久化,通过bgsave指令,生成最新的rdb快照文件,再此期间,主库可以正常接收客户端的请求,它会把这些可能会修改数据集的请求暂缓在内存中,当持久化完毕后,主库会将最新的快照文件发送给存库,从库将接收的数据进行持久化,后加载到内存中。主库再将 之前暂缓的指令发送给存库。

相关推荐
学Linux的语莫6 分钟前
linux中,redis分布式集群搭建
linux·redis·分布式·mysql
m0_7482350739 分钟前
MySQL——操作
数据库·mysql·oracle
飞翔沫沫情1 小时前
《快速部署Mysql-slave 容器,实现高效主从同步》
数据库·docker·mysql主从同步
SelectDB技术团队1 小时前
一文了解多云原生的现代化实时数仓 SelectDB Cloud
大数据·数据库·数据仓库·云原生·云计算
木卫二号Coding2 小时前
docker-开源nocodb,使用已有数据库
数据库·docker·开源
StarRocks_labs2 小时前
StarRocks 存算分离在得物的降本增效实践
数据库·数据仓库·湖仓
敲代码敲到头发茂密3 小时前
基于 LangChain 实现数据库问答机器人
数据库·人工智能·语言模型·langchain·机器人
虾球xz3 小时前
游戏引擎学习第64天
redis·学习·游戏引擎
一入程序无退路3 小时前
c语言传参数路径太长,导致无法获取参数
linux·c语言·数据库
陌夏微秋4 小时前
STM32单片机芯片与内部47 STM32 CAN内部架构 介绍
数据库·stm32·单片机·嵌入式硬件·架构·信息与通信