redis學習筆記

来源:http://www.cnblogs.com/linuxboke/archive/2016/05/06/5466987.html
-Advertisement-
Play Games

Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集 ...


Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API

 

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、list(鏈表)、set(集

合)、zset(sorted set --有序集合)和hash(哈希類型)與memcached一樣,為了保證效率,數據都是緩存在記憶體中。區別的是

redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追

加的記錄文件,並且在此基礎上實現了master-slave(主從)同步

 

Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器

redis和memcached對處理併發請求都不存在性能瓶頸,性能瓶頸可能在網卡上

官方的bench-mark數據:結果:讀的速度是110000次/s,寫的速度是81000次/s 

 

安裝:yum -y install epel-release    yum -y install redis-3.0.7-2.el6.remi.x86_64.rpm  

配置文件: etc/redis.conf    vim /etc/redis.conf

 

如果是基於本地通信,修改開啟 unixsocket /tmp/redis.sock文件和它的許可權unixsocketperm 700可以提高性能

 

幾個參數介紹:

databases:指定支持多少個資料庫,在預設的集群中(分散式場景中)只使用0號庫,不支持使用多個庫

tcp-keepalive 0    關閉tcp持久連接功能 

save 900 1    900秒中有一次數據的修改,將修改的數據同步到磁碟的數據文件(持久化RDB)
save 300 10
save 60 10000   

可以註釋掉此功能

requirepass  設置客戶端連接後進行任何其他指定前需要使用的密碼   登陸後使用AUTH  password 完成認證 

 

登陸命令   redis-cli -h HOSTIP     例如:redis-cli -h 127.0.0.1或redis-cli

啟動服務:service redis start      

redis的命令獲取幫助help

 

redis的持久化:

  RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)

  AOF 持久化記錄伺服器執行的所有寫操作命令,併在伺服器啟動時,通過重新執行這些命令來還原數據集

 

RDB 的優點:  父進程在保存 RDB 文件時唯一要做的就是 fork 出一個子進程,然後這個子進程就會處理接下來的所有保存工作,父

進程無須執行任何磁碟 I/O 操作。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快,可以根據備份策略,將數據還原到不同的

時間點

 

RDB 的缺點:  Redis 都要 fork() 出一個子進程,並由子進程來進行實際的持久化工作。 在數據集比較龐大時, fork() 可能會非

常耗時,造成伺服器在某某毫秒內停止處理客戶端; 如果數據集非常巨大,並且 CPU 時間非常緊張的話,那麼這種停止時間甚至可能

會長達整整一秒。 雖然 AOF 重寫也需要進行 fork() ,但無論 AOF 重寫的執行間隔有多長,數據的耐久性都不會有任何損失,一旦發

生故障停機可能會丟失好幾分鐘的數據

 

AOF 的優點:   AOF 的預設策略為每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的性能,並且就算發生故障停機,

也最多只會丟失一秒鐘的數據,AOF 文件是一個只進行追加操作的日誌文件(append only log), 因此對 AOF 文件的寫入不需要進

行 seek , 即使日誌因為某些原因而包含了未寫入完整的命令(比如寫入時磁碟已滿,寫入中途停機,等等), redis-check-aof 工

具也可以輕易地修複這種問題,Redis 可以在 AOF 文件體積變得過大時,自動地在後臺對 AOF 進行重寫: 重寫後的新 AOF 文件包

含了恢復當前數據集所需的最小命令集合。 整個重寫操作是絕對安全的,因為 Redis 在創建新 AOF 文件的過程中,會繼續將命令追加

到現有的 AOF 文件裡面,即使重寫過程中發生停機,現有的 AOF 文件也不會丟失。 而一旦新 AOF 文件創建完畢,Redis 就會從舊

AOF 文件切換到新 AOF 文件,並開始對新 AOF 文件進行追加操作。AOF 文件有序地保存了對資料庫執行的所有寫入操作, 這些寫

入操作以 Redis 協議的格式保存, 因此 AOF 文件的內容非常容易被人讀懂, 對文件進行分析(parse)也很輕鬆。 導出(export)

AOF 文件也非常簡單: 舉個例子, 如果你不小心執行了 FLUSHALL 命令, 但只要 AOF 文件未被重寫, 那麼只要停止伺服器, 移

