Redis基礎知識雜談

目錄

 

一、什麼是redis

二、關於redis的一些基本內容

 


一、什麼是redis

redis是一種鍵值型的非關係型數據庫,對數據的存取是在內存當中,並且支持將數據持久化到磁盤文件當中。由於性能出色、易於集羣拓展、支持數據的持久化,redis很適合作爲緩存數據庫使用。

二、關於redis的一些基本內容

(一)redis的幾種數據類型

1、字符串String:可以包含任何數據,比如jpg圖片或者序列化的對象,一個鍵最大能存儲512M

2、字典Hash:適合存儲對象,並且可以像數據庫中update一個屬性一樣只修改某一項屬性值

應用場景:存儲、讀取、修改用戶屬性

3、列表List:鏈表(雙向鏈表),增刪快

4、集合Set:是string類型的無序集合。集合是通過hashtable實現的,概念和數學中個的集合基本類似,可以交集,並集,差集等等,set中的元素是沒有順序的。所以添加,刪除,查找的複雜度都是O(1)。

應用場景:在微博中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis還爲集合提供了求交集、並集、差集等操作,可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。

5、有序集合SortedSet:將Set中的元素增加一個權重參數score,元素按score有序排列,數據插入集合時,已經進行天然排序。

應用場景:1、排行榜 2、帶權重的消息隊列

(二)redis的事物

1、redis事務可以打包一次執行多個命令, 並且帶有以下兩個重要的保證:

事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。

2、需要注意的是,和關係型數據庫不同的是,redis的事物並不支持回滾操作。

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

(三)redis的持久化

1、RDB持久化

RDB持久化,即是快照方式持久化保存redis的數據。Redis會把數據集dump到dump.rdb文件中,具體的配置可以在redis的.conf文件中查看並修改到,在文件中搜索save,可以看到。具體參數示例:

save 900 1 (在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump內存快照。)

save 300 10 (在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump內存快照)

2、AOF持久化

AOF持久化是指對增量保存redis的數據,就是保存redis的修改內容。具體有三種同步方式

appendfsync always (每次有數據修改發生時都會寫入AOF文件)

appendfsync everysec (每秒鐘同步一次,該策略爲AOF的缺省策略)

appendfsync no      (從不同步。高效但是數據不會被持久化)

並且,redis並不是只支持一種持久化方式,而是兩種持久化方式可以結合起來一起使用。我的建議是,AOF使用每秒同步一次的策略,RDB使用“save 300 10 ”參數。

總結,RDB做鏡像全量持久化,aof做增量持久化。因爲bgsave會耗費較長時間,不夠實時,在停機的時候會導致大量丟失數據,所以需要aof來配合使用。在redis實例重啓時,優先使用aof來恢復內存的狀態,如果沒有aof日誌,就會使用rdb文件來恢復。

 

內容如有不當之處,歡迎指正。以上。

 

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