Redis簡介
Redis是一個開源的key-value數據庫,由C語言編寫,對多種編程語言提供了支持。
Redis的特點
- 是內存數據庫,數據存儲在內存中,性能極高
-
支持數據的持久化,可以將內存中的數據持久化到硬盤
-
支持數據備份,redis存儲的數據有2份,一份在內存中,一份持久化到硬盤,會自動同步到硬盤
- 支持hash,list,set,zset(sorted set)等多種數據結構
-
支持事務,可使用MULTI、EXEC指令將多個操作包起來作為一個事務
-
特性豐富,提供發布/訂閱、通知、 key 過期等特性
redis常見的使用場景
- 緩存數據庫查詢結果
- 分布式系統的數據共享,比如session共享
- 任務隊列,比如存儲秒殺、搶購、搶票等用戶|訂單隊列
- 數據過期處理,設置一個過期時間,到期自動刪除該數據
Linux下安裝Redis
1、安裝gcc
redis需要自己編譯,redis是c語言寫的,所以需要安裝c語言的編譯器gcc。
先看下是否安裝了gcc,沒有安裝就裝上。
yum list --installed | grep gcc
yum install gcc
2、/usr/local下新建目錄redis,將redis下載至該目錄,解壓,刪除壓縮包
mkdir /usr/local/redis
cd /usr/local/redis
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
tar -xzvf redis-5.0.7.tar.gz
rm redis-5.0.7.tar.gz
3、切換到解壓目錄下,編譯
cd redis-5.0.7
make
4、安裝redis
make install PREFIX=/usr/local/redis
指定安裝目錄為/usr/local/redis 。安裝完成后,redis/bin下有2個文件:redis-server、redis-cli。
redis-server是redis的服務器,即redis數據庫;redis-cli是redis客戶端,用來操作redis數據庫。
解壓的目錄里的很多程序、配置文件后續還要使用,不能刪除。
把redis作為服務,開機自啟
redis下新建目錄conf,把解壓目錄下的redis.conf復制到conf下;
redis下新建目錄logs,logs下新建文件redis.log;
redis下新建目錄data。
運行解壓目錄下的utils/install_server.sh
utils/install_server.sh
根據提示,選擇路徑:
其實只需指定配置文件、redis-server的路徑即可,但默認的日志保存位置、redis-server數據保存位置東一個、西一個,不好記、用時不好找,
我們自己新建文件|目錄,統一放在redis下。
檢查一下設置,按Enter安裝服務,如果路徑寫錯了按Ctrl+C取消安裝,從頭開始即可。
安裝好以后,看到/etc/init.d下生成了一個redis_6379腳本文件,Linux啟動時會自動執行init.d下的腳本。
安裝服務以后,默認自動開啟redis-server,並且redis-server會開機自啟。
和tomcat、redis不一樣,tomcat、redis直接在/etc/rc.d/rc.local中寫上路徑即可開機自啟,redis要指定的路徑很多,需要單獨用腳本來啟動(指定路徑)。
分析
install_server.sh的執行過程其實就是:
把utils/redis_init_script拷到/etc/init.d下,重命名為redis_$port,根據我們設置的端口號、路徑來修改redis_init_script中對應的部分,
然后把redis添加為服務、將redis服務設置為開機啟動。
redis_init_script是一個服務腳本,包含了啟動、關閉redis-server的命令。
我們看一下redis_init_script的部分代碼:
第一處是把redis添加為服務,第二處是把設置redis服務的開機啟動(在/etc/rc.d下添加redis_$port腳本)。
設置的服務名是redis_${REDIS_PORT},端口號一般是6379,所以服務名一般是redis_6379,
看不順眼的可以在安裝服務前把里面的redis_${REDIS_PORT}全部替換為redis,這樣服務名就是redis了。
所以也可以自己把utils/redis_init_script拷到/etc/init.d下,重命名這個文件,修改里面的配置,
然后chkconfig添加為服務、設置開啟等級,
至於開機啟動服務,可以把/etc/init.d下的服務腳本拷到/etc/rc.d/init.d下,開機會自動執行/etc/rc.d/init.d下的腳本;
或者在/etc/rc.d/rc.local中添加/etc/init.d下服務腳本的路徑,開機會自動執行/etc/rc.d/rc.local中指定的腳本文件;
或者直接使用 chkconfig | systemctl 將服務設置為開機自啟,都可以。
防火牆設置
Linux防火牆要開放6379端口,外部機器才能連接redis服務器。
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
需要重啟防火牆才會生效,不然你看到顯示success開啟成功,但外部機器依然連不上。
指定Redis服務器的ip地址
編輯redis.conf:
vim conf/redis.conf
/bind 搜索關鍵字bind,將ip修改為Linux的ip地址:
注意是虛線下面的那個。
默認Redis服務器的ip是127.0.0.1,只能在Linux本地才能連接上,打開了防火牆的6379端口,外部也連不上。
需要修改為Linux的ip地址。
重啟redis才會生效:
service redis_6379 restart
redis服務器啟動|關閉的3種方式
1、前台啟動
直接運行redis/bin下的redis-server,啟動后終端的這個標簽頁不能再使用,需要新建一個標簽頁來操作。
Ctrl+C或直接關閉redis所在標簽頁,即可關閉redis服務器。
不方便,不推薦使用。
Ctrl+C可取消|停止Linux終端正在執行的命令,C即cancel。
2、后台啟動
(1)修改redis.conf,將daemonize設置為yes
vim conf/redis.conf
一進去就是命令模式,/daemonize查找:
默認是no,將它改為yes,設置為守護進程,這樣啟動redis服務器時會后台啟動,前台沒有啟動界面。
(2)啟動redis服務器
./redis-server conf/redis.conf
就是執行bin下面的redis-server,傳入配置文件的路徑。
(3)關閉redis服務器
./redis-cli shutdown
通過redis客戶端,向redis服務器發送關閉命令。
3、服務方式
方式一:
service redis_6379 start
service redis_6379 stop
方式二:
systemctl start redis_6379
systemctl stop redis_6379
每個人設置的服務名可能不一致,我的是redis_6379。
服務方式的好處:
- 不必cd到指定目錄
- 我們安裝服務時指定了配置文件的位置,所以也不必傳入配置文件的路徑
操作Redis服務器的2個工具
1、redis自帶的客戶端redis-cli
./redis-cli -h 192.168.1.7 -p 6379
-h指定redis服務器地址,-p指定redis服務器使用的端口號。缺省-h時默認為127.0.0.1,缺省-p時默認為未6379。
如果未修改redis.conf中綁定的ip,Linux上直接./redis-cli就可以連上,ip、port使用默認值即可;如果修改了redis.conf中綁定的ip,則用-h 127.0.0.1連不上,必須用綁定的ip才可以。
輸入exit或quit即可退出redis客戶端。
2、Redis Desktop Manager
下載安裝Redis Desktop Manager,這個軟件是收費的,Windows、MacOS、Linux的版本都有。
輸入ip、端口號,redis服務器默認沒有密碼,不填驗證。
先點擊“測試連接”看能不能連上,能連上才點確定。
連接失敗常見的原因:
- 防火牆沒打開6378端口,需重啟防火牆才會生效
- redis.conf沒有綁定Linux的ip,需重啟redis服務器才會生效
相比redis自帶的客戶端,Redis Desktop Manager可以統計數據、查看使用情況:
一般用redis-cli來操作數據庫,用Redis Desktop Manager來查看、分析數據|使用情況。
Redis官方只提供了Linux版,微軟自己搞了個山寨的Windows版,可以在github上下載,但基本沒公司在實際中用。