自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NoSQL數(shù)據(jù)庫:Redis高級(jí)實(shí)用技巧

數(shù)據(jù)庫 Redis
Redis可通過命令行的方式進(jìn)行數(shù)據(jù)庫配置,也可以通過配置文件的方式進(jìn)行數(shù)據(jù)庫配置。由于數(shù)據(jù)庫的配置選項(xiàng)較多,使用命令行的方式并不簡(jiǎn)便,因此數(shù)據(jù)庫開發(fā)和管理人員大多采用修改配置文件的方式進(jìn)行數(shù)據(jù)庫配置。

配置

Redis可通過命令行的方式進(jìn)行數(shù)據(jù)庫配置,也可以通過配置文件的方式進(jìn)行數(shù)據(jù)庫配置。由于數(shù)據(jù)庫的配置選項(xiàng)較多,使用命令行的方式并不簡(jiǎn)便,因此數(shù)據(jù)庫開發(fā)和管理人員大多采用修改配置文件的方式進(jìn)行數(shù)據(jù)庫配置。

Redis配置文件位于Redis安裝目錄下,名為redis.conf。在本書前面章節(jié)中已經(jīng)介紹過Redis配置文件中的部分配置項(xiàng),如參數(shù)port修改端口號(hào),參數(shù)daemonize啟動(dòng)守護(hù)進(jìn)程,參數(shù)databases修改數(shù)據(jù)庫的數(shù)量。除此之外Redis還支持其他配置選項(xiàng),如是否開啟持久化、日志級(jí)別等。

Redis多個(gè)數(shù)據(jù)庫之間并不是完全隔離的,且Redis并不支持為每個(gè)數(shù)據(jù)庫設(shè)置不同的訪問密碼。客戶端訪問數(shù)據(jù)庫時(shí),要么沒有權(quán)限訪問任意一個(gè)數(shù)據(jù)庫,要么能訪問所有數(shù)據(jù)庫。使用FLUSHALL命令可以清空一個(gè)Redis實(shí)例中所有數(shù)據(jù)庫中的數(shù)據(jù)。

備份與恢復(fù)

Redis非常輕量級(jí),一個(gè)空的Redis占用的內(nèi)存只有1MB左右,即使多個(gè)Redis實(shí)例也不存在額外占用很多內(nèi)存的問題,因此建議不同的應(yīng)用使用不同的Redis實(shí)例存儲(chǔ)數(shù)據(jù)。

由于Redis所有數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,當(dāng)Redis數(shù)據(jù)備份定期地通過異步方式保存到磁盤上時(shí),該方式稱為半持久化模式。當(dāng)每一次的數(shù)據(jù)變化都寫入aof文件里面時(shí),則稱為全持久化模式。

Redis提供的兩種不同的持久化方法中,半持久化RDB(Redis DataBase)方式,是在不同的時(shí)間點(diǎn),將Redis存儲(chǔ)的數(shù)據(jù)生成快照并存儲(chǔ)到磁盤等介質(zhì)中;而全持久化AOF(Append Only File)方式,是將Redis執(zhí)行過的所有寫指令(每秒鐘)記錄在日志中,在下次Redis重新啟動(dòng)時(shí),將這些指令從前到后再重復(fù)執(zhí)行一遍,恢復(fù)數(shù)據(jù)。

RDB更適合數(shù)據(jù)備份,默認(rèn)開啟;而AOF更適合用來保存數(shù)據(jù),默認(rèn)關(guān)閉。具體的持久化方式可以根據(jù)業(yè)務(wù)的特點(diǎn)來定,單獨(dú)使用其中一種方式或者組合使用都可以。這里講解一下單獨(dú)采用RDB或AOF進(jìn)行數(shù)據(jù)持久化的缺點(diǎn),讀者在具體使用中應(yīng)根據(jù)業(yè)務(wù)承受的能力進(jìn)行選擇,如下所示。

(1)單獨(dú)使用RDB時(shí)。因?yàn)镽DB持久化方式是周期性地進(jìn)行快照備份,若在兩個(gè)備份節(jié)點(diǎn)間服務(wù)器意外宕機(jī),所有從上次進(jìn)行快照的時(shí)間節(jié)點(diǎn)到服務(wù)器宕機(jī)時(shí)所產(chǎn)生的數(shù)據(jù)將全部丟失。

