面试中问到Redis持久化的原理,本篇在做详细解答

我们知道redis是一个 高效的分布式内存数据库 ,由于是操作内存所以性能非常之快,通常用它来做分布式缓存,用来提高微服务的高性能,但是因为是内存操作,所以当出现服务器故障,断电等情况就会造成 内存数据丢失 ,不可恢复,因此redis 引入了持久化机制来将内存数据写入磁盘,从而保障了Redis的数据不被丢失。

Redis有两种持久化的方式,一种是RDB,另外种是AOF。

RDB是将Redis内存中数据的快照存储在磁盘内,是Redis的默认持久化方案。

RDB持久化默认有三种策略

可在redis.conf中配置,会以一段时间内达到指定修改的次数为规则来触发快照操作,快照文件名为dump.rdb。每当Redis服务重启的时候都会从该文件中把数据加载到内存中。

在60秒内有10000次操作即触发RDB持久化。

没有满足第一种条件时,在900秒内有1次操作即触发RDB持久化。

没有满足第二种条件时,在300秒内有10次操作即触发RDB持久化。

RDB持久化除了可以根据配置中的策略来触发外,还可以使用save和bgsave命令手动来触发。这两个命令的区别在于save会阻塞服务器进程。在执行save命令的过程中,服务器不能处理任何请求,但是bgsave(background save,后台保存)命令会通过一个子进程在后台处理数据RDB持久化。本质上save和bgsave调用的都是rdbSave函数,所以Redis不允许save和bgsave命令同时执行,当然这也是为了避免RDB文件数据出现不一致性的问题。

每次都是一个大文件,备份写入IO操作笔记大,很容易耗时,影响进程资源使用。

如果最近一次进程崩溃,那么最近一次数据备份后的数据就被丢失。

文件直接就可以当冷备使用

AOF(Append Only File)以独立日志的方式记录每次的写命令,可以很好地解决了数据持久化的实时性。系统重启时可以重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区,然后根据对应策略写入硬盘。

AOF的实现流程有三个步骤

步骤一

把命令追加到AOF缓冲区,

步骤二

将缓冲区的内容写入程序缓冲区

步骤三

将程序缓冲区的内容写入文件

当AOF持久化功能处于开启状态时,服务器每执行完一个命令就会将命令以协议格式追加写入redisServer结构体的aof_buf缓冲区。而在服务重启的时候会把AOF文件加载到缓冲区中。

AOF有 三种触发机制

·always:每次发生数据变更都会被立即记录到磁盘,性能较差,但数据完整性比较好。

·everysec:每秒钟将aof_buf缓冲区的内容写入AOF文件,如果宕机,就会有1秒内的数据丢失。

·no:将数据同步操作交给操作系统来处理,性能最好,但是数据可靠性最差。在配置文件中设置appendonly=yes后,若没有指定apendfsync,默认会使用everysec选项。

写入指令随着时间的推移,记录了很多重复的指令,导致数据量非常大。

RDB优先级高于AOF

RDB小,AOF较大

RDB慢,AOF快

