Redis:13--常用功能之redis-cli redis-server等命令

  • Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它們 雖然比較簡單,但是麻雀雖小五臟俱全,有時可以很巧妙地解決一些問題

一、redis-cli

  • 在前面數據庫連接的時候已經redis-cli的-h、-p參數,除了這些參數,還有很多有用的參數,要了解redis-cli的全部參數,可以執行redis-cli-help命令來進行查看

  • 下面將對一些重要參數的含義以及使用場景進行說明

-x

  • -x選項代表從標準輸入(stdin)讀取數據作為redis-cli的最后一個參數

  • 例如下面的操作會將字符串world作為set hello的值:

-c

  • -c(cluster)選項是連接Redis Cluster節點時需要使用的

  • -c選項可以防止moved和ask異常,有關Redis Cluster將在后面介紹

-a

  • 如果Redis配置了密碼,可以用-a(auth)選項,有了這個選項就不需要手動輸入auth命令

  • 如果需要redis的“requirepass”配置參數:

  • CONFIG SET requirepass "123456" 可以設置redis的登錄密碼為123456

--scan、--pattern

  • --scan選項和--pattern選項用于掃描指定模式的鍵,相當于使用scan命令

--slave

  • -slave選項是把當前客戶端模擬成當前Redis節點的從節點,可以用來獲取當前Redis節點的更新操作,有關于Redis復制會在后面文章詳細介紹。合理的利用這個選項可以記錄當前連接Redis節點的一些更新操作,這 些更新操作很可能是實際開發業務時需要的數據

  • 注意:ING命令是由于主從復制產生的,后面文章會對主從復制進行介紹

  • 下面開啟第一個客戶端,使用--slave選項,看到同步已完成:

  • 在后側開啟另一個客戶端做一些更新操作,然后左側的第一個客戶端會收到Redis節點的更新操作:

--rdb

  • --rdb選項會請求Redis實例生成并發送RDB持久化文件,保存在本地

  • ?可使用它做持久化文件的定期備份。有關Redis持久化在后面會詳細介紹

--pipe

  • --pipe選項用于將命令封裝成Redis通信協議定義的數據格式,批量發送給Redis執行,有關Redis通信協議將在后面會詳細介紹

  • 例如下面操作 同時執行了set hello world和incr counter兩條命令:

echo -en '*3\r\n$3\r\nSET\r\n$5\r\nhello\r\n$5\r\nworld\r\n*2\r\n$4\r\nincr\r\n$7\r\ncounter\r\n' | redis-cli --pipe

--bigkeys

  • --bigkeys選項使用scan命令對Redis的鍵進行采樣,從中找到內存占用比較大的鍵值,這些鍵可能是系統的瓶頸

--eval

  • --eval選項用于執行指定Lua腳本,有關Lua腳本的使用將在后面會詳細介紹

  • latency有三個選項,分別是--latency、--latency-history、--latency-dist。它們都可以檢測網絡延遲,對于Redis的開發和運維非常有幫助

①--latency

  • 該選項可以測試客戶端到目標Redis的網絡延遲

  • 例如當前拓撲結構如下圖所示。客戶端B和Redis在機房B,客戶端A在機房A,機房A和機房B是跨地區的

  • 客戶端B:

  • 客戶端A:

  • 可以看到客戶端A由于距離Redis比較遠,平均網絡延遲會稍微高一些

②--latency-history

  • --latency的執行結果只有一條,如果想以分時段的形式了解延遲信息, 可以使用--latency-history選項,可以通過-i參數控制間隔時間

③--latency-dist

  • 該選項會使用統計圖表的形式從控制臺輸出延遲統計信息

--stat

  • --stat選項可以實時獲取Redis的重要統計信息,雖然info命令中的統計信 息更全,但是能實時看到一些增量的數據(例如requests)對于Redis的運維 還是有一定幫助的,如下所示:

--raw、--no-raw

  • --no-raw選項是要求命令的返回結果必須是原始的格式,--raw恰恰相反,返回格式化后的結果

  • 在Redis中設置一個中文的value:

  • 如果正常執行get或者使用--no-raw選項,那么返回的結果是二進制格式:

  • 如果使用了--raw選項,將會返回中文:

二、redis-server

--test-memory

  • redis-server除了啟動Redis外,還有一個--test-memory選項。--test-memory可以用來檢測當前操作系統能否穩定地分配指定容量的內存給 Redis,通過這種檢測可以有效避免因為內存問題造成Redis崩潰

  • 例如下面操作檢測當前操作系統能否提供1G的內存給Redis。整個內存檢測的時間比較長,就不顯示圖片了

redis-server --test-memory 1024
  • 當輸出passed this test時說明內存檢測完畢,最后會提示--test-memory只是簡單檢測,如果有質疑可以使用更加專業的內存檢測工具。

  • 通常無需每次開啟Redis實例時都執行--test-memory選項,該功能更偏向于調試和測試,例如,想快速占滿機器內存做一些極端條件的測試,這個功 能是一個不錯的選擇

