redis 数据完整性
redis為保證數據的完整性、故障恢復, 提供了多種方式; 這多種方式可以組合使用。
回寫:
0)redis命令, 主動回寫磁盤
-----save: 同步回寫,阻塞所有后續讀寫請求, 直至save操作完成。 數據量大時可能假死很長時間。
-----bgsave: 異步回寫,主進程fork子進程, 子進程復制了主進程的內存地址空間;子進程回寫磁盤、寫完自動退出。 數據量大時仍然比較耗時, 而且需要占用一倍的內存空間。
ps, 這是單機版。。。
數據持久化:
1) RDB。? snapshot方式。 redis按照規則達到一定條件時,fork出子進程, 子進程復制了redis server的完整內存空間。? 子進程將內存數據全量保存到磁盤上。 但兩次快照之間的會丟掉。 類似于bgsave
2)AOF。 類似于mysql的binlog, redis將每條寫命令都append到AOF文件中。
replication:
4)? Master--Slave。 redis的Master和Slave之間有一套交互協議,Slave連上Master后發送SYNC, Master fork子進程復制全量數據發送給Slave、并將這段以及后續的寫命令發給Slave; Slave據此重構出數據。? Slave每次重連Master, 都會導致一個全量拷貝、傳輸。
只需要在A上用slaveof B 即可; B就是A的master了。
因此,較理想的架構就是
Master-------Slave;
Master上關閉RDB/AOF等; Slave上開啟RDB/AOF。? 恢復時AOF的優先級比RDB高。
為解決Master的單點, 可以主動同時寫多個Master。
presharding在線給redis擴容。 需要在低峰時段或者短暫停服。
http://blog.chinaunix.net/uid-20682890-id-3603246.html
http://www.cnblogs.com/stephen-liu74/archive/2012/02/23/2364717.html
http://in.sdo.com/?p=1187
總結
以上是生活随笔為你收集整理的redis 数据完整性的全部內容,希望文章能夠幫你解決所遇到的問題。