(2)單獨(dú)使用AOF時(shí)。AOF機(jī)制將Redis執(zhí)行的每一條命令全部追加到磁盤中,大量數(shù)據(jù)的寫入會(huì)降低服務(wù)器及Redis的性能,服務(wù)器可能會(huì)反應(yīng)遲鈍或出現(xiàn)卡頓現(xiàn)象。

除此之外,Redis也支持同時(shí)開啟RDB和AOF。系統(tǒng)重啟后,Redis會(huì)優(yōu)先使用AOF來恢復(fù)數(shù)據(jù),將數(shù)據(jù)的損失降低到最小。RDB可以視為冷備,在AOF文件丟失或損壞不可用的時(shí)候,使用RDB來進(jìn)行數(shù)據(jù)的快速恢復(fù)。

1.半持久化RDB模式

開啟自動(dòng)快照。在redis.conf配置文件中SAVE配置項(xiàng)有2個(gè)值,具體如下所示。

# Save the DB to disk.
#
# save  [ ...]
#save <指定時(shí)間間隔> <執(zhí)行指定次數(shù)更新操作>
……省略部分代碼……
save 300 5

SAVE參數(shù)的兩個(gè)值分別為:指定間隔時(shí)間和改動(dòng)的鍵的個(gè)數(shù),表示300秒內(nèi)有5個(gè)更改,則將內(nèi)存中的數(shù)據(jù)快照寫入磁盤。該配置項(xiàng)的意義為,當(dāng)在指定的時(shí)間內(nèi)被更改的鍵的個(gè)數(shù)大于指定的個(gè)數(shù)時(shí),Redis會(huì)自動(dòng)將內(nèi)存中的所有數(shù)據(jù)進(jìn)行快照,并創(chuàng)建dump.rdb文件存儲(chǔ)在硬盤上,以此完成數(shù)據(jù)備份。

禁用自動(dòng)快照,只需要將所有的SAVE參數(shù)刪除即可。使用SAVE命令創(chuàng)建當(dāng)前數(shù)據(jù)庫的備份,,具體如下所示。

127.0.0.1:6379> SAVE 
輸出結(jié)果:
OK

SAVE命令默認(rèn)將備份文件dump.rdb保存至Redis的安裝目錄,查看備份文件所在的Redis安裝目錄具體如下所示。

127.0.0.1:6379> CONFIG GET dir
輸出結(jié)果:
1) "dir"
2) "/"

也可以使用BGSAVE命令,將SAVE命令放至后臺(tái)運(yùn)行,具體如下所示。

127.0.0.1:6379> BGSAVE
輸出結(jié)果:
Background saving started

兩個(gè)命令的區(qū)別在于,SAVA命令執(zhí)行時(shí)會(huì)阻塞Redis服務(wù)器進(jìn)程,直至備份過程結(jié)束。而BGSAVE命令則會(huì)創(chuàng)建一個(gè)子程序,不影響Redis服務(wù)器的父進(jìn)程。

進(jìn)行數(shù)據(jù)備份前查看數(shù)據(jù)庫包含鍵的數(shù)量及具體情況,具體如下所示。

127.0.0.1:6379> DBSIZE
輸出結(jié)果:
 (integer) 17
127.0.0.1:6379> KEYS *
輸出結(jié)果:
 1) "city2"
 2) "subject2"
 3) "website3"
 4) "website4"
 5) "city3"
 6) "website2"
 7) "city1"
 8) "newbook"
 9) "computer"
10) "website9"
11) "fruits"
12) "subject1"
13) "website"
14) "web"
15) "drinks"
16) "website1"
17) "stock"

由上述結(jié)果可知,當(dāng)前數(shù)據(jù)庫中含有17條數(shù)據(jù)。

為了演示備份數(shù)據(jù)的恢復(fù),先將備份數(shù)據(jù)移動(dòng)到其他文件夾,防止丟失,然后使用FLUSHDB命令刪除當(dāng)前數(shù)據(jù)庫的數(shù)據(jù),具體如下所示。

[root@qfedu ~]# mv /dump.rdb /data/
//清空當(dāng)前數(shù)據(jù)庫
127.0.0.1:6379> FLUSHDB 
輸出結(jié)果:
OK
127.0.0.1:6379> KEYS *
輸出結(jié)果:
 (empty array)

由上述結(jié)果可知,當(dāng)前數(shù)據(jù)庫為空。

使用systemctl stop redis命令模擬數(shù)據(jù)庫宕機(jī)?;謴?fù)數(shù)據(jù)時(shí),將備份文件dump.rdb移動(dòng)到Redis的安裝目錄下,然后啟動(dòng)服務(wù)即可完成,具體如下所示。

