1. 程式人生 > >Redis資料型別與持久化方式

Redis資料型別與持久化方式

Redis是一個開源的記憶體儲存的資料結構資料庫,它可以作為資料庫,快取,訊息佇列。支援多種資料格式。和mc相比具有資料持久化的能力。並能通過哨兵和叢集提高可用性。

它具有以下資料型別:

 

字串型別

在Redis裡面採用的是SDS來封裝char[]的,這個也是redis的最小儲存單元。RedisObject是redis的基本資料型別,對照C#中的Object物件。而字串型別就是在RedisObject基礎上封裝的程式碼。

其中的incr,incrby命令可以實現原子自增,用它來生成唯一訂單號比較方便。因為如果在當前伺服器生成一個訂單號,如果面對高併發的情況有可能會產生兩個相同的訂單號。

 

不同型別均可呼叫的命令:

Exists key可以檢測鍵是否存在

Type key 可返回key對應值的儲存型別

Expires key seconds 可設定key的存在時間

Persist key 可設定key為持久化

TTL key 返回key剩餘的存在時間

 

列表型別

List型別按照插入順序排序,最常用作訊息佇列,常用的就四個方法LPOP,LPUSH,RPOP,RPUSH。我們可將能夠非同步處理的請求放到訊息佇列中去。

 

雜湊型別

Redis中的雜湊型別,可以用來存放物件了,類似與C#中的Dictionary以鍵值對的形式存放資料

 

集合型別

集合型別是雜湊型別的“簡易版”,它比Dictionary節省很多記憶體消耗,類似C#的HashSet型別。底層資料結構和雜湊型別類似,只是value為null,所以key不能重複,且無序。

 

有序集合型別

有序集合和雜湊型別的最大區別就是範圍查詢時它的時間複雜度為O(logN) + M,後者為O(N)。它的每一個字串元素都會關聯到score,裡面的元素總是通過score進行排序。

 

事務

Multi,Exec,Discard,Watch是Redis的事務命令。事務一般分為3個步驟:生成事務(Multi),生成命令

(各種Redis命令),執行命令(Exec)。

Redis中沒有回滾的說法。因為Redis命令只有在因語法錯誤而失敗,或是命令用在了錯誤型別的鍵上面。這也就是說是由於程式設計錯誤造成的。而且不支援回滾也可以讓Redis保持快速且簡單。

 

假如在你執行命令的過程中,要修改的那些資料發生了改變,那我執行的命令有什麼用呢?所以Watch命令就是為此而生的。Watch命令的作用就是假如在multi之後exec之前這段時間裡key的值發生了修改,那麼exec就會失敗。你只需要在multi之前用watch去監視key就行。

 

訂閱/釋出

很多的訊息佇列都有這個功能,比較常見的場景是郵件訂閱,比如你訂閱了某個作者的部落格,如果博主發了文章那麼那些訂閱了它的讀者就能收到通知。

常見的命令就兩個:subscribe channel 訂閱頻道,publish channel message 給指定頻道釋出訊息

還有一個就是psubscribe pattern 訂閱複合模式的頻道。

 

持久化

Redis有兩種持久化方式RDB(也叫快照)和AOF。快照指的是每隔一段時間就對你的資料進行一次儲存。AOF則會記錄每一次對伺服器的寫入操作,當伺服器重啟時會重新執行這些命令恢復原始資料,而且redis還會對aof檔案進行重寫防止過大。

你可以同時開啟兩種持久化方式。

快照的優點是可以最大化redis的效能,缺點是可能會丟失幾秒鐘甚至幾分鐘的資料。

AOF的優點是讓redis更加耐久,預設是每秒儲存一次資料,缺點是AOF的速度可能會比快照慢一些。

 

快照的配置方法可為:在配置檔案SNAPSHOTTING節中,標記save seconds change,後面再設定以下儲存的位置即可。

AOF的配置方法為:在配置檔案的APPEND ONLY MODE節中,設定appendonly yes(預設配置),再指定儲存檔案,儲存頻率,這裡推薦採用預設配置appendfsync everysec即可。