除 AOF 文件末尾的 FLUSHALL 命令, 並重啟 Redis , 就可以將數據集恢復到 FLUSHALL 執行之前的狀態。

 

AOF 的缺點:對於相同的數據集來說,AOF 文件的體積通常要大於 RDB 文件的體積。根據所使用的 fsync 策略,AOF 的速度可能會

慢於 RDB 。 在一般情況下, 每秒 fsync 的性能依然非常高, 而關閉 fsync 可以讓 AOF 的速度和 RDB 一樣快, 即使在高負荷之下

也是如此。 不過在處理巨大的寫入載入時,RDB 可以提供更有保證的最大延遲時間(latency)。AOF 在過去曾經發生過這樣的 bug

: 因為個別命令的原因,導致 AOF 文件在重新載入時,無法將數據集恢覆成保存時的原樣。 (舉個例子,阻塞命令 BRPOPLPUSH

就曾經引起過這樣的 bug 。) 測試套件里為這種情況添加了測試: 它們會自動生成隨機的、複雜的數據集, 並通過重新載入這些數

據來確保一切正常。 雖然這種 bug 在 AOF 文件中並不常見, 但是對比來說, RDB 幾乎是不可能出現這種 bug 的

 

RDB 和 AOF ,我應該用哪一個?  

  如果數據沒有安全性的要求。建議關閉持久化的功能,如果要求非常高建議都開啟,折中的辦法是開啟AOF

以上redis的持久化參考鏈接:http://my.oschina.net/davehe/blog/174662

 

  註意:持久本身不能取代備份;還應該制定備份策略,對redis資料庫定期進行備份

RDB與AOF同時啟用

  (1) BGSAVE和BGREWRITEAOF不會同時執行

    (2) 在Redis伺服器啟動用於恢複數據時,會優先使用AOF

 

在配置文件中將appendonly no的參數改為yes,就可以將AOF的持久化功能開啟,appendfilename 指定AOF文件名

no-appendfsync-on-rewrite  在重寫AOF文件時,是否對新寫的操作暫存在記憶體中,預設為no

auto-aof-rewrite-percentage   當前AOF文件大小是上次重寫AOF文件大小的兩倍時自動對當前AOF文件重寫

auto-aof-rewrite-min-size     設定當前AOF文件的大小至少要到指定大小才能進行重寫

 

複製:

  1). 同一個Master可以同步多個Slaves

  2). Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力

  3). Master Server是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求

  4). Slave Server同樣是以非阻塞的方式完成數據同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數據

 

複製的工作原理: 在Slave啟動並連接到Master之後,它將主動發送一個SYNC命令。此後Master將啟動後臺存檔進程,同時收集所

有接收到的用於修改數據集的命令,在後臺進程執行完畢後,Master將傳送整個資料庫文件到Slave,以完成一次完全同步。而Slave

伺服器在接收到資料庫文件數據之後將其存檔並載入到記憶體中。此後,Master繼續將所有已經收集到的修改命令,和新的修改命令依次

傳送給Slaves,Slave將在本次執行這些數據修改命令,從而達到最終的數據同步 如果Master和Slave之間的鏈接出現斷連現象,

Slave可以自動重連Master,但是在連接成功之後,一次完全同步將被自動執行。

  

將從庫的配置文件設置一條參數就可以了:slaveof 192.168.238.224 6379   指定主庫的ip地址,監聽的埠

登陸後使用info replication命令查看主從同步是否成功

 

 

從庫配置參數:slave-serve-stale-data  如果從庫連接不到主庫了,當有讀請求時是否發送自己的數據,預設為yes

       slave-read-only    從庫是否為只讀,預設為yes

註意:如果master使用requirepass開啟了認證功能,從伺服器要使用masterauth <PASSWORD>來連入服務請求使用此密碼進行

認證

sentinel:用於監控和管理多個redis服務實現HA,通知,自動故障轉移,要求sentinel要為基數個數,至少三個對master是否線上做

出投票式的正確判定,同時也避免了sentinel單點失效

 

啟動sentinel的程式  redis-sentinel /etc/redis-sentinel.conf

/etc/redis-sentinel.conf   為sentinel的專用配置文件

