天天看點

安裝和使用Redis

Redis是一個高性能的記憶體資料庫,它體積輕巧性能又高,在企業中被廣泛使用。

安裝Redis

Windows安裝

Redis是為Linux系統設計的,但是也有團隊為Windows做了移植。我們可以到

這裡

下載下傳Redis的Windows版本。

如果使用NuGet或者Chocolatey的話,也可以用這些工具安裝Windows版的Redis。

# Nuget
PM> Install-Package Redis-64

# Chocolatey
choco install redis-64
           

不過我不準備使用Windows 移植版的Redis,因為Redis是為Linux設計的,而且大部分公司使用的伺服器也是Linux系統,是以我們不妨直接學習Linux版本Redis的安裝和使用。

Linux安裝

相比之下,由于Redis一開始就是設計在Linux上使用的,是以Linux安裝就比較簡單了。主流的Linux系統的官方軟體倉庫中應該都有Redis軟體,是以直接可以利用相應的包管理器安裝。

例如,在ArchLinux中,使用下面指令就可以安裝redis了。

sudo pacman -S redis
           

對于其他Linux系統,使用它們的包管理器安裝Redis即可。

安裝和使用Redis

ArchLinux安裝

安裝完成之後,使用下面的指令啟動Redis。

# 讓redis開機自啟
systemctl enable redis

# 啟動redis
systemctl start redis

           

Docker安裝

其實最好的辦法還是使用Docker安裝Redis,由于Docker的容器化特性,我們可以在鏡像中打包一個配置好的Redis。比方說,著名的Gitlab的Docker鏡像中就直接打包了Ruby、PostGreSQL、Redis等軟體,我們不需要任何額外配置即可使用整合好的Gitlab。

首先拉取Redis鏡像。

docker pull redis
           

然後啟動Redis鏡像,其中name可以修改為自己想要的名字。

docker run --name some-redis -d redis
           

如果需要持久化資料,需要在啟動指令中指定資料卷,下面的指令預設把資料存放到

/data

。如果需要自定義資料卷的位置,可以使用

--volumes-from some-volume-container

-v /docker/host/dir:/data

參數。

docker run --name some-redis -d redis redis-server --appendonly yes
           

要使用

redis-cli

連接配接Redis伺服器,使用下面的指令。

docker run -it --link some-redis:redis --rm redis redis-cli -h redis -p 6379
           

詳細配置可以參考

Docker官方文檔

配置Redis

redis.conf

在Linux下,Redis的配置檔案預設在

/etc/redis.conf

(可能根據作業系統不同而産生變化)。配置檔案有很多注釋,仔細閱讀之後我們就可以配置Redis了。完整的樣例檔案可以看這裡,

techstay/redis.conf

。檔案看起來很大,其實大部分都是注釋,實際配置并不多。

下面來簡單介紹一些比較重要的配置。由于我也是剛剛開始學習Redis,是以不會介紹後面的進階配置,這裡隻介紹最基本最重要的配置。

機關換算

如果需要設定Redis的記憶體大小和檔案大小,就需要設定具體的數值。機關換算按照下面的進制進行換算,不帶

b

的是

1000

進制,帶

b

1024

進制。存儲機關不區分大小寫,是以

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伺服器所綁定的IP位址,預設情況下是本地回環位址。如果不指定的話,Redis就會運作在所有網絡接口上。

bind 127.0.0.1
           

不過需要注意,綁定到所有接口可能會引起安全問題。是以考慮到安全問題,最好讓Redis隻綁定固定的幾個接口。

保護模式

Redis可以運作在保護模式,這需要顯示将保護模式打開。

protected-mode yes
           

如果保護模式打開,并且:1)沒有顯式使用

bind

綁定具體的IP位址;2)沒有設定密碼,那麼Redis隻會監聽本地IPv4和IPv6的回環位址(

127.0.0.1

::1

)以及Unix Domain Sockets。

端口号

預設端口号是

6379

,如果需要較高的安全性也可以自定義端口号。

port 6379
           

用戶端逾時

當用戶端在指定時間(機關:秒)内沒有任何動作時,Redis就會斷開連接配接。預設是0,表示不斷開。

timeout 0
           

TCP連接配接存貨時間

這個參數指定TCP連接配接會保持多少秒,預設是300秒。

tcp-keepalive 300
           

守護模式

指定Redis是否以守護模式運作。

daemonize no
           

日志列印

先說說日志級别,有

debug

verbose

notice

warning

四種日志級别,顯示的資訊從多到少。如果需要調試的話,使用前兩種日志級别,如果需要在生産環境中使用,推薦使用後兩種級别。預設值是

notice

