redis簡單了解

2021-08-21 12:00:41 字數 1797 閱讀 7432

redis 是單程序程式

redis與memcache對比

1、redis能夠用不同的兩種方式將資料寫入磁碟(時間點轉儲即快照;只追加檔案aof,將所有修改了資料庫的命令都寫入乙個只追加檔案裡面,使用者可以根據資料的重要程度,將只

追加寫入設定為從不同步、每秒同步一次或者每寫入乙個命令就同步一次)

2、redis除了能夠儲存普通的字串鍵外還能儲存其他4種的資料結構,而memcache只能儲存普通的字串鍵

一、事務

在事務處理過程中,可能會遇到兩種命令錯誤:

1、命令可能無法排隊,因此在呼叫exec之前可能存在錯誤

2、在呼叫exec之後,命令可能會失敗,

對應錯誤的處理方式:

在2.6.5版本之前在redis 2.6.5之前,其行為是只使用命令的子集來執行事務,以防客戶端呼叫exec,而不考慮之前的錯誤。新的行為使得將事務與管道進行混合變得更加簡單,這樣整個事務就可以同時傳送,同時讀取所有的響應。

在2.6.5版本之後伺服器將記住在積累命令期間發生了錯誤,並將拒絕執行在執行過程中返回錯誤的事務,並自動丟棄事務。

執行exec後發生的錯誤不會以特殊的方式處理:所有其他命令都將執行,即使在事務中某些命令失敗。

從上面兩點可以看出redis不支援回滾:

在事務期間redis命令可能會失敗,但是redis將執行事務的其餘部分,而不是回滾

1、redis 命令只會因為錯誤的語法而失敗(並且這些問題不能在入隊時發現),或是命令用在了錯誤型別的鍵上面:這也就是說,從實用性的角度來說,失敗的命令是由程式設計錯誤造成的,而這些錯誤應該在開發的過程中被發現,而不應該出現在生產環境中。

2、因為不需要對回滾進行支援,所以 redis 的內部可以保持簡單且快速。 有種觀點認為 redis 處理事務的做法會產生 bug , 然而需要注意的是, 在通常情況下, 回滾並不能解決程式設計錯誤帶來的問題。 舉個例子, 如果你本來想通過 incr 命令將鍵的值加上 1 , 卻不小心加上了 2 , 又或者對錯誤型別的鍵執行了 incr , 回滾是沒有辦法處理這些情況的。

總之這塊被認為是開發人員自己的錯誤造成的

watch指令用於為redis事務提供檢查和設定(check-and-set, cas)行為。

redis-chech-aof工具

二、發布/訂閱(

客戶端訂閱乙個或多個頻道而不必發出命令,儘管他能訂閱和取消訂閱其他頻道。訂閱和取消訂閱的響應被封裝在傳送的訊息中,以便客戶端只需要讀乙個連續的訊息流,其中第乙個元素表示訊息型別。

推送訊息的格式

訊息格式包括三個元素 。 

第乙個元素是訊息型別:

subscribe: 表示我們成功訂閱到響應的第二個元素提供的頻道。第三個引數代表我們現在訂閱的頻道的數量。

unsubscribe:表示我們成功取消訂閱到響應的第二個元素提供的頻道。第三個引數代表我們目前訂閱的頻道的數量。當最後乙個引數是0的時候,我們不再訂閱到任何頻道。當我們在pub/sub以外狀態,客戶端可以發出任何redis命令。

message: 這是另外乙個客戶端發出的發布命令的結果。第二個元素是**頻道的名稱,第三個引數是實際訊息的內容。

資料庫與作用域:

發布/訂閱與key所在空間沒有關係,它不會受任何級別的干擾,包括不同資料庫編碼。 發布在db 10,訂閱可以在db 1。 如果你需要區分某些頻道,可以通過在頻道名稱前面加上所在環境的名稱(例如:測試環境,演示環境,線上環境等)

模式匹配訂閱

redis 的pub/sub實現支援模式匹配。客戶端可以訂閱全風格的模式以便接收所有來自能匹配到給定模式的頻道的訊息。

三、redis的sentinel(哨兵)

redis的哨兵為redis提供了高可用

簡單了解Redis

什麼是redis?redis是乙個開源的使用ansi c語言編寫 支援網路 可基於記憶體亦可持久化的日誌型 key value資料庫,並提供多種語言的api。redis有哪些優點?1 支援多種資料型別。常見的 string 字串 list 列表 hash 雜湊 sets 集合 sorted set ...

簡單了解Redis

redis是一種支援key value等多種資料結構的儲存系統,可用於快取,事件發布,訊息佇列等場景,支援多種資料型別 string hash list set zset。而且基於記憶體,可持久化,並且能夠通過sentinel哨兵和自動分割槽cluster實現高可用。補充 redis中list集合是...

redis事務的簡單了解

redis對事務的支援目前還比較簡單。redis只能保證乙個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令。由於redis是單執行緒來處理所有client的請求的所以做到這點是很容易的。一般情況下redis在接受到乙個client發來的命令後會立即處理並 返回處理...