1. 程式人生 > 其它 >Redis 01 概述

Redis 01 概述

簡介

NoSQL

NoSQL(Not Only SQL),即不僅是SQL,泛指非關係型資料庫

NoSQL 易擴充套件,NoSQL 資料庫種類繁多(MongoDBRedis 等),共同的特點都是去掉關係資料庫的關係型特性。

資料之間無關係,這樣就非常容易擴充套件,無形之間也在架構的層面上帶來了可擴充套件的能力。

大資料量下 NoSQL 資料庫具有非常高的讀寫效能,這得益於它的無關係性,資料庫的結構簡單。

NoSQL 資料庫的典型代表就是 Redis

Redis

Redis(Remote Dictionary Server ),即遠端字典服務

一個開源的使用 ANSI C 語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key - Value 資料庫

,並提供多種語言的 API。

從 2010 年 3 月 15 日起,Redis 的開發工作由 VMware 主持。

從 2013 年 5 月開始,Redis的開發由 Pivotal 贊助。

官網:https://redis.io/

安裝

Windows

下載

https://github.com/tporadowski/redis/releases

解壓後的目錄如下

檔案介紹

  • redis-server.exe:服務端程式,提供 Redis 服務。
  • redis-cli.exe: 客戶端程式,通過它連線 Redis 服務並進行操作。
  • redis-check-dump.exe:RDB 檔案修復工具。
  • redis-check-aof.exe:AOF 檔案修復工具。
  • redis-benchmark.exe:效能測試工具,用以模擬同時由 N 個客戶端傳送 M 個 SETs/GETs 查詢(類似於 Apache 的 ab 工具)。
  • redis.windows.conf: 配置檔案,將 Redis 作為普通軟體使用的配置,命令列關閉則 Redis 關閉。
  • redis.windows-service.conf:配置檔案,將 Redis 作為系統服務的配置。

使用

雙擊 redis-server.exe,會彈出視窗一閃而過,如果不想視窗消失,可以在 cmd 中開啟。

這裡啟動的是 Redis 的服務端,用於提供服務。

雙擊 redis-cli.exe

這裡啟動的是 Redis 的客戶端,用於連線服務。

測試使用

如此即說明 Redis 可以正常使用。

Windows 下安裝和使用 Redis 都非常簡單,但官方並不推薦

官方建議使用 Linux 進行部署。

Redis 可以在其他作業系統中工作,但這種支援是盡力而為的。Windows 版本沒有官方支援。

Linux

這裡以 CentOS 7.6 系統為例

環境準備

由於 Redis 由 ANSI C 編寫,安裝 Redis 前需要先安裝 C 語言環境。

yum install gcc-c++

下載

訪問 Redis 官方:https://redis.io/

解壓

tar -zvxf redis-6.2.6.tar.gz

移動

一般都會將 redis 目錄放置到 /usr/local/redis

這裡將目前在 /home/sail 目錄下的 redis-6.2.6 資料夾更改目錄,同時更改資料夾名稱為 redis

mv /home/sail/redis-6.2.6 /usr/local/redis

編譯

跳轉到 /usr/local/redis

make

最後輸出如下內容即代表編譯成功

安裝

make PREFIX=/usr/local/redis install

這裡多了一個關鍵字 PREFIX=

這個關鍵字的作用是編譯的時候用於指定程式存放的路徑。

比如我們現在就是指定了 redis 必須存放在 /usr/local/redis 目錄。

假設不新增該關鍵字 Linux 會將可執行檔案存放在 /usr/local/bin 目錄。

這裡指定號目錄也方便後續的解除安裝,後續直接 rm -rf /usr/local/redis 即可刪除 redis。

啟動

我們一般需要後臺啟動 Redis

這裡有兩種方式:命令帶&修改配置檔案

命令帶&

./bin/redis-server& ./redis.conf
[root@sail redis]# ./bin/redis-server& ./redis.conf
[1] 11953
-bash: ./redis.conf: Permission denied
[root@sail redis]# 11953:C 15 Mar 2022 16:15:10.803 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11953:C 15 Mar 2022 16:15:10.803 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=11953, just started
11953:C 15 Mar 2022 16:15:10.803 # Warning: no config file specified, using the default config. In order to specify a config file use ./bin/redis-server /path/to/redis.conf
11953:M 15 Mar 2022 16:15:10.803 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 11953
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