loglevel notice
           

還可以指定日志檔案的位置,如果不指定的話,預設會直接在控制台輸出日志資訊。如果Redis作為守護模式運作,而且沒有指定日志檔案位置, 那麼日志會輸出到

/dev/null

logfile ""
           

儲存到檔案

可以設定Redis定期将記憶體資料儲存到檔案,以免伺服器關閉之後檔案丢失。在這裡可以設定多個值,例如下面第一行表示每隔900秒,如果至少有1個鍵發生改變則儲存資料;第三行表示每隔60秒,如果至少10000個鍵發生改變則儲存資料。

save 900 1
save 300 10
save 60 10000
           

密碼

使用密碼可以提高Redis伺服器的安全性。需要注意,由于Redis的高性能特性,一個使用者一秒鐘最高可以嘗試15萬次密碼。是以為了保證安全性,密碼需要盡量設定的長一些。

requirepass foobared
           

配置檔案還有其他一些配置,我就不介紹了。如果需要更詳細的配置可以直接檢視配置檔案的注釋,對于每個配置項都有詳細的介紹。

Docker配置

Docker的Redis鏡像沒有

redis.conf

檔案,如果你需要這個檔案來配置Redis,可以自己打包一個包含

redis.conf

的鏡像。這需要編寫類似下面這樣的

Dockerfile

FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
           

當然其實完全不用這麼麻煩,直接在啟動Redis鏡像的時候就可以指定配置檔案的位置。這種辦法比較靈活,而且很簡單,是以如果沒有特别需求的話這樣就可以了。

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

,我們對Redis伺服器進行操作主要通過它來進行。

如果要檢視幫助資訊,可以使用

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.
           

如果主機名和端口号都是預設值的話,可以直接輸入

redis-cli

進入互動式界面。如果需要連接配接到其他主機上的Redis伺服器,可以使用

-h

參數指定主機名,使用

-p

參數指定端口号,使用

-a

參數指定密碼。

# redis-cli
127.0.0.1:6379>
           

Redis指令

進入互動式界面之後,我們可以使用Redis提供的各種指令操作伺服器了。Redis的指令有很多,作用也各不相同。大家可以到

Redis Command

檢視所有指令和用途。如果不喜歡英文的話,可以檢視

Redis 指令參考

,這是漢化過的指令文檔。

存取資料

這裡我就列舉一些常用的指令。首先是存取指令,使用

set 鍵 值

來儲存一個資料,儲存成功後會傳回

OK

127.0.0.1:6379> set fuck fuck
OK
           

儲存之後,可以使用

get 鍵

來擷取這個值。

127.0.0.1:6379> get fuck
"fuck"
           

查詢鍵

keys 模式

用于查詢符合模式的鍵的名字,支援的查詢方式是GLOB類型的,支援

*

?

[a-b]

[^a]

等通配符。

127.0.0.1:6379> keys *
1) "fuck"
2) "food_num"
           

和存取指令類似,還有

config get

config set

用于擷取和設定配置檔案中的配置。比如說,要擷取配置檔案的所有值,使用下面的指令。

127.0.0.1:6379> config get *
           

再比如,如果要設定Redis的登入密碼,可以這麼做。然後退出

redis-cli

并重新連接配接,即可生效。

127.0.0.1:6379> config set requirepass 123456
           

認證

如果Redis伺服器設定了密碼,在進行任何操作之前都需要認證才能進行,否則會提示

NOAUTH

127.0.0.1:6379> get food_num
(error) NOAUTH Authentication required.
           

這時候需要使用

auth

指令進行認證,才能繼續操作。

127.0.0.1:6379> auth 123456
           

當然,也可以直接在

redis-cli

連接配接的時候使用

-a

redis-cli -a 123456

           

逾時和持久

可以使用

expire

指令為一個鍵設定逾時值(機關:秒),在這裡時間之後該值會被删除。

127.0.0.1:6379> expire fuck 10
(integer) 1
           

如果10秒之後再次檢視該值,會發現已經不存在了。

127.0.0.1:6379> get fuck
(nil)
           

相應的,還有

persist

指令,會将該資料的逾時值取消,這樣隻要資料庫還在,這個資料就會一直存在。

127.0.0.1:6379> persist fuck
(integer) 0
           

除了使用

expire

指令為已存在的值設定逾時值,還可以在設定資料的時候直接指定逾時值。

set key 100 ex 10
           

在指定了逾時值之後,可以使用

ttl

指令檢視距離逾時值還剩多少時間。

127.0.0.1:6379> ttl fuck
(integer) 17
           

退出

最後,可以使用

quit

指令退出指令行界面。

繼續閱讀