1.Redis是什麼
1)REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value儲存系統。
2)Redis的特點
Redis 是完全開源的,遵守 BSD 協議,是一個高效能的 key-value 資料庫。
Redis 與其他 key - value 快取產品有以下三個特點:
- Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。
- Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
- Redis支援資料的備份,即master-slave模式的資料備份。
3)Redis的優勢
- 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的資料型別 – Redis支援二進位制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料型別操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支援事務,即原子性,通過MULTI和EXEC指令包起來。
- 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。
4)Redis與其他key-valye儲存有什麼不同
- Redis有著更為複雜的資料結構並且提供對他們的原子性操作,這是一個不同於其他資料庫的進化路徑。Redis的資料型別都是基於基本資料結構的同時對程式設計師透明,無需進行額外的抽象。
- Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大於硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁碟上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。
(以上內容摘自菜鳥教程)
2.Redis在Window10系統的安裝
1)Redis的下載。網址:https://github.com/tporadowski/redis/releases
(1)點選圖中紅框內容下載Redis包(寫文時間是2020.11.13,下載的Redis包是5.0.10版本)。Redis有64和32版本,根據自己電腦情況選擇
(2)下載以後解壓縮到C盤,然後更改資料夾的名字為redis。開啟資料夾以後,檔案內容如下:
(3)開啟一個cmd視窗,使用 cd 命令切換目錄到 C:\redis 執行此命令:redis-server.exe redis.windows.conf
如果想方便的話,可以把 redis 的路徑加到系統的環境變數裡,這樣就省得再輸路徑了,後面的那個 redis.windows.conf 可以省略,如果省略,會啟用預設的。輸入之後,會顯示如下介面:
(4)開啟另一個cmd視窗,不要關閉上一個,關閉以後會關閉服務的。
還是在cmd中用cd C:/redis命令進入目錄,然後執行此命令:
redis-cli.exe -h 127.0.0.1 -p 6379
設定鍵值對:
set myKey abc
取出鍵值對:
get myKey
效果如下圖:
這樣就安裝好了。
(5)多說幾句:以後如果想使用Redis,需要再次開啟此視窗,不然不能用。(也就是使用第(3)步)
也可以把Redis新增到服務中,開機啟動,這樣就不用每次開機就開啟了。之前寫過一個帖子,如果想把redis放到服務中,請移步:
https://www.cnblogs.com/littletreeshang/p/10772988.html
帖子內容如下:
3.Redis配置
(1)獲取配置
Redis的配置檔案在Redis目錄裡面,在我這裡就是C:/Redis目錄下。Redis的配置檔案叫 redis.windows.conf。
檢視配置也可以通過命令檢視,語法格式如下:
redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
例子:
redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
如圖:
如果想獲取所有配置,使用*:
redis 127.0.0.1:6379> CONFIG GET *
獲取所有配置結果如圖:
(2)編輯配置
編輯配置有兩種方式
1)直接修改配置檔案:redis.windows.conf;
2)通過命令修改配置。
通過命令修改語法:
redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
例子:
redis 127.0.0.1:6379> CONFIG SET loglevel "notice" OK redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice"
如圖:
(3)配置檔案說明(以當前版本(5.0.10)為例如果要是不確定的或者沒查到的說明前面加*,如果命令後面帶:就是後面的值不能以空格隔開)
說明:這裡就先整理一下常用的,其他的等熟悉以後再補充。在找命令的時候發現一個比較厲害的部落格,他那裡的Redis配置詳解系列講解的特別特別好,而且非常的詳細,請大家移步http://www.cs-cjl.com/
1)dbfilename dump.rdb
映象備份檔案的檔名,預設為 dump.rdb
2) requirepass foobared
設定客戶端連線後進行任何其他指定前需要使用的密碼。警告:因為redis 速度相當快,所以在一臺比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解。
3)masterauth
當主資料庫連線需要密碼驗證時,在這裡指定
4)cluster-announce-ip
*沒有查到具體的用法,但是好像是搭建Redis叢集的時候的對外IP
5)unixsocket
*redis支援通過unix socket方式來接收請求,可以通過unixsocket配置項來指定unix socket檔案的路徑,並通過unixsocketperm來指定檔案的許可權
6)logfile
配置log 檔案地址,預設使用標準輸出,即列印在命令列終端的視窗上,修改為日誌檔案目錄。
日誌記錄方式,預設為標準輸出,如果配置 Redis 為守護程式方式執行,而這裡又配置為日誌記錄方式為標準輸出,則日誌將會傳送給 /dev/null
7)pidfile
當 Redis 以守護程式方式執行時,Redis 預設會把 pid 寫入 /var/run/redis.pid 檔案,可以通過 pidfile 指定。你可以配置到其他地址。當執行多個redis 服務時,需要指定不同的pid 檔案和埠
8)slave-announce-ip
9)replica-announce-ip
10)maxmemory 0
指定 Redis 最大記憶體限制,Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放記憶體,Value 會存放在 swap 區
11)proto-max-bulk-len 536870912
12)client-query-buffer-limit 1073741824
13)maxmemory-samples 5
14)lfu-log-factor 10
Redis LFU 回收策略。
15)lfu-decay-time 1
16)timeout 0
當客戶端閒置多長秒後關閉連線,如果指定為 0 ,表示關閉該功能。
17)active-defrag-threshold-lower 10
18)active-defrag-threshold-upper 100
19)active-defrag-ignore-bytes 104857600
20)active-defrag-cycle-min 5
21)active-defrag-cycle-max 75
22)active-defrag-max-scan-fields 1000
23)auto-aof-rewrite-percentage 100
24)auto-aof-rewrite-min-size 67108864
25)hash-max-ziplist-entries 512
26)hash-max-ziplist-value 64
27)stream-node-max-bytes 4096
28)stream-node-max-entries 100
29)list-max-ziplist-size -2
30)list-compress-depth 0
31)set-max-intset-entries 512
32)zset-max-ziplist-entries 128
33)zset-max-ziplist-value 64
34)hll-sparse-max-bytes 3000
35)lua-time-limit 5000
36)slowlog-log-slower-than 10000
37)latency-monitor-threshold 0
38)slowlog-max-len 128
39)port 6379
40)cluster-announce-port 0
41)cluster-announce-bus-port 0
42)tcp-backlog 511
43)databases 16
設定資料庫的數量,預設資料庫為0,可以使用SELECT 命令在連線上指定資料庫id。
44)repl-ping-slave-period 10
45)repl-ping-replica-period 10
46)repl-timeout 60
47)repl-backlog-size 1048576
48)repl-backlog-ttl 3600
49)maxclients 10000
指定 Redis 最大記憶體限制,Redis 在啟動時會把資料載入到記憶體中,達到最大記憶體後,Redis 會先嚐試清除已到期或即將到期的 Key,當此方法處理 後,仍然到達最大記憶體設定,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis 新的 vm 機制,會把 Key 存放記憶體,Value 會存放在 swap 區
50)watchdog-period 0
51)slave-priority 100
52)replica-priority 100
53)slave-announce-port 0
見8)
54)replica-announce-port 0
見9)
55)min-slaves-to-write 0
56)min-replicas-to-write 0
57)min-slaves-max-lag 10
58)min-replicas-max-lag 10
59)hz 10
60)cluster-node-timeout 15000
61)cluster-migration-barrier 1
62)cluster-slave-validity-factor 10
63)cluster-replica-validity-factor 10
64)repl-diskless-sync-delay 5
65)tcp-keepalive 0
66)cluster-require-full-coverage yes
67)cluster-slave-no-failover no
68)cluster-replica-no-failover no
69)no-appendfsync-on-rewrite no
70)slave-serve-stale-data yes
71)replica-serve-stale-data yes
72)slave-read-only yes
73)replica-read-only yes
74)slave-ignore-maxmemory yes
75)replica-ignore-maxmemory yes
76)stop-writes-on-bgsave-error yes
77)daemonize no
78)rdbcompression yes
指定儲存至本地資料庫時是否壓縮資料,預設為 yes,Redis 採用 LZF 壓縮,如果為了節省 CPU 時間,可以關閉該選項,但會導致資料庫檔案變的巨大。
79)rdbchecksum yes
80)activerehashing yes
指定是否啟用重置雜湊,預設為開啟。
81)activedefrag no
是否啟用碎片整理。
82)protected-mode yes
83)repl-disable-tcp-nodelay no
84)repl-diskless-sync no
85)aof-rewrite-incremental-fsync yes
86)rdb-save-incremental-fsync yes
87)aof-load-truncated yes
88)aof-use-rdb-preamble yes
89)lazyfree-lazy-eviction no
90)lazyfree-lazy-expire no
91)lazyfree-lazy-server-del no
92)slave-lazy-flush no
93)replica-lazy-flush no
94)dynamic-hz yes
95)maxmemory-policy noeviction
當記憶體使用值到達 maxmemory 時使用的刪除策略,預設值為 noeviction。
注意:在記憶體到達限值,並且沒有合適的鍵被刪除的情況下,無論選擇的是什麼過期策略,Redis 都會返回出錯。
96)loglevel notice
指定日誌記錄級別,Redis 總共支援四個級別:debug、verbose、notice、warning,預設為 notice
97)supervised no
98)appendfsync everysec
指定更新日誌條件,共有 3 個可選值:
- no:表示等作業系統進行資料快取同步到磁碟(快)
- always:表示每次更新操作後手動呼叫 fsync() 將資料寫到磁碟(慢,安全)
- everysec:表示每秒同步一次(折中,預設值)
99)appendonly no
指定是否在每次更新操作後進行日誌記錄,Redis 在預設情況下是非同步的把資料寫入磁碟,如果不開啟,可能會在斷電時導致一段時間內的資料丟失。因為 redis 本身同步資料檔案是按上面 save 條件來同步的,所以有的資料會在一段時間內只存在於記憶體中。預設為 no
100)dir C:\\redis
指定本地資料庫存放目錄
101)save: 900 1 300 10 60 10000
指定在多長時間內,有多少次更新操作,就將資料同步到資料檔案,可以多個條件配合。
Redis 預設配置檔案中提供了三個條件:
save 900 1
save 300 10
save 60 10000
分別表示 900 秒(15 分鐘)內有 1 個更改,300 秒(5 分鐘)內有 10 個更改以及 60 秒內有 10000 個更改。
105)client-output-buffer-limit: normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60
103)unixsocketperm 0
104)slaveof <masterip> <masterport>
設定當本機為 slave 服務時,設定 master 服務的 IP 地址及埠,在 Redis 啟動時,它會自動從 master 進行資料同步
105)notify-keyspace-events
106)bind 127.0.0.1
繫結的主機地址
大概就是這樣了,如果有什麼錯誤或者建議,希望大家從評論區指出,大家一起學習一起進步~