三、redis-benchmark

  • redis-benchmark可以為Redis做基準性能測試,它提供了很多選項幫助開發和運維人員測試Redis的相關性能,下面分別介紹這些選項

  • 詳情參閱:https://redis.io/topics/benchmarks

-h

  • 指定服務器主機名

  • 默認值127.0.0.1

-p

  • 指定服務器端口

  • 默認值為6379

-s

  • 指定服務器socket

-c

  • -c(clients)選項代表客戶端的并發數量(默認是50)

-n <requests>

  • -n(num)選項代表客戶端請求總量(默認是100000)

  • 例如下面的命令代表100各個客戶端同時請求Redis,一 共執行20000次。redis-benchmark會對各類數據結構的命令進行測試,并給出性能指標:

redis-benchmark -c 100 -n 20000

  • 例如上面一共執行了20000次get操作,在0.81秒完成,每個請求數據量是3個字節,2.44%的命令執行時間小于1毫秒,Redis每秒可以處理24691.36次get請求

-d

  • 以字節的形式指定set/get值的數據大小

  • 默認值為2

-q

  • -q選項僅僅顯示redis-benchmark的requests per second信息

  • 例如,接著上面的演示案例

redis-benchmark -c 100 -n 20000 -q

?

-r

  • 在一個數據庫內容為空的Redis上,執行了redis-benchmark命令之后會發現數據庫中自動新增4個鍵:

  • 如果想向Redis插入更多的鍵,可以執行使用-r(random)選項,可以向Redis插入更多隨機的鍵

redis-benchmark -c 100 -n 20000 -r 10000
  • -r選項會在key、counter鍵上加一個12位的后綴,-r10000代表只對后四位做隨機處理(-r不是隨機數的個數)。例如進行上面的操作后,key的數量和結果結構如下:

-P

  • 通過管道傳輸請求,-P選項代表每個請求pipeline的數據量(默認為1)

-k<boolean>

  • -k選項代表客戶端是否使用keepalive,1為使用,0為不使用,默認值為 1

-t

  • -t選項可以對指定命令進行基準測試

--csv

  • --csv選項會將結果按照csv格式輸出,便于后續處理,如導出到Excel 等

-L

  • 死循環,永久執行測試

-I

  • Idle模式。僅打開N個idle連接并等待

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444308.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis:16---常用功能之(慢查詢日志)

一、慢查詢日志介紹 許多存儲系統(例如MySQL)提供慢查詢日志幫助開發和運維人員定位系統存在的慢操作。所謂慢查詢日志就是系統在命令執行前后計算每條命令的執行時間,當超過預設閥值,就將這條命令的相關信息記錄下來,Redis也提供了類似的功能Redis的慢查詢日志功能用于記…

leetcode256. 粉刷房子

假如有一排房子&#xff0c;共 n 個&#xff0c;每個房子可以被粉刷成紅色、藍色或者綠色這三種顏色中的一種&#xff0c;你需要粉刷所有的房子并且使其相鄰的兩個房子顏色不能相同。 當然&#xff0c;因為市場上不同顏色油漆的價格不同&#xff0c;所以房子粉刷成不同顏色的花…

Redis:21---客戶端相關配置篇

一、客戶端相關配置①客戶端的限制maxclientsRedis提供了maxclients參數來限制最大客戶端連接數&#xff0c;一旦連接數超過 maxclients&#xff0c;新的連接將被拒絕maxclients默認值是10000可以通過info clients來查詢當前Redis的連接數&#xff1a;可以通過config set maxcl…

Redis:23---info命令總結

info命令的格式有3種&#xff1a;info&#xff1a;部分Redis系統狀態統計信息info all&#xff1a;全部Redis系統狀態統計信息&#xff0c;一次性打印下面所有p的內容info p&#xff1a;某一塊的系統狀態統計信息。info命令所有的p如下所示模塊名模塊含義 Server服務器信息Clie…

Redis:22---客戶端API:client、monitor)

一、client listclient list命令能列出與Redis服務端相連的所有客戶端連接信息。例如下面代碼是在一個Redis實例上執行client list的結果&#xff0c;其中每一行代表一個客戶端信息&#xff1a;下面將選擇幾個重要的屬性進行說明&#xff0c;其余通過表格的形式進行展示①標識&…

leetcode175. 組合兩個表(SQL)

表1: Person ---------------------- | 列名 | 類型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- PersonId 是上表主鍵 表2: Address ---------------------- | 列名 …

Redis:20---常用功能之(發布與訂閱)

一、發布與訂閱概述Redis提供了基于“發布/訂閱”模式的消息機制&#xff0c;此種模式下&#xff0c;消息發布者和訂閱者不進行直接通信&#xff0c;發布者客戶端向指定的頻道&#xff08;channel&#xff09;發布消息&#xff0c;訂閱該頻道的每個客戶端都可以收到該消息。 下…

Redis:19---常用功能之(HyperLogLog)

