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快照文件,再此期间,主库可以正常接收客户端的请求,它会把这些可能会修改数据集的请求暂缓在内存中,当持久化完毕后,主库会将最新的快照文件发送给存库,从库将接收的数据进行持久化,后加载到内存中。主库再将 之前暂缓的指令发送给存库。

相关推荐
Flying_Fish_roe7 分钟前
linux-安全管理-防火墙与网络安全
linux·数据库·oracle
A_cot19 分钟前
Redis 的三个并发问题及解决方案(面试题)
java·开发语言·数据库·redis·mybatis
2401_847056551 小时前
Altium Designer脚本工具定制
网络·数据库
神仙别闹1 小时前
基于Python+SQLite的课程管理系统
数据库·sqlite
掐指一算乀缺钱1 小时前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
少年负剑去2 小时前
django分发路由
数据库·django·sqlite
飞翔的佩奇2 小时前
xxl-job适配sqlite本地数据库及mysql数据库。可根据配置指定使用哪种数据库。
数据库·spring boot·mysql·sqlite·xxl-job·任务调度
芊言芊语2 小时前
分布式缓存服务Redis版解析与配置方式
redis·分布式·缓存
吱吱鼠叔2 小时前
MATLAB数据文件读写:1.格式化读写文件
前端·数据库·matlab
小哇6662 小时前
spring-TransactionTemplate 编程式事务
数据库·spring