前幾天Redis官方發佈了 Redis6.0.1 Stable
版本,本文詳細介紹下Centos7安裝配置Redis6.0.1的步驟。
先大致說一下Redis6.0之前版本的優缺點
優點:
- 豐富的數據結構
- 持久化存儲:RDB、AOF
- 主從同步,故障轉移(哨兵模式)
- 內存數據庫
缺點:
- 單線程
- 單核(不能充分利用CPU多核性能)
Redis6.0版本在原有的基礎上引入了多線程I/O
,並且充分利用了多核CPU系統的性能;雖然支持了多線程I/O,但是這個多線程只是用來處理網絡數據的讀寫
和協議解析
,執行命令仍然是單線程。新版本還增加了acl、cluster proxy等新功能,後續慢慢研究一下。
有關老版本和新版本的性能對比可以參考下邊這篇文章,感覺寫的不錯。
1 升級gcc
在編譯redis6.0.1之前需要升級gcc的版本,默認情況yum安裝的gcc版本是4.8.5,由於版本過低,在編譯時會報如下錯誤(部分截取)。
In file included from server.h:63:0,
from server.c:30:
server.c:4373:30: 錯誤:‘struct redisServer’沒有名爲‘slaves’的成員
listLength(server.slaves));
^
adlist.h:57:25: 附註:in definition of macro ‘listLength’
#define listLength(l) ((l)->len)
^
server.c:4377:19: 錯誤:‘struct redisServer’沒有名爲‘repl_min_slaves_to_write’的成員
if (server.repl_min_slaves_to_write &&
^
server.c:4378:19: 錯誤:‘struct redisServer’沒有名爲‘repl_min_slaves_max_lag’的成員
server.repl_min_slaves_max_lag) {
^
server.c:4381:23: 錯誤:‘struct redisServer’沒有名爲‘repl_good_slaves_count’的成員
server.repl_good_slaves_count);
......
server.c: 在函數‘hasActiveChildProcess’中:
server.c:1476:1: 警告:在有返回值的函數中,控制流程到達函數尾 [-Wreturn-type]
}
^
server.c: 在函數‘allPersistenceDisabled’中:
server.c:1482:1: 警告:在有返回值的函數中,控制流程到達函數尾 [-Wreturn-type]
}
^
server.c: 在函數‘writeCommandsDeniedByDiskError’中:
server.c:3747:1: 警告:在有返回值的函數中,控制流程到達函數尾 [-Wreturn-type]
}
^
server.c: 在函數‘iAmMaster’中:
server.c:4914:1: 警告:在有返回值的函數中,控制流程到達函數尾 [-Wreturn-type]
}
^
make[1]: *** [server.o] 錯誤 1
make[1]: 離開目錄“/application/redis-6.0.1/src”
make: *** [install] 錯誤 2
若不想編譯安裝gcc高版本,這裏推薦一種yum安裝的方式。
1、安裝scl源
yum install centos-release-scl scl-utils-build
2、列出scl可用源
yum list all --enablerepo='centos-sclo-rh'
3、安裝8版本的gcc、gcc-c++、gdb工具鏈(toolchian)
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
gcc --version
2 安裝配置Redis6.0.1
1、獲取壓縮包
# 從官網或者github獲取tar包
wget http://download.redis.io/releases/redis-6.0.1.tar.gz
2、解壓並指定安裝目錄
tar -xf redis-6.0.1.tar.gz
cd redis-6.0.1.tar.gz
make PREFIX=/opt/redis-6.0.1/ install
3、make test(可不做)
# make無誤後可以make test測試下
# 若報錯 You need tcl 8.5 or newer in order to run the Redis test 升級一下tcl即可
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/
cd /usr/local/tcl8.6.1/unix/
./configure && make && make install
[root@Mredis redis-6.0.1]# make test
......
\o/ All tests passed without errors!
Cleanup: may take some time... OK # 說明無誤
make[1]: 離開目錄“/application/redis-6.0.1/src”
4、生成配置文件
mkdir /opt/redis-6.0.1/conf/6379
cd /opt/redis-6.0.1/conf/6379
# 拷貝默認配置文件至6379實例目錄下
cp /application/redis-6.0.1/redis.conf /opt/redis-6.0.1/conf/6379/
5、修改配置文件
大致跟老版本的一樣,由於新版本添加了多線程的功能,所以還需要根據系統CPU核心數量去配置此參數。
# bind本地ip
bind 192.168.0.100
# 根據需求去修改端口
port 6379
# 以daemon方式運行
daemonize yes
# 日誌文件
logfile "/opt/redis-6.0.1/conf/6379/logs/redis_6379.log"
# 數據保存目錄
dir /opt/redis-6.0.1/conf/6379/data
# 內存最大使用量
maxmemory 512MB
# I/O線程數,官方建議配置系統核心數量的3/4,我這裏是2核,所以最多配置2就可以了
# 可以通過 lscpu 命令去查看本地系統的CPU核心數
io-threads 2
# 默認情況下,如果不開啓多線程讀功能,那麼多線程只能進行寫操作,是否開啓多線程讀功能看需求
io-threads-do-reads yes
6、啓動redis,並配置開機自啓
# 啓動
/opt/redis-6.0.1/bin/redis-server /opt/redis-6.0.1/conf/6379/redis.conf
# 配置開機自啓
echo "/opt/redis-6.0.1/bin/redis-server /opt/redis-6.0.1/conf/6379/redis.conf" >> /etc/rc.local
可以通過配置環境變量
的方式使得redis相關的命令在全局生效。
3 訪問測試
[root@Mredis ~]# /opt/redis-6.0.1/bin/redis-cli -h 192.168.0.100 -p 6379
192.168.0.100:6379> KEYS *
(empty array)
192.168.0.100:6379> set a bbb
OK
192.168.0.100:6379> get a
"bbb"
192.168.0.100:6379>
參考文章