1. 程式人生 > 其它 >Redis簡單介紹+安裝

Redis簡單介紹+安裝

Redis簡介

Redis 是一個開源(BSD 許可)、記憶體中資料結構儲存,用作資料庫、快取和訊息代理。它支援資料結構,如字串、雜湊、列表、集、帶範圍查詢的排序集、點陣圖、超日誌、具有半徑查詢的地理空間索引和流。Redis 具有內建複製、Lua 指令碼、LRU 逐出、事務和不同級別的磁碟永續性,並且通過 Redis Sentinel 和 Redis 群集自動分割槽提供高可用性。(官網詳解

Redis安裝

下載官網

[root@app1 ~]# wget http://download.redis.io/releases/redis-5.0.9.tar.gz
[root@app1 ~]# tar -zxvf redis-5.0.9.tar.gz
[root@app1 ~]# mv redis-5.0.9 /home/redis

[root@app1 ~]# cd /home/redis/
[root@app1 redis]# yum install -y gcc
make 或 make MALLOC=libc

啟動後日志報錯,處理方法:

16290:M 24 Sep 2020 09:57:18.316 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
###TCP backlog設定值511沒有成功,因為/proc/sys/net/core/somaxconn這個設定的是更小的128

16290:M 24 Sep 2020 09:57:18.316 # Server initialized
16290:M 24 Sep 2020 09:57:18.316 # 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.
###overcommit_memory引數設定為0!在記憶體不足的情況下,後臺程式save可能失敗。建議在檔案 /etc/sysctl.conf 中將overcommit_memory修改為1

[root@app1 ~]# vim /etc/sysctl.conf
net.core.somaxconn=1024
vm.overcommit_memory=1
[root@app1 ~]# sysctl -p

16314:M 24 Sep 2020 09:58:44.540 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
###你使用的是透明大頁,可能導致redis延遲和記憶體使用問題,執行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修復該問題

[root@app1 ~]# vim /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@app1 ~]# source /etc/rc.local

重新啟動Redis:

3408:C 30 Sep 2020 12:47:00.818 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3408:C 30 Sep 2020 12:47:00.818 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=3408, just started
3408:C 30 Sep 2020 12:47:00.818 # Configuration loaded
3409:M 30 Sep 2020 12:47:00.820 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 5.0.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 7000
 |    `-._   `._    /     _.-'    |     PID: 3409
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

3409:M 30 Sep 2020 12:47:00.821 # Server initialized
3409:M 30 Sep 2020 12:47:00.821 * DB loaded from disk: 0.000 seconds
3409:M 30 Sep 2020 12:47:00.821 * Ready to accept connections

Redis配置檔案詳解

配置檔案 詳解
daemonize no Redis預設不是以守護程序的方式執行,可以通過該配置項修改,使用yes啟用守護程序
pidfile /home/redis/redis.pid Redis預設會把pid寫入/var/run/redis.pid(預設)檔案,可以通過pidfile指定
port 6379 指定Redis監聽埠,預設埠為6379
bind 127.0.0.1 指定Redis只接收來自於該 IP 地址的請求,如果不進行設定,那麼將處理所有請求
timeout 300 當客戶端閒置多長時間後關閉連線,如果指定為0,表示關閉該功能(預設是0)
loglevel verboes 指定日誌記錄級別
logfile "/home/redis/redis.log" 日誌記錄方式,預設為標準輸出,如果配置Redis為守護程序方式執行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null,可以指定傳送到某個日誌檔案
database 16 設定資料庫的數量,預設資料庫為0(0-15),可以使用SELECT 命令在連線上指定資料庫id
save 指定在多長時間內,有多少次更新操作,就將資料同步到資料檔案,可以多個條件配合, Redis預設配置檔案中提供了三個條件:save 900 1、save 300 10、save 60 10000
rdbcompression 指定儲存至本地資料庫時是否壓縮資料,預設為yes,Redis採用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致資料庫檔案變的特別大
dbfilename dump.rdb 指定本地資料庫檔名,預設值為dump.rdb
dir ./ 指定本地資料庫存放目錄
slaveof 設定當本機為slave服務時,設定master服務的IP地址及埠,在Redis啟動時,它會自動從master進行資料同步
slave-read-only yes|no slave服務只讀設定,當開啟時,slave服務不能寫入資料,只能同步master資料
masterauth 當master設定密碼是,slave服務連線master的密碼
requirepass passwd 設定redis連線密碼,設定後redis客戶端連線需要認證 auth passwd
maxclients 128 設定同一時間最大客戶端連線數,預設無限制,Redis可以同時開啟的客戶端連線數為Redis程序可以開啟的最大檔案描述符數,如果設定 maxclients 0,表示不作限制。當客戶端連線數到達限制時,Redis會關閉新的連線並向客戶端返回max number of clients reached錯誤資訊
maxmemory 指定Redis最大記憶體限制,Redis在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放記憶體,Value會存放在swap區
appendonly yes|no 指定是否在每次更新操作後進行日誌記錄,Redis在預設情況下是非同步的把資料寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為 redis本身同步資料檔案是按上面save條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設為no
appendfilename appendonly.aof 指定更新日誌檔名,預設為src/appendonly.aof
appendfsync everysec 指定更新日誌條件,共有3個可選值:no表示等作業系統進行資料快取同步到磁碟(快)、always表示每次更新操作後手動呼叫fsync()將資料寫到磁碟(慢,安全)、everysec表示每秒同步一次(折中,預設值)
cluster-enabled yes 開啟叢集功能
cluster-config-file nodes-7001.conf 叢集資訊配置檔案自動生成 預設位置src/nodes_6379.conf
cluster-node-timeout 15000 cluster節點通訊時間
aof-use-rdb-preamble 混合持久化(RDB持久化以及AOF持久化混合寫入AOF檔案,這樣做的好處是可以結合 rdb 和 aof 的優點, 快速載入同時避免丟失過多的資料,缺點是 aof 裡面的 rdb 部分就是壓縮格式不再是 aof 格式,可讀性差)
repl-disable-tcp-nodelay 禁用 TCP_NODELAY:no ,不禁用,雙重否定等於肯定,即啟用 ,TCP_NODELAY=on;
禁用 TCP_NODELAY:yes,就是禁用, TCP_NODELAY=off。
啟用 TCP_NODELAY 時,無網路延遲,主伺服器的命令無論大小都會及時傳送給從節點,此時會增加網路頻寬的消耗。適合主從網路環境良好的場景。
禁用 TCP_NODELAY 時,主從節點的通訊會受到網路擁塞控制,Linux 核心會做出一定的優化,如合併較小的 TCP 資料包從而節省頻寬。預設傳送時間間隔取決 Linux 核心,一般預設為 40 毫秒。適合垮機房部署的情況。
slave-priority 100 適用Sentinel模組(unstable,M-S叢集管理和監控),需要額外的配置檔案支援。slave的權重值,預設100.當master失效後,Sentinel將會從slave列表中找到權重值最低(>0)的slave,並提升為master。如果權重值為0,表示此slave為"觀察者",不參與master選舉
###開啟redis
[root@app1 src]# ./redis-server ../redis.conf
###關閉redis
[root@app1 src]# ./redis-cli -h 127.0.0.1 -p 6379 -a qwer shutdown

h:host p:port a:auth

Redis修改配置

修改配置檔案方法(在不重啟例項情況下):修改日誌等級

Redis預設的設定為verbose,開發測試階段可以用debug,生產模式一般選用notice

  • debug:會打印出很多資訊,適用於開發和測試階段
  • verbose(冗長的):包含很多不太有用的資訊
  • notice:適用於生產模式
  • warning : 警告資訊
10.224.192.209:7000> CONFIG GET loglevel
1) "loglevel"
2) "verbose"

10.224.192.209:7000> CONFIG SET loglevel notice
OK

10.224.192.209:7000> CONFIG GET loglevel
1) "loglevel"
2) "notice"