读书笔记-redis历险和实战3
Redis持久化,一种是快照,一种是aof日志,快照是全量备份,是内存数据的二进制序列化,在存储上紧凑,而日志是连续的增量备份,是内存数据修改的指令记录文本,时间越长,日志变得越大,需要使用bgwriteaof对aof日志重写(原理是开辟子进程对内存遍历,转换一些列Redis的操作指令,序列号到一个新的aof日志文件中。序列化完成后再将操作期间产生的增量aof日志追加到新的aof日志文件中,追加完成立即替换旧的aof日志文件),给aof日志瘦身。快照要去Redis进行io操作,可IO操作不能使用多路复用api,意味着Redis一边服务线上请求,一边进行文件IO,这样拖累服务器性能,使用操作系统多进程cow(copy on write)机制实现持久化。aof日志进行写操作时是将内容写到内核为文件描述符分配的一个内存缓存里面,然后内核会异步将脏数据写到文件中,这时突然宕机,没来得及刷到磁盘中,可以用glibc提供的fsync函数强制将内存日志刷到磁盘,可以配置,一般1s执行一次。使用方法两者都用,在Redis4版本中叫混合持久化,aof只重放快照丢失的那部分数据,这样很快,接近aof重放慢的问题,也能弥补快照丢失大量数据的缺点。
Redis中管道不是服务器特性,而是客户端通过改变读写的顺序,一次性发送多条指令,然后服务器端一次性发送多个结果,这样节省了网络流量。
在Redis中假如一个事务中有一条指令失败,另一条指令可以成功,所以Redis事务不具备原子性,具有隔离性,不被其他事务打断。
Redis中乐观锁叫watch机制(假如值被别的事务改了,则另一个事务在执行exec指令的时候返回NULL),,悲观锁叫set dd jj expires 5 nx;注意:Redis禁止在multi和exec之间执行watch指令,而必须在multi之前盯住关键变量,否则报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?