一、HyperLogLog概述HyperLogLog并不是一種新的數據結構&#xff08;實際類型為字符串類型&#xff09;&#xff0c;而是一種基數算法&#xff0c;通過HyperLogLog可以利用極小的內存空間完成獨立總數的統計&#xff0c;數據集可以是IP、Email、ID等HyperLogLog提供了3個命令&a…

計算時間差的Oracle函數

Oracle函數可以實現諸多的功能&#xff0c;下面就介紹使用Oracle函數計算時間差的實現方法&#xff0c;如果您對Oracle函數方面感興趣的話&#xff0c;不妨一看。 兩個Date類型字段&#xff1a;START_DATE&#xff0c;END_DATE&#xff0c;計算這兩個日期的時間差&#xff08;分…

leetcode181. 超過經理收入的員工(SQL)

Employee 表包含所有員工&#xff0c;他們的經理也屬于員工。每個員工都有一個 Id&#xff0c;此外還有一列對應員工的經理的 Id。 ------------------------------ | Id | Name | Salary | ManagerId | ------------------------------ | 1 | Joe | 70000 | 3 |…

UNIX(多線程):01---線程簡介及線程限制

一、線程的概念 典型的UNIX進程可以看成只有一個控制線程:一個進程在同一時刻只做一件事。有了多個控制線程后,在程序設計時可以把進程設計成在同一時刻能夠做不止一件事,每個線程處理各自獨立的任務二、線程的優點 通過為每種事件類型分配單獨的處理線程,可以簡化處理異步…

UNIX(多線程):13---condition_variable、wait、notify_one、notify_all

條件變量std::condition_variable、wait()、notify_one() 線程A: 等待一個條件滿足線程B: 專門往消息隊列中放入消息(數據),達到一定條件,通知處于等待中的線程A。std::condition_variable實際上是一個類,是一個和條件相關的一個類,說白了就是等待一個條件達成。這個類是…

leetcode176. 第二高的薪水(SQL)

編寫一個 SQL 查詢&#xff0c;獲取 Employee 表中第二高的薪水&#xff08;Salary&#xff09; 。 ------------ | Id | Salary | ------------ | 1 | 100 | | 2 | 200 | | 3 | 300 | ------------ 例如上述 Employee 表&#xff0c;SQL查詢應該返回 200 作為第二…

UNIX(多線程):17---異步任務提供者(Provider) 介紹

std::promise 類概述 Promise 對象可以保存某一類型 T 的值,該值可被 future 對象讀取(可能在另外一個線程中),因此 promise 也提供了一種線程同步的手段。在 promise 對象構造時可以和一個共享狀態(通常是std::future)相關聯,并可以在相關聯的共享狀態(std::future)上保…

leetcode180. 連續出現的數字(SQL)

編寫一個 SQL 查詢&#xff0c;查找所有至少連續出現三次的數字。 --------- | Id | Num | --------- | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | --------- 例如&#xff0c;給定上面的 Logs 表&#xff0c; 1 是唯一連續…

UNIX(多線程):18---異步任務提供者(Provider) 介紹(續)

本文主要介紹 std::packaged_task。 std::packaged_task 包裝一個可調用的對象,并且允許異步獲取該可調用對象產生的結果,從包裝可調用對象意義上來講,std::packaged_task 與 std::function 類似,只不過 std::packaged_task 將其包裝的可調用對象的執行結果傳遞給一個 std:…

leetcode182. 查找重復的電子郵箱(SQL)

編寫一個 SQL 查詢&#xff0c;查找 Person 表中所有重復的電子郵箱。 示例&#xff1a; ------------- | Id | Email | ------------- | 1 | ab.com | | 2 | cd.com | | 3 | ab.com | ------------- 根據以上輸入&#xff0c;你的查詢應返回以下結果&#xff1a; ----…

UNIX(多線程):19---Future 類型詳解

Future 類型詳解 本文主要介紹 std::future,std::shared_future 以及 std::future_error,另外還會介紹 <future> 頭文件中的 std::async,std::future_category 函數以及相關枚舉類型。 std::future 詳解 std::future 概述 前面已經多次提到過 std::future,那么 std::…

UNIX(多線程):20---生產者消費者實例

本文將綜合運用 C++11 中的新的基礎設施(主要是多線程、鎖、條件變量)來闡述一個經典問題——生產者消費者模型,并給出完整的解決方案。 生產者消費者問題是多線程并發中一個非常經典的問題,相信學過操作系統課程的同學都清楚這個問題的根源。本文將就四種情況分析并介紹生產…

leetcode183. 從不訂購的客戶(SQL)

某網站包含兩個表&#xff0c;Customers 表和 Orders 表。編寫一個 SQL 查詢&#xff0c;找出所有從不訂購任何東西的客戶。 Customers 表&#xff1a; ----------- | Id | Name | ----------- | 1 | Joe | | 2 | Henry | | 3 | Sam | | 4 | Max | ----------- Or…