天天看點

Redis常用的幾種資料類型以及持久化機制

簡介

Redis是一種面向“key-value”類型資料的分布式NoSQL資料庫系統,支援五種資料類型格式:**

String,hash,list,set ,socket set 。​​​一鍵擷取Redis指令參考手冊完整版​​

Redis指令參考手冊完整版:

Redis常用的幾種資料類型以及持久化機制
  • 字元串(String)
Redis中的字元串是一個位元組序列。 常用操作指令有get、set等
  • 清單(list)
Redis清單知識字元串清單,按插入順序排序。您可以向Redis清單的頭部或尾部添加元素,也可以用作隊列
  • 散列/哈希(hash)
Redis散列/哈希是鍵值對的集合。Redis散列/哈希是字元串字段和字元串值之間的映射,但字段值隻能是字元串,不支援其他類型。是以,他們用于表示對象。應用場景:存儲使用者的基本資訊等.
  • 無序集合類型(set)
redis的set是String類型的無序集合,set元素最大可以包含2的32次方-1個元素。利用set集合類型,我們可以快速取出n個key之間的并集、交集、差集等.應用場景:取出兩個QQ号中的共同的好友數。
  • 有序集合類型(sorted set)

和set一樣,sorted

set也是string類型元素的集合,是一個沒有重複元素的字元串集合。因為元素是有序的,是以使用有序集合你可以以非常快的速度(O(log(N)))添加,删除和更新元素,它也很擅長排序。應用場景:擷取所有使用者投票數最高的前10名

為什麼要持久化

為了能夠重用Redis資料,或者防止系統故障,我們需要将Redis中的資料寫入到磁盤空間中,即持久化。

RDB持久化和AOF持久化

Redis提供了兩種不同的持久化方法

  • RDB持久化(原理是将Reids在記憶體中的資料庫記錄定時dump到磁盤上的RDB持久化)
  • AOF(append only file)持久化(原理是将Reids的記錄檔以追加的方式寫入檔案)

RDB持久化

RDB是Redis的預設持久化方式。 找到Redis的配置檔案:redis.conf
#當在規定的時間内,Redis發生了寫操作的個數滿足條件,會觸發發生BGSAVE指令。
#save <seconds> <changes>
#當使用者設定了多個save的選項配置,隻要其中任一條滿足,Redis都會觸發一次BGSAVE操作,比如:900秒之内至少一次寫操作、300秒之内至少發生10次寫操作、60秒之内發生至少10000次寫操作都會觸發發生快照操作
save 900 1
save 300 10
save 60 10000      

AOF(append only file)持久化

在Redis.conf配置中設定如下:

#redis預設關閉AOF機制,可以将no改成yes實作AOF持久化
appendonly no
#AOF檔案
appendfilename "appendonly.aof"
#AOF持久化同步頻率,always表示每個Redis寫指令都要同步fsync寫入到磁盤中,但是這種方式會嚴重降低redis的速度;everysec表示每秒執行一次同步fsync,顯示的将多個寫指令同步到磁盤中;no表示讓作業系統來決定應該何時進行同步fsync,Linux系統往往可能30秒才會執行一次
#appendfsync always
appendfsync everysec
#appendfsync no

#在日志進行BGREWRITEAOF時,如果設定為yes表示新寫操作不進行同步fsync,隻是暫存在緩沖區裡,避免造成磁盤IO操作沖突,等重寫完成後在寫入。redis中預設為no  
no-appendfsync-on-rewrite no   
#目前AOF檔案大小是上次日志重寫時的AOF檔案大小兩倍時,發生BGREWRITEAOF操作。  
auto-aof-rewrite-percentage 100  
#目前AOF檔案執行BGREWRITEAOF指令的最小值,避免剛開始啟動Reids時由于檔案尺寸較小導緻頻繁的BGREWRITEAOF。  
auto-aof-rewrite-min-size 64mb  
#Redis再恢複時,忽略最後一條可能存在問題的指令(因為最後一條指令可能存在問題,比如寫一半時突然斷電了)
aof-load-truncated yes      

Redis4.0新增RDB-AOF混合持久化格式,在開啟了這個功能之後,AOF重寫産生的檔案将同時包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于記錄已有的資料,而AOF格式的記憶體則用于記錄最近發生了變化的資料,這樣Redis就可以同時兼有RDB持久化和AOF持久化的優點(既能夠快速地生成重寫檔案,也能夠在出現問題時,快速地載入資料)。