Centos7 下Redis3安装
Redis官網(wǎng) ?http://redis.io
中文手冊(cè) http://www.cnblogs.com/stephen-liu74/archive/2012/02/27/2370212.html
一、 下載redis最新版
下載?http://redis.io/download
目前最新版 redis3.2.11
cd /usr/local/src
wget?http://download.redis.io/releases/redis-3.2.11.tar.gz
二、 編譯安裝redis ? ?(詳情可見(jiàn)源碼根目錄的 README)
tar -zxvf redis-3.2.11.tar.gz?
cd redis-3.2.11
make
make命令執(zhí)行完成后,會(huì)在src目錄下生成6個(gè)可執(zhí)行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel,它們的作用如下:
redis-server:Redis服務(wù)器的daemon啟動(dòng)程序
redis-cli:Redis命令行操作工具。當(dāng)然,你也可以用telnet根據(jù)其純文本協(xié)議來(lái)操作
redis-benchmark:Redis性能測(cè)試工具,測(cè)試Redis在你的系統(tǒng)及你的配置下的讀寫性能
redis-check-aof:更新日志檢查
redis-check-dump:用于本地?cái)?shù)據(jù)庫(kù)檢查
redis-sentinel:集群管理工具
安裝:
make PREFIX=/usr/local/redis install
測(cè)試
make test
依賴 tcl,若沒(méi)有安裝請(qǐng)先安裝
yum -y install tcl?tcl-devel
三、 配置 Redis
mkdir -p /usr/local/redis/etc /usr/local/redis/log /usr/local/redis/data? ? ? ? ? #創(chuàng)建配置文件、日志文件、數(shù)據(jù)庫(kù)保存目錄
cp /usr/local/src/redis-3.2.11/redis.conf /usr/local/redis/etc/
touch?/usr/local/redis/log/redis.log
1. redis.conf 配置參數(shù):
#是否作為守護(hù)進(jìn)程運(yùn)行
daemonize yes
#如以后臺(tái)進(jìn)程運(yùn)行,則需指定一個(gè)pid,默認(rèn)為/var/run/redis.pid
pidfile /var/run/redis.pid
#綁定主機(jī)IP,默認(rèn)值為127.0.0.1
bind 0.0.0.0
#Redis默認(rèn)監(jiān)聽(tīng)端口
port 6379
#客戶端閑置多少秒后,斷開(kāi)連接,默認(rèn)為300(秒)
timeout 300
#日志記錄等級(jí),有4個(gè)可選值,debug,verbose,notice(默認(rèn)值),warning
loglevel notice
#指定日志輸出的文件名,默認(rèn)值為stdout,也可設(shè)為/dev/null屏蔽日志
logfile "/usr/local/redis/log/redis.log"
#可用數(shù)據(jù)庫(kù)數(shù),默認(rèn)值為16,默認(rèn)數(shù)據(jù)庫(kù)為0
databases 16
#保存數(shù)據(jù)到disk的策略
#當(dāng)有一條Keys數(shù)據(jù)被改變是,900秒刷新到disk一次
save 900 1
#當(dāng)有10條Keys數(shù)據(jù)被改變時(shí),300秒刷新到disk一次
save 300 10
#當(dāng)有1w條keys數(shù)據(jù)被改變時(shí),60秒刷新到disk一次
save 60 10000
#當(dāng)dump .rdb數(shù)據(jù)庫(kù)的時(shí)候是否壓縮數(shù)據(jù)對(duì)象
rdbcompression yes
#本地?cái)?shù)據(jù)庫(kù)文件名,默認(rèn)值為dump.rdb
dbfilename dump.rdb
#本地?cái)?shù)據(jù)庫(kù)存放路徑,默認(rèn)值為 ./
dir /usr/local/redis/data
# 設(shè)置PID文件目錄
pidfile /usr/local/redis/redis.pid
########### Replication #####################
#Redis的復(fù)制配置
# slaveof <masterip> <masterport> 當(dāng)本機(jī)為從服務(wù)時(shí),設(shè)置主服務(wù)的IP及端口
# masterauth <master-password> 當(dāng)本機(jī)為從服務(wù)時(shí),設(shè)置主服務(wù)的連接密碼
#連接密碼
requirepass foobared
#最大客戶端連接數(shù)
maxclients 30000
#最大內(nèi)存使用設(shè)置,達(dá)到最大內(nèi)存設(shè)置后,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理后,任到達(dá)最大內(nèi)存設(shè)置,將無(wú)法再進(jìn)行寫入操作。
# maxmemory <bytes>
#是否在每次更新操作后進(jìn)行日志記錄,如果不開(kāi)啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)閞edis本身同步數(shù)據(jù)文件是按上面save條件來(lái)同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)值為no
appendonly no
#更新日志文件名,默認(rèn)值為appendonly.aof
#appendfilename
#更新日志條件,共有3個(gè)可選值。no表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤,always表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤,everysec表示每秒同步一次(默認(rèn)值)。
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否開(kāi)啟VM功能,默認(rèn)值為no
vm-enabled no
# vm-enabled yes
#虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap,不可多個(gè)Redis實(shí)例共享
vm-swap-file /tmp/redis.swap
# 將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無(wú)論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲(chǔ)的 (Redis的索引數(shù)據(jù)就是keys),也就是說(shuō),當(dāng)vm-max-memory設(shè)置為0的時(shí)候,其實(shí)是所有value都存在于磁盤。默認(rèn)值為0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
注意:Redis官方文檔對(duì)VM的使用提出了一些建議:
當(dāng)你的key很小而value很大時(shí),使用VM的效果會(huì)比較好.因?yàn)檫@樣節(jié)約的內(nèi)存比較大.
當(dāng)你的key不小時(shí),可以考慮使用一些非常方法將很大的key變成很大的value,比如你可以考慮將key,value組合成一個(gè)新的value.
最好使用linux ext3 等對(duì)稀疏文件支持比較好的文件系統(tǒng)保存你的swap文件.
vm-max-threads這個(gè)參數(shù),可以設(shè)置訪問(wèn)swap文件的線程數(shù),設(shè)置最好不要超過(guò)機(jī)器的核數(shù).如果設(shè)置為0,那么所有對(duì)swap文件的操作都是串行的.可能會(huì)造成比較長(zhǎng)時(shí)間的延遲,但是對(duì)數(shù)據(jù)完整性有很好的保證.
?
2. 調(diào)整系統(tǒng)內(nèi)核參數(shù)
如果內(nèi)存情況比較緊張的話,需要設(shè)定內(nèi)核參數(shù):
echo 1 > /proc/sys/vm/overcommit_memory
這里說(shuō)一下這個(gè)配置的含義:/proc/sys/vm/overcommit_memory
該文件指定了內(nèi)核針對(duì)內(nèi)存分配的策略,其值可以是0、1、2。
0,表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S;否則,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程。
1,表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
2,表示內(nèi)核允許分配超過(guò)所有物理內(nèi)存和交換空間總和的內(nèi)存
Redis 在dump數(shù)據(jù)的時(shí)候,會(huì)fork出一個(gè)子進(jìn)程,理論上child進(jìn)程所占用的內(nèi)存和parent是一樣的,比如parent占用的內(nèi)存為 8G,這個(gè)時(shí)候也要同樣分配8G的內(nèi)存給child, 如果內(nèi)存無(wú)法負(fù)擔(dān),往往會(huì)造成redis服務(wù)器的down機(jī)或者IO負(fù)載過(guò)高,效率下降。所以這里比較優(yōu)化的內(nèi)存分配策略應(yīng)該設(shè)置為 1(表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何)
四. 運(yùn)行 Redis
添加環(huán)境變量
echo "export PATH=$PATH:/usr/local/redis/bin" >> /etc/profile
.?/etc/profile
1. 運(yùn)行服務(wù)
redis-server /etc/redis/redis.conf
即可在后臺(tái)啟動(dòng)redis服務(wù),確認(rèn)運(yùn)行了之后,可以用redis-benchmark命令測(cè)試看看,還可以通過(guò)redis-cli命令實(shí)際操作一下,比如:
redis-cli set foo bar
OK
redis-cli get foo
bar
2. 關(guān)閉服務(wù)
redis-cli shutdown
如果端口變化可以指定端口:
redis-cli -p 6380 shutdown
3. 保存/備份
數(shù)據(jù)備份可以通過(guò)定期備份該文件實(shí)現(xiàn)。
因?yàn)閞edis是異步寫入磁盤的,如果要讓內(nèi)存中的數(shù)據(jù)馬上寫入硬盤可以執(zhí)行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具備一定的權(quán)限,比如復(fù)制和設(shè)定內(nèi)核參數(shù)等。
執(zhí)行redis-benchmark命令時(shí)也會(huì)將內(nèi)存數(shù)據(jù)寫入硬盤。
4. 同步機(jī)制
redis實(shí)現(xiàn)的同步機(jī)制相對(duì)簡(jiǎn)單,缺少同步機(jī)制常見(jiàn)的check point和校驗(yàn)機(jī)制。
在 運(yùn)行時(shí),如果master -> slave同步請(qǐng)求轉(zhuǎn)發(fā)被丟棄, slave將無(wú)法恢復(fù)該請(qǐng)求的相關(guān)信息,直到slave重啟時(shí)從master全量加載數(shù)據(jù)時(shí)才能修復(fù)。因此,建議使用redis盡量利用其 key/value和value支持多種類型的特性,存儲(chǔ)一些相對(duì)不重要的數(shù)據(jù)。
?
五. 設(shè)置隨機(jī)啟動(dòng)
vi /etc/init.d/redis ?#添加以下內(nèi)容
#!/bin/bash
#
# redis - this script starts and stops the redis-server daemon
#
# chkconfig:?? - 80 12
# description:? Redis is a persistent key-value database
# processname: redis-server
# config:????? /etc/redis/redis.conf
# pidfile:???? /var/run/redis.pid
source /etc/init.d/functions
BIN="/usr/local/redis/bin"
CONFIG="/usr/local/redis/etc/redis.conf"
PIDFILE="/usr/local/redis/redis.pid"
### Read configuration
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"
RETVAL=0
prog="redis-server"
desc="Redis Server"
start() {
??????? if [ -e $PIDFILE ];then
???????????? echo "$desc already running...."
???????????? exit 1
??????? fi
??????? echo -n $"Starting $desc: "
??????? daemon $BIN/$prog $CONFIG
??????? RETVAL=$?
??????? echo
??????? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
??????? return $RETVAL
}
stop() {
??????? echo -n $"Stop $desc: "
??????? killproc $prog
??????? RETVAL=$?
??????? echo
??????? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog $PIDFILE
??????? return $RETVAL
}
restart() {
??? stop
??? start
}
case "$1" in
? start)
??????? start
??????? ;;
? stop)
??????? stop
??????? ;;
? restart)
??????? restart
??????? ;;
? condrestart)
??????? [ -e /var/lock/subsys/$prog ] && restart
??????? RETVAL=$?
??????? ;;
? status)
??????? status $prog
??????? RETVAL=$?
??????? ;;
?? *)
??????? echo $"Usage: $0 {start|stop|restart|condrestart|status}"
??????? RETVAL=1
esac
exit $RETVAL
用這個(gè)腳本管理之前,需要先配置下面的內(nèi)核參數(shù),否則Redis腳本在重啟或停止redis時(shí),可能會(huì)報(bào)錯(cuò),并且不能自動(dòng)在停止服務(wù)前同步數(shù)據(jù)到磁盤上:
vi /etc/sysctl.conf
vm.overcommit_memory = 1
然后應(yīng)用生效:
sysctl -p
(調(diào)整內(nèi)存(如果內(nèi)存情況比較緊張的話,需要設(shè)定內(nèi)核參數(shù))
echo 1 > /proc/sys/vm/overcommit_memory
說(shuō)明:
該文件指定了內(nèi)核針對(duì)內(nèi)存分配的策略,其值可以是0、1、2。
0 表示內(nèi)核將檢查是否有足夠的可用內(nèi)存供應(yīng)用進(jìn)程使用;如果有足夠的可用內(nèi)存,內(nèi)存申請(qǐng)?jiān)试S;否則,內(nèi)存申請(qǐng)失敗,并把錯(cuò)誤返回給應(yīng)用進(jìn)程。
1 表示內(nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何。
2 表示內(nèi)核允許分配超過(guò)所有物理內(nèi)存和交換空間總和的內(nèi)存
)
然后增加服務(wù)并開(kāi)機(jī)自啟動(dòng):
chmod 755 /etc/init.d/redis
chkconfig redis on
chkconfig --list redis
centos 7 啟動(dòng)腳本
/usr/lib/systemd/system/redis.service
#####################################
[Unit]
Description=Startup script for the Redis
Documentation=http://redis.io
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/redis/redis.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
####
指定運(yùn)行用戶
useradd -M -s /sbin/nologin redis
chown -R redis:redis?/usr/local/redis/log /usr/local/redis/data?pidfile所在目錄
cat /usr/lib/systemd/system/redis.service
###
[Unit]
Description=Startup script for the Redis
Documentation=http://redis.io
After=network.target remote-fs.target nss-lookup.target
[Service]
User=redis
Group=redis
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
###
systemctl enable?redis; systemctl start?redis
轉(zhuǎn)載于:https://blog.51cto.com/tianshili/1638506
總結(jié)
以上是生活随笔為你收集整理的Centos7 下Redis3安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用C++写一个简单的服务器和客户端
- 下一篇: Xcode编译Undefined sym