[root@qfedu ~]# systemctl stop redis 
[root@qfedu ~]# cp /tmp/dump.rdb /
[root@qfedu ~]# systemctl start redis

最后,查看Redis數(shù)據(jù)庫,驗(yàn)證數(shù)據(jù)是否恢復(fù),具體如下所示。

127.0.0.1:6379> ping
輸出結(jié)果:
PONG
127.0.0.1:6379> KEYS *
輸出結(jié)果:
 1) "city2"
 2) "subject2"
 3) "website3"
 4) "website4"
 5) "city3"
 6) "website2"
 7) "city1"
 8) "newbook"
 9) "computer"
10) "website9"
11) "fruits"
12) "subject1"
13) "website"
14) "web"
15) "drinks"
16) "website1"
17) "stock"

由上述結(jié)果可知,數(shù)據(jù)已經(jīng)被成功恢復(fù)。

2.全持久化AOF模式

AOF方式通過日志記錄每個(gè)寫操作,并追加到文件中。AOF文件的保存位置是通過dir參數(shù)設(shè)置的,默認(rèn)的文件名是appendonly.aof,可以通過appendfilename參數(shù)修改該名稱。

AOF持久化的參數(shù)配置如下所示。

(1) appendonly yes:開啟AOF持久化功能;

(2) appendfilename appendonly.aof:AOF持久化保存文件名;

(3) appendfsync always:每次執(zhí)行寫入都會(huì)執(zhí)行同步,最安全也最慢;

(4) #appendfsync everysec:每秒執(zhí)行一次同步操作;

(5) #appendfsync no:不主動(dòng)進(jìn)行同步操作,而是完全交由操作系統(tǒng)來做,每30秒一次,最快也最不安全;

(6) auto-aof-rewrite-percentage 100:當(dāng)AOF文件大小超過上一次重寫時(shí)的AOF文件大小的百分之多少時(shí)會(huì)再次進(jìn)行重寫,如果之前沒有重寫過,則以啟動(dòng)時(shí)的AOF文件大小為依據(jù);

(7) auto-aof-rewrite-min-size 64mb:允許重寫的最小AOF文件大小,配置寫入AOF文件后,要求系統(tǒng)刷新硬盤緩存的機(jī)制。

若只配置了AOF,當(dāng)重啟Redis服務(wù)時(shí),Redis會(huì)加載AOF文件,通過逐個(gè)執(zhí)行AOF文件中的命令將數(shù)據(jù)載入到內(nèi)存中。

批量執(zhí)行

在實(shí)際應(yīng)用中,會(huì)出現(xiàn)大量用戶在一定時(shí)間內(nèi)產(chǎn)生大量數(shù)據(jù)的狀況,而這些數(shù)據(jù)需要被快速的創(chuàng)建與裝載。前文已經(jīng)講解了如何通過一條條指令實(shí)現(xiàn)插入數(shù)據(jù)以及管理數(shù)據(jù),接下來講解如何批量的執(zhí)行多條Redis命令。

創(chuàng)建一個(gè)txt文件,將需要執(zhí)行的命令寫入文件中,每一行即代表一條命令。假設(shè)命令如下所示。

SET k1 v1
SET k2 "www.fengyunedu.cn"
RPUSH list3 "a1" "b2" "c3" "d4"
SADD sset4 one two three
HSET hash5 hsk1 "hsv1"
ZADD zset6 300 "E" 200 "F" 400 "G"
MSET k3 v3 k4 v4 k5 v5

假設(shè)將該文件命名為data1.txt,并存儲(chǔ)在“/”目錄下。為達(dá)到更明顯的實(shí)驗(yàn)效果,需清空數(shù)據(jù)庫中的所有數(shù)據(jù),具體如下所示。

127.0.0.1:6379> FLUSHALL
輸出結(jié)果:
OK
127.0.0.1:6379> KEYS *
輸出結(jié)果:
(empty array)

使用cat命令批量執(zhí)行命令文件,具體如下所示。

[root@qfedu ~]# cat /data1.txt | redis-cli 
OK
OK
(integer) 4
(integer) 3
(integer) 1
(integer) 3
OK

為了進(jìn)一步驗(yàn)證命令文件是否執(zhí)行成功,可通過KEYS命令查看Redis數(shù)據(jù)庫中的全部數(shù)據(jù),具體如下所示。

