NoSql之相逢Redis

      爲了應對海量數據的到來,出現了非關係型數據庫NoSql,爲了在互聯網中得以生存和發展,我們不得不去掌握一兩個NoSql數據庫的使用。當然我們不可能全部都掌握,只要掌握幾個有代表性的就行。這裏我們接觸一下redis,希望以此來理解NoSql給我們帶來的好處。

1、是什麼

      Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。

2、有什麼

  • 字符串(Strings)

      字符串是Redis值的最基礎的類型。Redis字符串是二進制安全的,這意味着一個Redis字符串可以包含任何種類的數據,例如一個JPEG圖像或者一個序列化的Ruby對象。 一個字符串值最多可以保存512M字節的內容。

  • 列表(Lists)

      Redis列表是簡單的字符串列表,按照插入順序排序。 Redis list的應用場景非常多,我們不僅可以輕鬆地實現最新消息排行等功能,還可以利用Lists的PUSH操作,將任務存在Lists中,然後工作線程再用POP操作將任務取出進行執行。

  • 哈希(Hashes)

      Redis Hashes是字符串字段和字符串值之間的映射,因此他們是展現對象的完美數據類型。

  • 集合(Set)

      是一個無序的字符串集合. 你可以以O(1)的時間複雜度 (無論集合中有多少元素時間複雜度都是常量)完成添加,刪除,以及測試元素是否存在。 Redis 集合擁有令人滿意的不允許包含相同成員的屬性。多次添加相同的元素,最終在集合裏只會有一個元素。 實際上說這些就是意味着在添加元素的時候無須檢測元素是否存在。

      set特殊之處在於set是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重複數據時,set是一個很好的選擇。比如在微博應用中,每個人的好友存在一個集合(set)中,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。Redis還爲集合提供了求交集、並集、差集等操作,可以非常方便的實現。

  • 有序集合(Sorted Sets)

      與set類似,是一個沒有重複元素的字符串集合。區別是set不是自動有序的,而sorted set可以通過用戶額外提供一個優先級(score)的參數來爲成員排序,並且是插入有序的,即自動排序。當你需要一個有序的並且不重複的集合列表,那麼 可以選擇sorted set數據結構,比如twitter 的public timeline可以以發表時間作爲score來存儲,這樣獲取時就是自動按時間排好序的。

3、幹什麼

      衆多語言都支持Redis,因爲Redis交換數據快,所以在服務器中常用來存儲一些需要頻繁調取的數據,這樣可以大大節省系統直接讀取磁盤來獲得數據的I/O開銷,更重要的是可以極大提升速度。

      拿大型網站來舉個例子,比如a網站首頁一天有100萬人訪問,其中有一個板塊爲推薦新聞。要是直接從數據庫查詢,那麼一天就要多消耗100萬次數據庫請求。上面已經說過,Redis支持豐富的數據類型,所以這完全可以用Redis來完成,將這種熱點數據存到Redis(內存)中,要用的時候,直接從內存取,極大的提高了速度和節約了服務器的開銷。

4、優缺點

  • 優點
性能極高 – Redis能支持超過 100K+ 每秒的讀寫頻率。
豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並後的原子性執行。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
  • 缺點
持久化

      redis直接將數據存儲到內存中,可通過兩種方式持久化:定時快照(snapshot)和基於語句的追加(AppendOnlyFile,AOF)。Snapshot方法是指每隔一段時間,將整個數據庫的數據寫到磁盤上,很明顯,每次都是寫全部數據,代價非常高;而AOF方法只追蹤變化的數據,這類似與mySql的binlog方法,但追加log可能過大,同時所有操作均需要重新執行一遍,恢復速度緩慢。

耗內存

      儘管redis對一些數據結構採用了壓縮算法存儲,但是佔用內存量還是很高。

總結:

      今天我們通過redis的學習,知道NoSql的重要性,而且在以後的學習中避免不了與大數據的接觸,所以學會對數據的處理變得尤爲重要,我們的奮鬥歷程也纔剛剛開始。

發佈了179 篇原創文章 · 獲贊 360 · 訪問量 62萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章