RDB快,AOF慢




  • 浠涔堟槸Redis鎸佷箙鍖
    绛旓細Redis瀵鎸佷箙鍖栫殑鏀寔涓昏鏄氳繃RDB鍜孉OF鏂囦欢鏉ヨ繘琛屾寔涔呭寲鐨勩傚叾涓璕DB鎸佷箙鍖栨槸鍦鎸囧畾鐨勬椂闂撮棿闅斿唴鐢熸垚鏁版嵁闆嗙殑鏃堕棿鐐瑰揩鐓с傝孉OF鎸佷箙鍖栬褰曠殑鏄湇鍔″櫒鎵ц鐨勬墍鏈夊啓鎿嶄綔鍛戒护锛屽湪鏈嶅姟鍣ㄥ惎鍔ㄧ殑鏃跺欙紝閫氳繃閲嶆柊鎵ц杩欎簺鍛戒护鏉ヨ繕鍘熸暟鎹泦鐨勩侫OF鏂囦欢涓殑鍛戒护鍏ㄩ儴浠edis鍗忚鐨勬牸寮忔潵淇濆瓨锛屾柊鐨勫懡浠や細琚拷鍔犲埌鏂囦欢鐨...
  • 浜笢闈㈣瘯瀹:Redis 杩欎簺鎴戝繀闂
    绛旓細鎸佷箙鍖栫殑鎰忎箟鍦ㄤ簬鏁呴殰鎭㈠鏁版嵁澶囦唤(鍒板叾浠栨湇鍔″櫒)+鏁呴殰鎭㈠(閬囧埌鐏鹃毦,鏈烘埧鏂數,鐢电紗琚垏) AOF 鍙湁涓涓,Redis 涓鐨勬暟鎹槸鏈変竴瀹氶檺閲忕殑,鍐呭瓨澶у皬鏄竴瀹氱殑,AOF 鏄瓨鏀惧啓鍛戒护鐨,褰撳ぇ鍒颁竴瀹氱殑鏃跺,AOF 鍋 rewrite 鎿嶄綔,灏变細鍩轰簬褰撴椂 redis 鍐呭瓨涓殑鏁版嵁,鏉ラ噸鏂版瀯閫犱竴涓洿灏忕殑 AOF 鏂囦欢,鐒跺悗灏嗘棫鐨勮啫鑳寰堝ぇ鐨勬枃浠...
  • redis 涓ょ鎸佷箙鍖鍒嗗埆鍙粈涔
    绛旓細绗竴绉嶆柟娉昮ilesnapshotting锛氶粯璁redis鏄細浠ュ揩鐓х殑褰㈠紡灏嗘暟鎹鎸佷箙鍖鍒扮鐩樼殑锛堜竴涓簩杩涘埗鏂囦欢锛宒ump.rdb锛岃繖涓枃浠跺悕瀛楀彲浠ユ寚瀹氾級锛鍦閰嶇疆鏂囦欢涓殑鏍煎紡鏄細save N M琛ㄧず鍦∟绉掍箣鍐咃紝redis鑷冲皯鍙戠敓M娆′慨鏀瑰垯redis鎶撳揩鐓у埌纾佺洏銆傚綋鐒舵垜浠篃鍙互鎵嬪姩鎵цsave鎴栬卋gsave锛堝紓姝ワ級鍋氬揩鐓с傚伐浣滃師鐞嗙畝鍗曚粙缁嶄竴涓嬶細...
  • redis涓ょ鎸佷箙鍖鏂瑰紡鐨勫尯鍒槸浠涔
    绛旓細4銆佽繃鏈熼敭RDB鎸佷箙鍖栧湪鍐欏叆鎴栬鍙栨椂浼氬拷鐣ヨ繃鏈熼敭AOF鎸佷箙鍖栦笉浼氬拷鐣ヨ繃鏈熼敭锛屽湪閿鎯版у垹闄ゆ垨瀹氭湡鍒犻櫎鏃跺悜aof鏂囦欢杩藉姞涓鏉″垹闄ゅ懡浠5銆佹枃浠跺ぇ灏廟DB鎸佷箙鍖栭殢鐫瀛樺偍鏁版嵁閲忕殑鍙樺寲鑰屽彉鍖(鏍规嵁涓嶅悓鏁版嵁绫诲瀷鏈変笉鍚岀殑鏁版嵁鍘嬬缉浼樺寲)AOF鎸佷箙鍖栭殢鐫鎵ц鍛戒护鐨勫鍔犺屽鍔(閫氳繃aof閲嶅啓杩涜浼樺寲)鏇村redis鐩稿叧鎶鏈煡璇嗭紝...
  • 涓鑸鍦鑷姩鍖栭┚椹堕」鐩腑redis鐨勬寔涔呭寲鏈哄埗浣跨敤浠涔?
    绛旓細鍦≧edis涓紝鎻愪緵涓ょ鎸佷箙鍖鏈哄埗锛歊DB锛圧edis DataBase锛夊拰AOF锛圓ppend Only File锛夈俁DB锛歊DB鏄竴绉嶅揩鐓ф寔涔呭寲鏈哄埗锛屽畠鍙互灏哛edis鐨勫唴瀛樻暟鎹懆鏈熸у湴鍐欏叆纾佺洏涓婄殑涓涓枃浠朵腑銆俁DB鎸佷箙鍖栨満鍒堕氳繃fork鍑轰竴涓瓙杩涚▼鏉ュ畬鎴愭寔涔呭寲鎿嶄綔锛岃繖涓瓙杩涚▼浼氬厛灏嗗唴瀛樻暟鎹啓鍏ュ埌涓涓复鏃舵枃浠朵腑锛岀劧鍚庡啀鐢ㄨ繖涓复鏃舵枃浠...
  • 鍒氬垰闂垜,redis鎸佷箙鍖鏁版嵁鍒版暟鎹簱鏄庝箞鎿嶄綔鐨
    绛旓細鍙﹀涓绉嶆柟寮忎负閫掑鐨勬柟寮,灏嗕細寮曡捣鏁版嵁鍙樺寲鐨勬搷浣, 鎸佷箙鍖鍒版枃浠朵腑, 閲嶅惎redis鐨鏃跺,閫氳繃鎿嶄綔鍛戒护,鎭㈠鏁版嵁.姣忔鎵ц鍐欐搷浣滃懡浠や箣鍚,閮戒細灏嗘暟鎹啓鍒皊erver.aofbuf涓俛ppendfsync always appendfsync everysec appendfsync no 褰撻厤缃负always鐨勬椂鍊欙紝姣忔server.aofbuf涓殑鏁版嵁鍐欏叆鍒版枃浠朵箣鍚,鎵嶄細杩斿洖缁欏鎴...
  • redis鏁版嵁鎸佷箙鍖濡備綍瀹炵幇
    绛旓細浜屻丄OF鎸佷箙鍖鏂规鍏堟妸鍛戒护杩藉姞鍒版搷浣滄棩蹇楃殑灏鹃儴锛屼繚瀛樻墍鏈夌殑鍘嗗彶鎿嶄綔銆1銆佺浉姣斾簬RDB鎸佷箙鍖栨柟妗堢殑浼樼偣锛氾紙1锛夋暟鎹潪甯稿畬鏁达紝鏁呴殰鎭㈠涓㈠け鏁版嵁灏戯紙2锛夊彲瀵瑰巻鍙叉搷浣滆繘琛屽鐞2銆佸浣曞紑鍚疉OF鎸佷箙鍖栨ā寮忓皢redis.conf 閰嶇疆鏂囦欢涓殑appendonly 鍙傛暟鏀逛负yes 鍚庯紝鍒檙edis寮濮嬪惎鍔ˋOF鏁版嵁鎸佷箙鍖栨ā寮忚缃瓵OF鍚屾鐨勬柟寮...
  • 缂撳瓨-redis 涓夌妯″紡鎼缓鍜岃繍琛屽師鐞
    绛旓細鍦╮edis杩涜maketest鏃跺欎細鍑虹幇涓绯诲垪鐨勫紓甯革紝鏈夊涓嬭В鍐虫柟妗堬細鐢╮edis-server鍚姩涓涓媟edis锛屽仛涓浜涘疄楠屾病浠涔堟剰涔夈傝鎶妑edis浣滀负涓涓郴缁熺殑daemon杩涚▼鍘昏繍琛岀殑锛屾瘡娆$郴缁熷惎鍔紝redis杩涚▼涓璧峰惎鍔紝鎿嶄綔涓嶈蛋濡備笅锛歊DB鍜孉OF鏄痳edis鐨勪竴绉嶆暟鎹鎸佷箙鍖栫殑鏈哄埗銆 鎸佷箙鍖 鏄负浜嗛伩鍏嶇郴缁熷湪鍙戠敓鐏鹃毦鎬х殑绯荤粺鏁呴殰鏃...
  • Redis鎸佷箙鍖栫殑鍑犵鏂瑰紡鈥斺擱DB娣卞叆瑙f瀽
    绛旓細Redis 鐨勮鍐欓兘鏄鍦鍐呭瓨涓,鎵浠ュ畠鐨勬ц兘杈冮珮,浣嗗湪鍐呭瓨涓殑鏁版嵁浼氶殢鐫鏈嶅姟鍣ㄧ殑閲嶅惎鑰屼涪澶,涓轰簡淇濊瘉鏁版嵁涓嶄涪澶,鎴戜滑闇瑕佸皢鍐呭瓨涓殑鏁版嵁瀛樺偍鍒扮鐩,浠ヤ究 Redis 閲嶅惎鏃惰兘澶熶粠纾佺洏涓仮澶嶅師鏈夌殑鏁版嵁,鑰屾暣涓繃绋嬪氨鍙仛 Redis 鎸佷箙鍖銆俁edis 鎸佷箙鍖栦篃鏄 Redis 鍜 Memcached 鐨勪富瑕佸尯鍒箣涓,鍥犱负 Memcached 涓嶅叿澶囨寔涔呭寲鍔熻兘...
  • redis鐨AOF鎸佷箙鍖栫殑閰嶇疆浠ュ強宸ヤ綔娴佺▼
    绛旓細杩樻槸鍦╮edis.conf涓壘灞炴ppendonly 璇ュ睘鎬 redis涓殑鏁版嵁鍏跺疄鏄湁闄愮殑锛屽緢澶氭暟鎹彲鑳戒細鑷姩杩囨湡锛屼篃鏈夊彲鑳戒細琚敤鎴峰垹闄わ紝杩樻湁鍙兘浼氳redis鐢ㄧ紦瀛樻竻闄ょ殑娓呴櫎绠楁硶娓呴櫎鎺夈俽edis浼氫笉鏂殑娣樻卑鏃х殑鏁版嵁锛屽彧浼氱暀涓嬩竴浜涘父琚娇鐢ㄧ殑鏁版嵁鍦ㄥ唴瀛樹腑銆傛墍浠ワ紝灏变細鏈変竴浜涘凡缁忚娓呴櫎鎺夌殑鏁版嵁鎵ц鍛戒护杩樺湪AOF鏃ュ織鏂囦欢涓紝...
  • 扩展阅读:redis面试必会6题经典 ... 几率大的redis面试题 ... redis 缓存穿透 击穿 雪崩 ... radis面试题 ... redis面试题2024 ... redis集群三种方式面试题 ... redis面试题大全 ... redis常见面试题及答案 ... redis为什么能支持高并发 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网