1. 程式人生 > >Redis的安裝及學習

Redis的安裝及學習

mongod 無效 擴展 管理 數據持久化 windows string類型 實例 配置

最近因為做Chatbot項目需要對於NoSQL數據庫進行研究,調研範圍包括MongoDB和Redis。本文將介紹Redis在Windows環境的安裝及如何利用python來操作Redis數據庫。

Redis基礎

redis是Key Value nosql數據庫,數據存儲在內存中,單進程,自己實現了一套異步事件處理,雖然單進程但是數據庫處理很快,異步持久化。

Redis有5種數據類型:

  • string,最基本的數據類型,也是其他四種數據類型的基礎,能存儲任何形式的字符創。適用:存儲信息對象序列化JSON格式。get/set操作
  • hash,哈希類型是一個字符串類型的字段和字段值的映射表,將一個對象存成hash類型占用更少的內存,並且可以更方便的存取整個對象。適用:經常被並發請求的小數據查詢,如:最近五日的超高返商品數據,存儲在Hash中,field=商品ID,value=商品信息(對象序列化JSON格式)。hmset/hgetall操作。
  • list,鏈表類型可以存儲一個有序的字符串列表,用鏈表類型的LPUSH和LPOP或者RPUSH和RPOP實現棧的功能,用LPUSH和RPOP或者RPUSH和LPOP實現隊列的功能。適用:作為信息隊列使用,不斷的Lpush數據到List中,rpop數據出來入庫,或者處理。列表的最大長度為 232 - 1 個元素(4294967295,每個列表的元素超過四十億)。lpush list_name list_element/ lrange list_name start_index end_index
  • set,集合類型。集合元素是唯一的,無序的。集合間可以進行交並差操作。sadd/smembers
  • zset,有序集合類型,在set的基礎上多了一個有序。適用:搜索關鍵字排名。zadd/zrangebyscore

Redis優點

  • 異常快速 : Redis是非常快的,每秒可以執行大約110000設置操作,81000個/每秒的讀取操作。
  • 支持豐富的數據類型 : Redis支持最大多數開發人員已經知道如列表,集合,可排序集合,哈希等數據類型。這使得在應用中很容易解決的各種問題,因為我們知道哪些問題處理使用哪種數據類型更好解決。
  • 支持pub/sub消息訂閱機制,可以用來進行消息訂閱與通知。
  • 支持持久化操作,可以進行aof及rdb數據持久化到磁盤,從而進行數據備份或數據恢復等操作,較好的防止數據丟失的手段。
    *操作都是原子的 : 所有 Redis 的操作都是原子,從而確保當兩個客戶同時訪問 Redis 服務器得到的是更新後的值(最新值)。
    Redis缺點
  • Redis只能使用單線程,性能受限於CPU性能,故單實例CPU最高才可能達到5-6wQPS每秒
  • Redis在string類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用。

Redis註意事項:

  • Redis的鍵命名必須按照"object-type:id:field(表:主鍵:列)"的方式
    具體的命名規範包括:1)內存數據庫,鍵名長度影響有限內存空間,所以命名應該控制長度,簡短易懂;2)大小寫規範;3)根據業務命名,相同業務統一的Key前綴
    數據庫的主要功能是儲存數據,但是對於開發者來說,因為應用程序需求或者數據使用方法的改變,忽略存儲在數據庫中的某些數據是非常正常的,在Redis中同樣如此。你可能忽視期滿某些鍵,也可能因為應用程序的某個模塊棄用而忘掉這些數據。無論哪種情況,Redis都存儲了一些不再使用的數據,平白無故的占用了一些空間。Redis的弱結構數據模式讓集中儲存的內容很難被弄清,除非你為鍵使用一套非常成熟的命名法則。使用合適的命名方法會簡化你的數據庫管理,當你通過你的應用程序或者服務做鍵的命名空間時(通常情況下是使用冒號來劃分鍵名),你就可以在數據遷移、轉換或者刪除時輕松的識別。Redis另一個常見用例是作為熱數據項作的第二數據存儲,大部分的數據被保存在其他的數據庫中,比如PostgreSQL或MongoDB。在這些用例中,當數據從主存儲移除時,開發者經常會忘記刪除Redis中對應的數據。這種存在跨數據存儲的情況下,通常需要做級聯刪除,這種情況下,可以通過在Redis配置保存特定數據項的所有識別符來實現,從而保證數據在主數據庫被刪除後,系統會調用一個清理程序來刪除所有相關副本和信息。
  • 使用合適的數據結構
    不管是內存使用或者是性能,有的時候數據結構將產生很大的影響,下面是一些可以參考的最佳實踐:
    取代將數據存儲為數千(或者數百萬)獨立的字符串,可以考慮使用哈希數據結構將相關數據進行分組。哈希表是非常有效率的,並且可以減少你的內存使用;同時,哈希還更有益於細節抽象和代碼可讀。合適時候,使用list代替set。如果你不需要使用set特性,List在使用更少內存的情況下可以提供比set更快的速度。Sorted sets是最昂貴的數據結構,不管是內存消耗還是基本操作的復雜性。如果你只是需要一個查詢記錄的途徑,並不在意排序這樣的屬性,那麽輕建議使用哈希表。文章Redis鍵值設計以實際的業務需求為例介紹如何使用Redis的數據結構,可以作為參考。
    Redis中一個經常被忽視的功能就是bitmaps或者bitsets(V2.2之後)。Bitsets允許你在Redis值上執行多個bit-level操作,比如一些輕量級的分析。
  • 控制Redis的內存
    Redis內存不足的原因包括三個方面:1)數據不斷累加,無效數據未清理,緩存未設置過期時間;2)存儲數據中包含未使用到字段,整個對象序列化到redis中;3)冷數據,或者根本不會再去使用的無效數據沒有清理。
    解決方法:1)數據區分無效時間,設置過期時間,使無效數據過期;(如:通過日期後綴命名Key);2)區分冷數據,清理掉冷數據;緩存數據從簡,redis key命名從簡,數據字段命名從簡,無效字段不添加在緩存中。

Redis和MongoDB的區別:

  • Redis不適用於長期累加的數據(比如大數據),這些數據應該考慮hbase或者mongodb
  • Redis的讀寫速度比MongoDB表現好,尤其是數據集較大的情況下。
  • MongoDB的特點:(1)面向文檔(2)高性能(3)高可用(4)易擴展(5)豐富的查詢語言,mongoDB適合大數據量的存儲,依賴操作系統VM做內存管理,吃內存也比較厲害,服務不要和別的服務在一起。MongoDB:主要解決海量數據的訪問效率問題,Redis:數據量較小的更性能操作和運算上。

Windows安裝Redis

因為開發環境在Windows下,因此還是選擇在windwos環境下安裝Redis。Redis官方並沒有給出官網安裝包,但有一個開源項目時跟進的,可以在其Github主頁 上下載對應的安裝包。
我下載的是3.0.53的包,新建目錄“c:\redis”,解壓縮安裝包放在這個目錄中。
然後輸入命令就可以看到啟動界面了:

  1. c:\redis>redis-server.exe redis.windows.conf

為了避免避免反復輸入命令麻煩,可以直接註冊成為windows服務:

  1. c:\redis>redis-server --service-install redis.windows.conf --loglevel verbose
  2. c:\redis>net start Redis

安裝完畢,再下載安裝Redis Desktop Manager壓壓驚。
技術分享

python操作Redis

Redis的安裝及學習