Redis 01 概述
簡介
NoSQL
NoSQL(Not Only SQL),即不僅是SQL,泛指非關係型資料庫。
NoSQL 易擴充套件,NoSQL 資料庫種類繁多(MongoDB、Redis 等),共同的特點都是去掉關係資料庫的關係型特性。
資料之間無關係,這樣就非常容易擴充套件,無形之間也在架構的層面上帶來了可擴充套件的能力。
大資料量下 NoSQL 資料庫具有非常高的讀寫效能,這得益於它的無關係性,資料庫的結構簡單。
NoSQL 資料庫的典型代表就是 Redis。
Redis
Redis(Remote Dictionary Server ),即遠端字典服務。
一個開源的使用 ANSI C 語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key - Value 資料庫
,並提供多種語言的 API。從 2010 年 3 月 15 日起,Redis 的開發工作由 VMware 主持。
從 2013 年 5 月開始,Redis的開發由 Pivotal 贊助。
安裝
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.conf 由 daemonize 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 上就安裝完畢了。