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

相关推荐
编程、小哥哥几秒前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
weixin_4493108411 分钟前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
Cachel wood1 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy1 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy2 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill2 小时前
安装和卸载Mysql(压缩版)
数据库·mysql
Humbunklung2 小时前
一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
数据库·mysql·c#
PGCCC3 小时前
【PGCCC】postgresql 缓存池并发设计
数据库·缓存·postgresql
小爬虫程序猿3 小时前
如何利用Python解析API返回的数据结构?
数据结构·数据库·python
wowocpp4 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu