Redis八股总结

4核8g下,redis可支持10w的qps,mysql只能支持5000的

1、redis的事务机制?

并发编程中的事务和数据库的事务的原子性不太一样,数据库的原子性指要么全部成功要么全部失败,提供回滚机制;但并发编程中的原子性指执行过程中不可被拆分、不可被中断。

redis以multi标记事务块开始,然后可输入一些语句,然后遇到exec命令后执行以上输入的所有命令,在执行之前会检查语句是否有错(检查的类似编译时异常),如果有则直接拒绝执行,没有则开始执行,如果执行过程中有错(类似运行时异常的概念),不会影响后续语句执行。

区别于lua,

1、lua如果执行过程中有错,则会影响后续命令的执行。

2、前后依赖问题,lua中后面的命令可以以来前面的结果,而redis事务是exec后独立执行,后面的不能依赖前面的结果

redis事务为啥不支持回滚?

Mysql确实因为并发操作会发生一些结果的异常,但redis是单线程模型,错误往往是一些操作类型错误,语法错误,资源不足等在开发时就可以避免的问题,不需要回滚。回滚的设计会大大增加复杂度,redis是一个高性能的系统,注重速度,回滚影响性能。redis一般做缓存,不太需要复杂的事务机制,如果需要可直接在数据库层面实现。

2、redis内存淘汰策略

内存空间不足,必须进行内存的淘汰,也可以不进行淘汰,当插入数据时拒绝插入,但可进行查询操作。淘汰策略可分为在过期键中进行淘汰,和所有范围内淘汰。

lru:淘汰最久未使用的

lfu:淘汰最少使用的

过期删除策略:惰性删除+定期删除

惰性删除:不主动删除过期键,每次从数据库访问 key 时,都检测 key 是否过期,如果过期则删除该 key。

定期删除:每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查,并删除其中的过期key。

为啥不立即删除?

内存不紧张但cpu资源紧张时,删除操作占用cpu资源,没必要删

3、redis主从同步

完全同步

从节点向主节点发sync,主节点向从节点发送rdb文件,从节点清空本地数据,加载rdb,在此期间的命令主节点记录在一个repl_backlog_buffer文件中,等从节点加载后,再执行该文件中的操作,进行同步。

增量同步

从节点网络恢复后,从向主发psync,包含从节点的offset记录自己读到的位置,主节点自己也维护了一个当前数据的offset记录自己写道的位置,repl_backlog_buffer是一个环形缓冲区,主节点根据两个offset判断主从差异是否包含在这个环形缓冲区中,如果在,进行增量同步,将增量数据放到一个缓冲区传送给从节点;如果已经不能覆盖所有差异,则进行完全同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值