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即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章