11953:M 15 Mar 2022 16:15:10.804 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
11953:M 15 Mar 2022 16:15:10.804 # Server initialized
11953:M 15 Mar 2022 16:15:10.804 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
11953:M 15 Mar 2022 16:15:10.804 * Ready to accept connections

這種方式需要在啟動命令中帶 & 才行,不太方便,一般都是通過修改配置檔案實現。

修改配置檔案

redis.confdaemonize no 改為 daemonize yes 即可。

修改後不帶 & 也可以後臺啟動。

./bin/redis-server ./redis.conf

這裡列舉下 redis.conf 中比較重要的配置項

配置項名稱 配置項值範圍 說明
daemonize yes、no yes表示啟用守護程序,預設是no即不以守護程序方式執行。其中Windows系統下不支援啟用守護程序方式執行
port 指定 Redis 監聽埠,預設埠為 6379
bind 繫結的主機地址,如果需要設定遠端訪問則直接將這個屬性備註下或者改為bind * 即可,這個屬性和下面的protected-mode控制了是否可以遠端訪問 。
protected-mode yes 、no 保護模式,該模式控制外部網是否可以連線redis服務,預設是yes,所以預設我們外網是無法訪問的,如需外網連線rendis服務則需要將此屬性改為no。
timeout 300 當客戶端閒置多長時間後關閉連線,如果指定為 0,表示關閉該功能
loglevel debug、verbose、notice、warning 日誌級別,預設為 notice
databases 16 設定資料庫的數量,預設的資料庫是0。整個通過客戶端工具可以看得到
rdbcompression yes、no 指定儲存至本地資料庫時是否壓縮資料,預設為 yes,Redis 採用 LZF 壓縮,如果為了節省 CPU 時間,可以關閉該選項,但會導致資料庫檔案變的巨大。
dbfilename dump.rdb 指定本地資料庫檔名,預設值為 dump.rdb
dir 指定本地資料庫存放目錄
requirepass 設定 Redis 連線密碼,如果配置了連線密碼,客戶端在連線 Redis 時需要通過 AUTH 命令提供密碼,預設關閉
maxclients 0 設定同一時間最大客戶端連線數,預設無限制,Redis 可以同時開啟的客戶端連線數為 Redis 程序可以開啟的最大檔案描述符數,如果設定 maxclients 0,表示不作限制。當客戶端連線數到達限制時,Redis 會關閉新的連線並向客戶端返回 max number of clients reached 錯誤資訊。
maxmemory XXX 指定 Redis 最大記憶體限制,Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放記憶體,Value 會存放在 swap 區。配置項值範圍列裡XXX為數值。

檢視

檢視程序方式

ps -ef|grep redis
[root@sail redis]# ps -ef|grep redis
root     11953  3410  0 16:15 pts/1    00:00:02 ./bin/redis-server *:6379

檢視埠方式

Redis 的預設埠為 6379,一般不會更改,可以通過該埠查詢 Redis 允許情況。

netstat -lanp | grep 6379
[root@sail redis]# netstat -lanp | grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      11953/./bin/redis-s 

環境變數配置

為方便使用,建議先配置 Redis 的環境變數。

vim /etc/profile
source /etc/profile

效能測試

bin 目錄下的 redis-benchmark 可以進行效能測試

  • -c(clients):客戶端的併發量(預設 50)。
  • -n(num):客戶端請求數量(預設 100000)。
  • -q:僅僅顯示 redis-benchmark 的 requests per second 資訊。
  • -r(random):向 Redis 插入更多隨機的值。
  • -P :每個請求pipeline的資料量(預設為 1)。
  • -k :客戶端是否使用 keepalive,1 為使用,0 為不使用,預設值為 1。
  • -t:對指定命令進行基準測試。
  • –csv:將結果按照 csv 格式輸出。
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

使用

redis-cli 是連線本地redis服務的一個命令,通過該命令後可以進入 redis 的指令碼控制檯。

配置好環境變數後任意目錄下輸入 redis-cli 即可進入。

[root@sail etc]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set hello Hello World
(error) ERR syntax error
127.0.0.1:6379> set hello "Hello World"
OK
127.0.0.1:6379> get hello
"Hello World"

這樣 Redis 在 Linux 上就安裝完畢了。