127.0.0.1:6379> KEYS *
輸出結(jié)果:
1) "sset4"
2) "k3"
3) "zset6"
4) "k5"
5) "k2"
6) "k1"
7) "hash5"
8) "list3"
9) "k4"

圖形化管理工具

Redis數(shù)據(jù)庫管理不僅支持Redis-cli命令行工具,還支持多種交互性友好的圖形化管理工具。針對(duì)Redis數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)為鍵值對(duì)類型的特點(diǎn),簡(jiǎn)單介紹5個(gè)知名的Redis圖型化管理工具,如下所示。

(1)Redis Desktop Manager是一款基于Qt5的跨平臺(tái)Redis可視化桌面管理工具,也是目前為止使用率最廣的可視化工具。它支持全平臺(tái),例如Windows(Windows 7以上版本)、Linux、MacOS等。

(2)Another Redis Desktop Manager是GitHub上的一個(gè)開源項(xiàng)目,不僅開源,而且提供在Windows、macOS上平臺(tái)的安裝包,體積小,完全免費(fèi)。

(3)Medis是Mac系統(tǒng)上一款界面美觀,而且易于使用的Redis數(shù)據(jù)庫管理工具。

(4)RedisView是一個(gè)開源跨平臺(tái)的國產(chǎn)Redis圖形化界面工具。

(5)FastoRedis是一個(gè)跨平臺(tái)的Redis數(shù)據(jù)庫管理軟件,也是收費(fèi)軟件,方便進(jìn)行Redis集群監(jiān)控和管理。

接下來以Another Redis Desktop Manager為例,演示使用圖形化工具管理Redis數(shù)據(jù)庫。

在GitHub或者Gitee(開源中國)網(wǎng)站下載Another Redis Desktop Manager軟件包,然后安裝該軟件。雙擊打開該軟件,通過設(shè)置選項(xiàng)將頁面設(shè)置為簡(jiǎn)體中文,利于用戶操作界面。

單擊“確定”按鈕,然后新建一個(gè)連接,填寫Redis數(shù)據(jù)庫信息,連接Redis數(shù)據(jù)庫。

該軟件正在對(duì)Redis數(shù)據(jù)庫進(jìn)行遠(yuǎn)程連接,因此需要提前開啟Redis數(shù)據(jù)庫的端口,關(guān)閉本地保護(hù)模式以及關(guān)閉僅限本地連接的配置項(xiàng),最后關(guān)閉系統(tǒng)的防火墻,具體如下所示。

[root@qfedu ~]# vim /etc/redis/6379.conf 
……
protected-mode no  #將值yes改為no
#bind 127.0.0.1 -::1  #注釋該配置項(xiàng)
……
[root@qfedu ~]# systemctl stop firewalld
[root@qfedu ~]# systemctl disable firewalld

回到軟件連接界面,連接Redis數(shù)據(jù)庫

單擊刷新按鈕,可呈現(xiàn)Redis數(shù)據(jù)庫及所在系統(tǒng)的相關(guān)信息。至此,Redis數(shù)據(jù)庫圖形管理工具已經(jīng)安裝并成功連接數(shù)據(jù)庫,用戶可通過相關(guān)提示對(duì)數(shù)據(jù)庫進(jìn)行自主操作。

責(zé)任編輯:華軒 來源: 運(yùn)維book思議
相關(guān)推薦

2010-01-18 17:45:33

VB.NET線程訪問數(shù)

2012-08-06 16:09:40

Redis數(shù)據(jù)庫

2009-09-04 10:27:28

Linux實(shí)用技巧linux操作系統(tǒng)linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2019-03-20 15:59:11

NoSQLRedis數(shù)據(jù)庫

2009-01-03 09:34:30

ASP.NET.NET性能優(yōu)化

2011-04-08 15:40:01

Oracle認(rèn)證

2022-10-11 08:00:47

多線程開發(fā)技巧

2022-11-03 10:28:59

PandasSAC機(jī)制

2024-05-17 08:52:43

SQL實(shí)用技巧行列轉(zhuǎn)換

2010-09-14 10:41:24

DIV+CSS排版

2009-12-09 11:21:30

Linux實(shí)用技巧

2010-10-08 15:44:17

vim

2019-11-25 10:12:59

Python技巧工具

2019-12-22 23:10:19

LinuxSSH加密

2009-12-23 17:32:35

Linux構(gòu)建軟路由

2019-10-10 16:31:51

PyCharmPythonWindows

2011-07-06 16:36:40

Redis

2020-05-20 13:06:20

UI排版設(shè)計(jì)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)