Redis是一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù)具被,它體積輕巧性能又高蛤袒,在企業(yè)中被廣泛使用嘹锁。
安裝Redis
Windows安裝
Redis是為L(zhǎng)inux系統(tǒng)設(shè)計(jì)的艺糜,但是也有團(tuán)隊(duì)為Windows做了移植幢妄。我們可以到這里下載Redis的Windows版本兔仰。
如果使用NuGet或者Chocolatey的話,也可以用這些工具安裝Windows版的Redis蕉鸳。
# Nuget
PM> Install-Package Redis-64
# Chocolatey
choco install redis-64
不過我不準(zhǔn)備使用Windows 移植版的Redis乎赴,因?yàn)镽edis是為L(zhǎng)inux設(shè)計(jì)的,而且大部分公司使用的服務(wù)器也是Linux系統(tǒng)潮尝,所以我們不妨直接學(xué)習(xí)Linux版本Redis的安裝和使用榕吼。
Linux安裝
相比之下,由于Redis一開始就是設(shè)計(jì)在Linux上使用的勉失,所以Linux安裝就比較簡(jiǎn)單了。主流的Linux系統(tǒng)的官方軟件倉(cāng)庫(kù)中應(yīng)該都有Redis軟件度宦,所以直接可以利用相應(yīng)的包管理器安裝告匠。
例如戈抄,在ArchLinux中,使用下面命令就可以安裝redis了后专。
sudo pacman -S redis
對(duì)于其他Linux系統(tǒng),使用它們的包管理器安裝Redis即可裸诽。
安裝完成之后,使用下面的命令啟動(dòng)Redis型凳。
# 讓redis開機(jī)自啟
systemctl enable redis
# 啟動(dòng)redis
systemctl start redis
Docker安裝
其實(shí)最好的辦法還是使用Docker安裝Redis丈冬,由于Docker的容器化特性,我們可以在鏡像中打包一個(gè)配置好的Redis埂蕊。比方說,著名的Gitlab的Docker鏡像中就直接打包了Ruby函似、PostGreSQL喉童、Redis等軟件,我們不需要任何額外配置即可使用整合好的Gitlab堂氯。
首先拉取Redis鏡像祖灰。
docker pull redis
然后啟動(dòng)Redis鏡像畔规,其中name可以修改為自己想要的名字。
docker run --name some-redis -d redis
如果需要持久化數(shù)據(jù)三妈,需要在啟動(dòng)命令中指定數(shù)據(jù)卷莫绣,下面的命令默認(rèn)把數(shù)據(jù)存放到/data
。如果需要自定義數(shù)據(jù)卷的位置模燥,可以使用--volumes-from some-volume-container
或 -v /docker/host/dir:/data
參數(shù)掩宜。
docker run --name some-redis -d redis redis-server --appendonly yes
要使用redis-cli
連接Redis服務(wù)器,使用下面的命令辽旋。
docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
詳細(xì)配置可以參考Docker官方文檔檐迟。
配置Redis
redis.conf
在Linux下,Redis的配置文件默認(rèn)在/etc/redis.conf
(可能根據(jù)操作系統(tǒng)不同而產(chǎn)生變化)溶其。配置文件有很多注釋敦间,仔細(xì)閱讀之后我們就可以配置Redis了。完整的樣例文件可以看這里金闽,techstay/redis.conf。文件看起來很大埠褪,其實(shí)大部分都是注釋挤庇,實(shí)際配置并不多嫡秕。
下面來簡(jiǎn)單介紹一些比較重要的配置。由于我也是剛剛開始學(xué)習(xí)Redis昆咽,所以不會(huì)介紹后面的高級(jí)配置掷酗,這里只介紹最基本最重要的配置。
單位換算
如果需要設(shè)置Redis的內(nèi)存大小和文件大小技肩,就需要設(shè)置具體的數(shù)值浮声。單位換算按照下面的進(jìn)制進(jìn)行換算,不帶b
的是1000
進(jìn)制雳锋,帶b
的是1024
進(jìn)制羡洁。存儲(chǔ)單位不區(qū)分大小寫,所以gb
辛蚊、gB
真仲、GB
等單位都是相同的。
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
IP地址
用bind
配置Redis服務(wù)器所綁定的IP地址虑凛,默認(rèn)情況下是本地回環(huán)地址桑谍。如果不指定的話,Redis就會(huì)運(yùn)行在所有網(wǎng)絡(luò)接口上锣披。
bind 127.0.0.1
不過需要注意雹仿,綁定到所有接口可能會(huì)引起安全問題。所以考慮到安全問題峻仇,最好讓Redis只綁定固定的幾個(gè)接口邑商。
保護(hù)模式
Redis可以運(yùn)行在保護(hù)模式,這需要顯示將保護(hù)模式打開。
protected-mode yes
如果保護(hù)模式打開含鳞,并且:1)沒有顯式使用bind
綁定具體的IP地址芹务;2)沒有設(shè)置密碼,那么Redis只會(huì)監(jiān)聽本地IPv4和IPv6的回環(huán)地址(127.0.0.1
和::1
)以及Unix Domain Sockets熔吗。
端口號(hào)
默認(rèn)端口號(hào)是6379
佳晶,如果需要較高的安全性也可以自定義端口號(hào)。
port 6379
客戶端超時(shí)
當(dāng)客戶端在指定時(shí)間(單位:秒)內(nèi)沒有任何動(dòng)作時(shí)中跌,Redis就會(huì)斷開連接菇篡。默認(rèn)是0驱还,表示不斷開凸克。
timeout 0
TCP連接存貨時(shí)間
這個(gè)參數(shù)指定TCP連接會(huì)保持多少秒闷沥,默認(rèn)是300秒。
tcp-keepalive 300
守護(hù)模式
指定Redis是否以守護(hù)模式運(yùn)行撞鹉。
daemonize no
日志打印
先說說日志級(jí)別颖侄,有debug
览祖、verbose
、notice
和warning
四種日志級(jí)別展蒂,顯示的信息從多到少锰悼。如果需要調(diào)試的話,使用前兩種日志級(jí)別耐薯,如果需要在生產(chǎn)環(huán)境中使用丝里,推薦使用后兩種級(jí)別。默認(rèn)值是notice
臼婆。
loglevel notice
還可以指定日志文件的位置幌绍,如果不指定的話,默認(rèn)會(huì)直接在控制臺(tái)輸出日志信息痢虹。如果Redis作為守護(hù)模式運(yùn)行主儡,而且沒有指定日志文件位置糜值, 那么日志會(huì)輸出到/dev/null
坯墨。
logfile ""
保存到文件
可以設(shè)置Redis定期將內(nèi)存數(shù)據(jù)保存到文件病往,以免服務(wù)器關(guān)閉之后文件丟失停巷。在這里可以設(shè)置多個(gè)值,例如下面第一行表示每隔900秒蕾各,如果至少有1個(gè)鍵發(fā)生改變則保存數(shù)據(jù)庆揪;第三行表示每隔60秒,如果至少10000個(gè)鍵發(fā)生改變則保存數(shù)據(jù)吝羞。
save 900 1
save 300 10
save 60 10000
密碼
使用密碼可以提高Redis服務(wù)器的安全性内颗。需要注意均澳,由于Redis的高性能特性,一個(gè)用戶一秒鐘最高可以嘗試15萬次密碼负懦。所以為了保證安全性纸厉,密碼需要盡量設(shè)置的長(zhǎng)一些五嫂。
requirepass foobared
配置文件還有其他一些配置,我就不介紹了躯枢。如果需要更詳細(xì)的配置可以直接查看配置文件的注釋槐臀,對(duì)于每個(gè)配置項(xiàng)都有詳細(xì)的介紹水慨。
Docker配置
Docker的Redis鏡像沒有redis.conf
文件敬扛,如果你需要這個(gè)文件來配置Redis朝抖,可以自己打包一個(gè)包含redis.conf
的鏡像治宣。這需要編寫類似下面這樣的Dockerfile
。
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
當(dāng)然其實(shí)完全不用這么麻煩坏怪,直接在啟動(dòng)Redis鏡像的時(shí)候就可以指定配置文件的位置豌拙。這種辦法比較靈活按傅,而且很簡(jiǎn)單,所以如果沒有特別需求的話這樣就可以了唯绍。
docker run -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis redis redis-server /usr/local/etc/redis/redis.conf
使用Redis
redis-cli
首先來介紹一下Redis的命令行工具redis-cli
况芒,我們對(duì)Redis服務(wù)器進(jìn)行操作主要通過它來進(jìn)行。
如果要查看幫助信息耐版,可以使用redis-cli --help
命令压汪,下面列出了一部分輸出止剖。
# redis-cli --help
redis-cli 3.2.8
Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h <hostname> Server hostname (default: 127.0.0.1).
-p <port> Server port (default: 6379).
-s <socket> Server socket (overrides hostname and port).
-a <password> Password to use when connecting to the server.
如果主機(jī)名和端口號(hào)都是默認(rèn)值的話,可以直接輸入redis-cli
進(jìn)入交互式界面亭引。如果需要連接到其他主機(jī)上的Redis服務(wù)器皮获,可以使用-h
參數(shù)指定主機(jī)名,使用-p
參數(shù)指定端口號(hào)购公,使用-a
參數(shù)指定密碼君丁。
# redis-cli
127.0.0.1:6379>
Redis命令
進(jìn)入交互式界面之后,我們可以使用Redis提供的各種命令操作服務(wù)器了橡庞。Redis的命令有很多印蔗,作用也各不相同。大家可以到Redis Command查看所有命令和用途吧趣。如果不喜歡英文的話强挫,可以查看Redis 命令參考薛躬,這是漢化過的命令文檔。
存取數(shù)據(jù)
這里我就列舉一些常用的命令八匠。首先是存取命令趴酣,使用set 鍵 值
來保存一個(gè)數(shù)據(jù)岖寞,保存成功后會(huì)返回OK
。
127.0.0.1:6379> set fuck fuck
OK
保存之后床嫌,可以使用get 鍵
來獲取這個(gè)值胸私。
127.0.0.1:6379> get fuck
"fuck"
查詢鍵
keys 模式
用于查詢符合模式的鍵的名字岁疼,支持的查詢方式是GLOB類型的,支持*
瑰排、?
暖侨、[a-b]
、[^a]
等通配符京郑。
127.0.0.1:6379> keys *
1) "fuck"
2) "food_num"
配置Redis
和存取命令類似葫掉,還有config get
和config set
用于獲取和設(shè)置配置文件中的配置俭厚。比如說,要獲取配置文件的所有值叼丑,使用下面的命令扛门。
127.0.0.1:6379> config get *
再比如尖飞,如果要設(shè)置Redis的登錄密碼,可以這么做贞铣。然后退出redis-cli
并重新連接沮明,即可生效。
127.0.0.1:6379> config set requirepass 123456
認(rèn)證
如果Redis服務(wù)器設(shè)置了密碼酱畅,在進(jìn)行任何操作之前都需要認(rèn)證才能進(jìn)行纺酸,否則會(huì)提示NOAUTH
址否。
127.0.0.1:6379> get food_num
(error) NOAUTH Authentication required.
這時(shí)候需要使用auth
命令進(jìn)行認(rèn)證,才能繼續(xù)操作樊诺。
127.0.0.1:6379> auth 123456
當(dāng)然词爬,也可以直接在redis-cli
連接的時(shí)候使用-a
參數(shù)指定密碼。
redis-cli -a 123456
超時(shí)和持久
可以使用expire
命令為一個(gè)鍵設(shè)置超時(shí)值(單位:秒)痪寻,在這里時(shí)間之后該值會(huì)被刪除虽惭。
127.0.0.1:6379> expire fuck 10
(integer) 1
如果10秒之后再次查看該值,會(huì)發(fā)現(xiàn)已經(jīng)不存在了芽唇。
127.0.0.1:6379> get fuck
(nil)
相應(yīng)的匆笤,還有persist
命令,會(huì)將該數(shù)據(jù)的超時(shí)值取消庶诡,這樣只要數(shù)據(jù)庫(kù)還在咆课,這個(gè)數(shù)據(jù)就會(huì)一直存在书蚪。
127.0.0.1:6379> persist fuck
(integer) 0
除了使用expire
命令為已存在的值設(shè)置超時(shí)值,還可以在設(shè)置數(shù)據(jù)的時(shí)候直接指定超時(shí)值晴玖。
set key 100 ex 10
在指定了超時(shí)值之后呕屎,可以使用ttl
命令查看距離超時(shí)值還剩多少時(shí)間敬察。
127.0.0.1:6379> ttl fuck
(integer) 17
退出
最后,可以使用quit
命令退出命令行界面琅催。