啟動sentinel的程式會實現以下過程

  (1) 伺服器自身初始化,運行redis-server中專用於sentinel功能的代碼

  (2) 初始化sentinel狀態,根據給定的配置文件,初始化監控的master伺服器列表

  (3) 創建連向master的連接

 

配置文件中必須配置的參數:

  sentinel monitor <master-name> <ip> <redis-port> <quorum>

  例如:sentinel monitor mymaster 127.0.0.1 6379 1     quorum是指定有幾台sentinel

 

  sentinel down-after-milliseconds <master-name> <milliseconds>

  例如:sentinel down-after-milliseconds mymaster 30000      30秒後連接不到主庫,則判定主庫為down

 

  sentinel parallel-syncs mymaster 1

  當從庫提升為主庫時,多少從庫可以同時過來同步

  sentinel failover-timeout mymaster 180000  

一定要把上面三個參數配置好再開啟sentinel,不然就麻煩了,無法自動故障轉移

 

  故障轉移超時時間

  主觀下線:一個sentinel實例判斷出某節點下線

  客觀下線:多個sentinel節點協商後判斷出某節點下線

  

  專用命令:

    SENTINEL masters

    SENTINEL slaves <master name>

    SENTINEL get-master-addr-by-name <master name>

    

補充:當主庫宕機後,sentinel會把新的主庫ip地址通知客戶端(需要redis的專用客戶端程式),原來的主庫回來時會變成新主庫的從

庫,sentinel以非守護進程工作

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • title: Android N開發 你需要知道的一切 tags: Android N,Android7.0,Android 轉載請註明出處:http://www.cnblogs.com/yishaochu/p/5465413.html 一、前言 如果你英文不錯建議你去官網看,官網底部也有翻譯語言選 ...
  • 開發者設計界面時候往往不會使用系統自帶的標題欄,因為不美觀,所以需要自己設置標題欄。 1.根據需求在xml文件中設置標題佈局 2.在values的styles中將以上標題設置成自己的style 3.在醒目清單文件中用到該主題的activity的標簽中加入 android:theme="@style/ ...
  • 項目做多了之後,會發現其實 ScrollView嵌套ListVew或者GridView等很常用,但是你也會發現各種奇怪問題產生。根據個人經驗現在列出常見問題以及代碼最少最簡單的解決方法。 問題一 : 嵌套在 ScrollView的 ListVew數據顯示不全,我遇到的是最多只顯示兩條已有的數據。 解 ...
  • 初始化是為了使用某個類、結構體或枚舉類型的實例而進行的準備過程。這個過程包括為每個存儲的屬性設置一個初始值,然後執行新實例所需的任何其他設置或初始化。 初始化是通過定義構造器(Initializers)來實現的,這些構造器可以看做是用來創建特定類型實例的特殊方法。與 Objective-C 中的構造 ...
  • Handler背景理解: Handler被最多的使用在了更新UI線程中,但是,這個方法具體是什麼樣的呢?我在這篇博文中先領著大家認識一下什麼是handler以及它是怎麼樣使用在程式中,起著什麼樣的作用。 示例說明: 首先先建立兩個按鈕:一個是start按鈕,作用是開啟整個程式。另一個是終止按鈕end ...
  • MySQL伺服器的主從配置,本來是一件很簡單的事情,無奈不是從零開始,總是在別人已經安裝好的mysql伺服器之上 ,這就會牽扯到,mysql的版本,啟動文件,等一些問題。 http://www.cnblogs.com/roucheng/p/phpmysql.html 不過沒關係,先問清楚兩點 1、m ...
  • 無論何時對基礎數據執行插入、更新或刪除操作,SQL Server 資料庫引擎都會自動維護索引。隨著時間的推移,這些修改可能會導致索引中的信息分散在資料庫中(含有碎片)。當索引包含的頁中的邏輯排序(基於鍵值)與數據文件中的物理排序不匹配時,就存在碎片。碎片非常多的索引可能會降低查詢性能,導致應用程式響 ...
  • 同事在Toad裡面執行SQL語句時,突然無線網路中斷了,讓我檢查一下具體情況,如下所示(有些信息,用xxx替換,因為是在處理那些歷史歸檔數據,使用的一個特殊用戶,所以可以用下麵SQL找到對應的會話信息): SQL> SELECT B.USERNAME , 2 B.SID , 3 B.SERIAL# ... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...