分散式緩存技術redis學習(三)——redis高級應用(主從、事務與鎖、持久化)

来源:http://www.cnblogs.com/hjwublog/archive/2016/07/11/5660578.html
-Advertisement-
Play Games

上文《詳細講解redis數據結構(記憶體模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。目錄如下: 安全性設置 設置客戶端操作秘密 客戶端授權方式 主從複製 主從複製的特點 主從複製的過程 配置主從伺服器 事務與鎖 事務開啟與取消 樂觀鎖 持久化機 ...


 

 

上文《詳細講解redis數據結構(記憶體模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。目錄如下:

 

安全性設置

設置客戶端操作秘密

客戶端授權方式

主從複製

主從複製的特點

主從複製的過程

配置主從伺服器

事務與鎖

事務開啟與取消

樂觀鎖

持久化機制

RDB方式

AOF方式

發佈以及訂閱消息

 

安全性設置

設置客戶端操作秘密

redis安裝好後,預設情況下登陸客戶端和使用命令操作時不需要密碼的。某些情況下,為了安全起見,我們可以設置在客戶端連接後進行任何操作之前都要進行密碼驗證。修改redis.conf進行配置。

 

[root@localhost ~]# vi /usr/local/redis/etc/redis.conf

 

#######################SECURITY ##############################

......

# Warning: since Redis is pretty fast an outside user can try up to

# 150k passwords per second against a good box. This means that you should

# use a very strong password otherwise it will be very easy to break.

#

# requirepass foobared

requirepass redis129

 

# Command renaming.

 

如上,找到# requirepass foobared這一行,在下麵添加“requirepass 密碼”一行設置密碼。設置好密碼後,有兩種方式授權客戶端進行操作。

客戶端授權方式

(1)登錄時使用-a參數指定客戶端密碼,如下

 

[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.2.129 -p 6379 -a redis129

192.168.2.129:6379> keys *

1) "myzset"

192.168.2.129:6379>

 

(2)登錄客戶端後使用auth命令進行授權,如下

 

[root@localhost ~]# /usr/local/redis/bin/redis-cli -h 192.168.2.129 -p 6379

192.168.2.129:6379> keys *

(error) NOAUTH Authentication required.

192.168.2.129:6379> auth redis129

OK

192.168.2.129:6379> keys *

1) "myzset"

192.168.2.129:6379>

 

主從複製

主從複製,即主伺服器與從伺服器之間數據備份的問題。Redis 支持簡單且易用的主從複製(master-slave replication)功能, 該功能可以讓從伺服器(slave server)成為主伺服器(master server)的精確複製品。

 

主從複製的特點

(1)一個主伺服器可以有多個從伺服器。

(2)不僅主伺服器可以有從伺服器, 從伺服器也可以有自己的從伺服器。

(3)Redis 支持非同步複製和部分複製(這兩個特性從Redis 2.8開始),主從複製過程不會阻塞主伺服器和從伺服器。

(4)主從複製功能可以提升系統的伸縮性和功能,如讓多個從伺服器處理只讀命令,使用複製功能來讓主伺服器免於頻繁的執行持久化操作。

主從複製的過程

下麵我們用一個圖來講解redis主從複製的過程。

 

wpsEB10.tmp 

 

Redis主從複製過程示意圖

 

 

從上面的示意圖可以看出,主伺服器與從伺服器建立連接之後,Redis主從複製過程主要有下麵幾步:

(1)從伺服器都將向主伺服器發送一個 SYNC 命令。

(2)主伺服器接到 SYNC 命令後開啟一個後臺子進程並開始執行 BGSAVE,併在保存操作執行期間, 將所有新執行的寫入命令都保存到一個緩衝區裡面。

(3)當 BGSAVE 執行完畢後, 主伺服器將執行保存操作所得的 .rdb 文件發送給從伺服器, 從伺服器接收這個 .rdb 文件, 並將文件中的數據載入到記憶體中。

(4)主伺服器會以 Redis 命令協議的格式, 將寫命令緩衝區中積累的所有內容都發送給從伺服器。

配置從伺服器

redis配置一個從伺服器非常簡單, 只要在從伺服器的配置文件redis.conf中增加主伺服器的IP地址和埠號就可以,如果主伺服器設置了客戶端密碼,還需要在從伺服器中配置主伺服器的密碼,如下

 

##########################REPLICATION ###############################

 

# Master-Slave replication. Use slaveof to make a Redis instance a copy of

# another Redis server. A few things to understand ASAP about Redis replication.

#

......

# slaveof <masterip> <masterport>

slaveof 192.168.2.129 6379

# If the master is password protected (using the "requirepass" configuration

# directive below) it is possible to tell the slave to authenticate before

# starting the replication synchronization process, otherwise the master will

# refuse the slave request.

#

# masterauth <master-password>

masterauth redis129

事務與鎖

Redis 事務支持相對簡單,MULTI 、 EXEC 、 DISCARD 和 WATCH 這四個命令是 Redis 事務的基礎。

事務開啟與取消

l MULTI 開啟一個事務。當客戶端發出了MULTI 命令時,客戶端和服務端的連接就進入了一個事務上下文的狀態。MULTI 執行之後, 客戶端可以繼續向伺服器發送任意多條命令, 這些命令不會立即被執行, 而是被放到一個隊列中, 當 EXEC 命令被調用時, 所有隊列中的命令才會被執行。

l EXEC 順序執行事務隊列中的命令。

 

192.168.2.129:6379> multi

OK

192.168.2.129:6379> set name "zhangsan"

QUEUED

192.168.2.129:6379> set age 20

QUEUED

192.168.2.129:6379> exec

1) OK

