簡介
Redis,全稱 Remote Dictionary Server(遠程字典服務器) ,全開源基於C語言開發,是高性能的(key/value)分布式內存數據庫,基於內存運行並支持持久化的NoSQL數據庫,是當前最熱門的NoSQL數據庫之一,也被人們稱為數據結構服務器。
環境准備
操作系統
[root@had-test ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
redis6版本的下載連接: http://download.redis.io/releases/redis-6.0.3.tar.gz
創建redis目錄,將redis的安裝包下載到這個 目錄
[root@had-test ~]# cd /opt/
[root@had-test opt]# mkdir redis #將redis的安裝包下載到這個目錄
安裝依賴
yum -y install gcc gcc-c++ make tcl #測試需要依賴tcl
編譯安裝需要gcc5.3以上,可以用gcc -v 命令查看當前版本號,使用下面的命令升級到gcc9.1:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#scl命令啟用只是臨時的,新開的會話默認還是原gcc版本。
scl enable devtoolset-9 bash
#如果要長期使用gcc 9.1的話執行下面的命令即可:
echo -e "\nsource /opt/rh/devtoolset-9/enable" >>/etc/profile
編譯安裝
[root@redis-1 redis]# tar xf redis-6.0.3.tar.gz
[root@redis-1 redis]# ls
redis-6.0.3 redis-6.0.3.tar.gz
[root@redis-1 redis]# mv redis-6.0.3 redis
[root@redis-1 redis]# ls
redis redis-6.0.3.tar.gz
[root@redis-1 redis]# cd redis/
[root@redis-1 redis]# make
[root@redis-1 redis]#make install PREFIX=/opt/redis6 #安裝指定目錄
#如果編譯出錯之后再編譯可以先執行命令刪除之前的編譯文件
make distclean
編譯完了可以執行命令測試
make test
配置啟動
進入到安裝的目錄/opt/redis6下 將源碼中的redis.conf文件 復制到redis6的bin目錄下並修改配置
mkdir /opt/redis6/data
cp /opt/redis/redis/redis.conf /opt//redis6/bin/
vim /opt/redis6/bin/redis.conf
#daemonize no 改為yes,開啟后台運行,默認是前台運行
daemonize yes
#把這一行注釋,監聽所有IP
#bind 127.0.0.1
#protected-mode yes 如果改為no,則是關閉保護模式,這種模式下不能配置系統服務,建議還是開啟
protected-mode yes
#requirpass,保護模式開啟的時候要配置密碼或者bind ip
requirepass 123456
#修改本參數,指定數據目錄
dir /opt/redis6/data
#修改本參數,指定日志目錄
logfile /opt//redis6/redis_6379.log
啟動redis
編寫啟動腳本
vim /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/opt/redis6/bin/redis-server /opt/redis6/bin/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
使用systemctl命令
# 重載服務
systemctl daemon-reload
# 開機自啟
systemctl enable redis
# 啟動
systemctl start redis
# 重啟
systemctl restart redis
# 停止
systemctl stop redis
# 查看狀態
systemctl status redis
# 關閉開機啟動
systemctl disable redis
使用Redis Desktop Manager連接Redis
下載安裝redis desktop manager:
Github: https://github.com/uglide/RedisDesktopManager
官網: https://redisdesktop.com/
配置防火牆,嫌麻煩直接關閉即可:
#查看防火牆狀態
systemctl status firewalld
#關閉防火牆
service firewalld stop
#開啟防火牆
service firewalld start
#單獨開6379端口
firewall-cmd --permanent --add-port=6379
tcpfirewall-cmd --reload
由於上面的配置我們已經開啟了所有IP的監聽,因此可以直接連接:
關閉保護模式且無密碼模式:
開啟保護模式設置密碼,以systemctl命令啟動和開機自啟:
注:redis6之后支持多線程,使用redis6的io多線程的好處?
1,reddis6把多線程用在哪里?
redis運行的瓶頸,通常不在cpu,而在內存和網絡I/O
Redis 6 對多線程的啟用,主要用在處理網絡I/O,
流程就是:把監聽到的網絡的事件,分發給work thread做處理,
在處理完之后,由主線程負責執行。
說明:這是我們要注意的地方:
redis6對於命令的執行仍然是由主線程執行,
也就是象以前使用的原子性的命令如rpush/lua腳本仍然具有原子性,
不會因為多線程的引入也失效。
2,性能提升顯著:
Redis讀寫網絡的 read/write 系統調用在 執行期間占用了大部分 CPU 時間,
所以把網絡讀寫做成多線程的方式對性能會有很大提升,
根據測試,在 4個線程 IO 時,性能相比單線程提高一倍,
是redis6中的最可觀的性能提升
3.什么情況適宜啟用io多線程?
來自官方配置文件的說明:
默認情況多線程是disabled,當server有至少4個核心或更多時可以啟用,
至少留下一個備用的核心。
當設置為多於8個線程時,不會用明顯的性能提升
建議當確實遇到性能問題時而且redis的實例能占用cpu時間的一大部分時
再啟用threaded I/O,這樣會比較有效,
否則沒有啟用這個功能的必要。
下面是多線程的配置方法:
配置指令一
#io-threads: 啟用的io線程數量
io-threads 4
這個值設置為多少?
根據配置文件的說明:
如果你的server有4個核心,嘗試把這個值設置為3
如果有8個核心,嘗試把這個值設置為6
但這個值不建議超過8
配置指令二:
#讀請求也使用io線程
io-threads-do-reads yes
設置為yes即可,配置文件中的說明:
當I/O threads被啟用時,線程僅用於寫,
如果需要把讀數據和協議解析也啟用線程,
則需要把io-threads-do-reads也設置為yes
作者認為對讀請求啟用io-threads得到的幫助不算太多
redis配置多線程注意事項
1.在redis運行時通過config set 來使用線程的配置指令不會生效,
當SSL啟用時,多線程也不會生效
2,如果使用redis-benchmark測試redis的速度 ,
需要確認redis-benchmark是多線程模式,
使用 --threads選項來匹配redis的線程數量,
否則不會看到性能有明顯提升