2) OK

192.168.2.129:6379> keys *

1) "age"

2) "name"

192.168.2.129:6379>

 

l DISCARD 取消事務。當執行 DISCARD 命令時, 事務會被放棄, 事務隊列會被清空, 並且客戶端會從事務狀態中退出。

 

192.168.2.129:6379> multi

OK

192.168.2.129:6379> set name2 "lisi"

QUEUED

192.168.2.129:6379> set age 22

QUEUED

192.168.2.129:6379> discard

OK

192.168.2.129:6379> exec

(error) ERR EXEC without MULTI

192.168.2.129:6379>

樂觀鎖

<

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

-Advertisement-
Play Games
更多相關文章
  • 為什麼我也要說SQL Server的並行: 這幾天園子里寫關於SQL Server並行的文章很多,不管怎麼樣,都讓人對並行操作有了更深刻的認識。 我想說的是:儘管並行操作可能(並不是一定)存在這樣或者那樣的問題,但是我們不能否認並行,仍然要利用好並行。 但是,實際開發中,某些SQL語句的寫法會導致用 ...
  • extent--最小空間分配單位 --tablespace managementblock --最小i/o單位 --segment managementcreate tablespace jamesdatafile '/export/home/oracle/oradata/james.dbf'siz ...
  • 註: sql server 2005 及以上支持. 版本估計是不支持(工作環境2005,2008). 工作需要, 需要向SQL Server 現有表中添加新列並添加描述. 從而有個如下存儲過程. (先附上存儲過程然後解釋) 代碼 /********調用方法********** 作用: 添加列並添加列 ...
  • 數據說明: 對錶進行聚合查詢 聚合函數: COUNT:計算表中的記錄數(行數)。 SUM:計算表中數值列的數據合計值。 AVG:計算表中數值列的數據平均值。 MAX:求出表中任意列中數據的最大值。 MIN:求出表中任意列中數據的最小值。 COUNT函數的結果根據參數的不同而不同。COUNT(*)會得 ...
  • Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。 嘗試連接到 Principle 伺服器時發生了此故障。一個正常的邏輯,突然報錯,除了超時,還有這個Principle 伺服器故障.查詢相關信息,google就查出來說阿裡雲曾經報錯,然後是因為資料庫故障,於是在msdn上查找相關數 ...
  • 示例 數據: 要求: 將每年每月中的氣溫排名前三的數據找出來 實現: 1.每一年用一個reduce任務處理; 2.創建自定義數據類型,存儲 [年-月-日-溫度]; 2.自己實現排序函數 根據 [年-月-溫度] 降序排列,也可以在定義數據類型中進行排序; 3.自己實現分組函數,對 [年-月] 分組,r ...
  • mongodb數據備份和還原主要分為二種,一種是針對於庫的mongodump和mongorestore,一種是針對庫中表的mongoexport和mongoimport 一,mongodump備份資料庫 1,常用命令格 1 mongodump -h IP --port 埠 -u 用戶名 -p 密碼 ...
  • 在使用資料庫的過程中,往往我們需要對有的數據先進行計算,然後再查詢出來,所以我們就需要創建函數來完成這項任務,在資料庫的Programmability(如圖1)下麵的Function中創建函數(如圖2) (圖1)(圖2) 在這裡創建的函數一般有兩種返回類型,一種是返回一個集合(數據表),另一種是直接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...