redis安裝及使用

redis安裝及使用

本次安裝環(huán)境:

centos6.8

redis-3.2.1

1娘荡、安裝redis

下載redis-3.2.1.tar.gz

tar -xzf redis-3.2.1.tar.gz

mkdir /opt/redis

cp -rf /root/redis-3.2.1/* /opt/redis/

cd /opt/redis

make

make test #注意此時(shí)報(bào)錯(cuò):"You need tcl 8.5 or newer in order to run the Redis test"剑按,處理方法:yum -y install tcl

cd src

make install

mkdir /opt/redis/bin

mkdir /opt/redis/etc

mv /opt/redis/redis.conf /opt/redis/etc/

cd /opt/redis/src

mv redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /opt/redis/bin/

至此redis的安裝基本完成

2淳地、調(diào)試

cd /opt/redis/bin

./redis-server #直接運(yùn)行redis服務(wù),測(cè)試是否可正常運(yùn)行,查看端口是否正常監(jiān)聽(tīng),燃火ctrl-c中斷

vi redis.conf #修改配置文件,常用配置信息見(jiàn)附錄

????/opt/redis/bin/redis-server /opt/redis/etc/redis.conf #通過(guò)配置文件啟動(dòng)redis

3妆绞、redis客戶端的基本操作

redis-cli #不加任何參數(shù),默認(rèn)連接本地redis服務(wù)

redis-cli -h host -p port -a password #用于連接遠(yuǎn)端redis服務(wù)

redis-cli -n 庫(kù)號(hào) #進(jìn)入編號(hào)為n的redis庫(kù)中枫攀,redis默認(rèn)有16個(gè)庫(kù)號(hào)

select 庫(kù)號(hào) #進(jìn)入redis后切換到其他庫(kù)

ping #返回pong括饶,該命令用于檢測(cè)redis是否啟動(dòng)

keys * #查看當(dāng)前redis庫(kù)中所有key

set name yinlong #name為key,yinlong為value来涨,set命令為創(chuàng)建一個(gè)key并存入相應(yīng)的value

get name #get命令查詢name這個(gè)key中的存入的value值

mget key1 kye2... #一次返回多個(gè)key的value

getrange name 0 2 #通過(guò)范圍取值key的內(nèi)容图焰,此時(shí)返回'yin'

del name #del為刪除name這個(gè)key

rename name name1 #給key重新命名,rename key newkey

type name #type key蹦掐,獲取key的數(shù)據(jù)類型

hmset long name 'yinlong' age '26' #創(chuàng)建一個(gè)hash楞泼,long為key,之后為鍵值對(duì)笤闯,可跟多個(gè)

hgetall long #獲取long這個(gè)key中的所有hash值

hget long name #獲取long這個(gè)key中的name的hash值

hdel long name #刪除long這個(gè)key中的name的hash值

lpush class yinlong xiale tianyuan #lpush為創(chuàng)建一個(gè)列表并從左部插入新元素堕阔,class為key

rpush class shuaige #rpush為在class列表的右部插入新元素

lrange class 0 100 #查看class列表中從0到100的值

lindex class 7 #以索引的方式返回class列表中的值

lpop class #從列表中移除并返回第一個(gè)元素

rpop class #從列表中移除并返回最后一個(gè)元素

sadd shu lunyu mengzi daxue #sadd可以新建一個(gè)集合(set),shu為key后跟集合內(nèi)的元素

smembers shu #查看shu集合內(nèi)的元素

srem shu lunyu #移除集合中一個(gè)或多個(gè)元素

zadd wangzhan 1 ali 3 baidu 4 sina #zadd可以新建一個(gè)有序集合颗味,wangzhan為key超陆,后跟1(score)和ali(value)

zrange wangzhan 0 10 (withscores) #查看有序集合中的元素,可選擇是否顯示scores

zrem wangzhan ali #移除有序集合中的元素,可跟多個(gè)

4时呀、redis主從同步张漂、主從切換

此時(shí)環(huán)境狀態(tài):

A主機(jī):192.168.137.50 master

B主機(jī):192.168.137.51 slave

主從同步配置:

修改A主機(jī)配置文件:

????bind 127.0.0.1 192.168.137.50 #使A機(jī)器redis可以監(jiān)聽(tīng)192.168.137.50

通過(guò)配置文件啟動(dòng)A主機(jī):

/opt/redis/bin/redis-server /opt/redis/etc/redis.conf

修改B主機(jī)配置文件:

????bind 127.0.0.1 192.168.137.51

????slaveof 192.168.137.50 6379 #開(kāi)啟slave模式,后跟master地址和端口

????masterauth wang123 #master有密碼的話谨娜,輸入鏈接密碼

通過(guò)配置文件啟動(dòng)B主機(jī):

/opt/redis/bin/redis-server /opt/redis/etc/redis.conf

此時(shí)可通過(guò)客戶端分別連接A航攒、B主機(jī)的redis,使用info命令查看redis狀態(tài):

A主機(jī):

role:master

connected_slaves:1

slave0:ip=192.168.137.51,port=6379,state=online,offset=43,lag=0

B主機(jī):

role:slave

master_host:192.168.137.50

master_port:6379

master_link_status:up

若查看主從失敗優(yōu)先考錄防火墻原因

在B主機(jī)執(zhí)行keys *發(fā)現(xiàn)已經(jīng)將A主機(jī)上的數(shù)據(jù)通過(guò)過(guò)來(lái)趴梢,進(jìn)行測(cè)試:

A主機(jī)set name erzhu ------>B主機(jī)get name ------>'yinlong'

B主機(jī)set name1 erzhu -------->(error) READONLY You can't write against a read only slave.

說(shuō)明主從同步已正常工作漠畜,且B主機(jī)只有讀權(quán)限

主從自動(dòng)切換配置:

redis中自帶了sentinel(哨兵),其特點(diǎn)如下:

監(jiān)控:不斷地檢查主服務(wù)器和從服務(wù)器的運(yùn)行狀態(tài)

通知:當(dāng)主或從服務(wù)器出問(wèn)題時(shí)sentinel可通過(guò)API向管理員或其他應(yīng)用發(fā)送通知

自動(dòng)故障遷移:當(dāng)主發(fā)生故障時(shí)sentinel可自動(dòng)將一個(gè)從提升為主坞靶,并且其它的從自動(dòng)將切換新主

sentinel配置:(redis安裝文件中自帶了sentinel運(yùn)行文件和配置文件)

mkdir /opt/redis/tmp

cp /opt/redis/sentinel.conf /opt/redis/etc/

vi /opt/redis/etc/sentinel.conf #配置文件主要參數(shù)及功能見(jiàn)附錄

????dir /opt/redis/tmp #設(shè)置工作目錄

????sentinel monitor master 192.168.137.51 6379 1

????sentinel down-after-milliseconds master 10000

/opt/redis/bin/redis-sentinel /opt/redis/etc/sentinel.conf #啟動(dòng)sentinel服務(wù)

驗(yàn)證是否實(shí)現(xiàn)自動(dòng)主從切換:

先驗(yàn)證A為主憔狞、B為從

殺掉A主機(jī)redis進(jìn)程

觀察sentinel輸出信息:

+promoted-slave slave 192.168.137.51:6379 192.168.137.51 6379 @ mymaster 192.168.137.50 6379

將從晉升為主

此時(shí)查看B主機(jī)redis狀態(tài),發(fā)現(xiàn)以成為master彰阴,且可以插入新數(shù)據(jù)

再次開(kāi)啟A主機(jī)redis

觀察sentinel輸出信息:

+convert-to-slave slave 192.168.137.50:6379 192.168.137.50 6379 @ mymaster 192.168.137.51 6379

發(fā)現(xiàn)A主機(jī)redis啟動(dòng)瘾敢,自動(dòng)將A主機(jī)添加為B主機(jī)的從服務(wù)器

進(jìn)入A主機(jī)redis查看狀態(tài)為slave,無(wú)法插入新數(shù)據(jù)

5尿这、redis集群

特點(diǎn):無(wú)中心化簇抵,多節(jié)點(diǎn)共享數(shù)據(jù)。不支持處理多個(gè)key的命令射众,因?yàn)閿?shù)據(jù)會(huì)在多個(gè)節(jié)點(diǎn)間移動(dòng)正压,會(huì)導(dǎo)致不可預(yù)料的問(wèn)題。

redis集群官方推薦最小規(guī)模為3主3從责球,注意集群中每臺(tái)redis節(jié)點(diǎn)至少要有一臺(tái)相應(yīng)的從節(jié)點(diǎn)焦履,否則當(dāng)該節(jié)點(diǎn)故障時(shí)集群將無(wú)法正常使用。

搭建集群:本次試驗(yàn)采用最小規(guī)模的3主3從雏逾,環(huán)境如下:

A(主)192.168.137.50 6379

B(主)192.168.137.51 6379

C(主)192.168.137.52 6379

A(從)192.168.137.51 7000

B(從)192.168.137.52 7000

C(從)192.168.137.50 7000

集群搭建前準(zhǔn)備:

yum -y install ruby-devel rubygems rpm-build #安裝ruby環(huán)境嘉裤,redis-trib.rb依賴ruby環(huán)境

安裝ruby2.2.2或以上版本

gem install redis

創(chuàng)建redis主機(jī):(分別在三臺(tái)主機(jī)上創(chuàng)建redis配置文件,本次以一臺(tái)為例)

cd /opt/redis/etc

vi redis_master.conf #此處只列出重要選項(xiàng)栖博,可根據(jù)情況自行添加

????daemonize yes? ? ? ? ? ? ?

????pidfile /var/run/redis_6379.pid?

????port 6379

????dir /opt/redis/db

????cluster-enabled yes #開(kāi)啟集群

????cluster-config-file nodes_6379.conf #集群的配置文件首次啟動(dòng)自動(dòng)生成

????cluster-node-timeout 5000 #請(qǐng)求超時(shí)屑宠,設(shè)置5秒即可

????appendonly yes #aof日志開(kāi)啟,有需要就開(kāi)啟仇让,它會(huì)每次寫操作都記錄一條日志

????logfile "/opt/redis/log/redis.log"

????bind 192.168.137.50 #注意此IP不能綁定127.0.0.1典奉,否則加入集群不成功

????dbfilename dump_6379.rdb

????appendfilename "appendonly_6379.aof"

vi redis_slave.conf

????daemonize yes? ? ? ? ? ? ?

????pidfile /var/run/redis_7000.pid?

????port 7000

????dir /opt/redis/db

????cluster-enabled yes

????cluster-config-file nodes_7000.conf

????cluster-node-timeout 5000

????appendonly yes

????logfile "/opt/redis/log/redis.log"

????bind 192.168.137.50

????dbfilename dump_7000.rdb

????appendfilename "appendonly_7000.aof"

啟動(dòng)所有redis實(shí)例:

/opt/redis/bin/redis-server /opt/redis/etc/redis_master.conf

/opt/redis/bin/redis-server /opt/redis/etc/redis_slave.conf

ps -elf|grep redis

創(chuàng)建集群:

/opt/redis/src/redis-trib.rb create 192.168.137.50:6379 192.168.137.51:6379 192.168.137.52:6379 #將三臺(tái)主加入集群

/opt/redis/src/redis-trib.rb add-node --slave 192.168.137.51:7000 192.168.137.50:6379 #分別將三臺(tái)從按照對(duì)應(yīng)關(guān)系加入

/opt/redis/src/redis-trib.rb add-node --slave 192.168.137.52:7000 192.168.137.51:6379

/opt/redis/src/redis-trib.rb add-node --slave 192.168.137.50:7000 192.168.137.52:6379

/opt/redis/src/redis-trib.rb check 192.168.137.50:6379 #隨便指定一臺(tái)redis主機(jī)即可查看集群中所有主機(jī)的狀態(tài)

此時(shí)redis集群搭建完畢,該工具會(huì)自動(dòng)分配槽點(diǎn)丧叽,連接任意一臺(tái)主redis都可以對(duì)數(shù)據(jù)進(jìn)行操作卫玖。但若存儲(chǔ)該數(shù)據(jù)的槽點(diǎn)不在連接的主機(jī)上,該主機(jī)會(huì)返回對(duì)應(yīng)的主機(jī)信息踊淳,并不會(huì)直接返回?cái)?shù)據(jù)假瞬。

附錄:

redis配置文件:

daemonize no #默認(rèn)不是以守護(hù)進(jìn)程的方式啟動(dòng),可改成yes

pidfile /var/run/redis.pid #以守護(hù)進(jìn)程的方式啟動(dòng)時(shí)pid文件位置

port 6379 #指定redis監(jiān)聽(tīng)的端口,默認(rèn)6379

bind 127.0.0.1 #綁定的主機(jī)ip

timeout 300 #連接redis服務(wù)的超時(shí)時(shí)間脱茉,指定為0則表示關(guān)閉此功能

loglevel verbose #指定日志級(jí)別剪芥,debug、verbose琴许、notice税肪、warning,默認(rèn)為verbose

logfile "/redis/redis.log" #指定redis日志的存放位置榜田,默認(rèn)為標(biāo)準(zhǔn)輸出

databases 16 #設(shè)置數(shù)據(jù)庫(kù)的數(shù)量益兄,默認(rèn)數(shù)據(jù)庫(kù)為0

save <seconds> <changes> #指定多長(zhǎng)時(shí)間內(nèi)有多少次更新則會(huì)將數(shù)據(jù)寫入硬盤,可設(shè)置多個(gè)策略串慰,默認(rèn)值如下

save 900 1

save 300 10

save 60 10000

rdbcompression yes #存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)時(shí)是否壓縮數(shù)據(jù),默認(rèn)為yes唱蒸,redis采用LZF壓縮

dbfilename dump.rdb #指定本地?cái)?shù)據(jù)庫(kù)名邦鲫,默認(rèn)為dump.rdb

dir /opt/redis/db #指定本地?cái)?shù)據(jù)庫(kù)存放位置

slaveof <masterip> <masterport> #設(shè)置本機(jī)為slave服務(wù)時(shí),指定master的ip及port

masterauth <master-password> #本機(jī)為slave神汹,當(dāng)master設(shè)置密碼時(shí)連接所需密碼

requirepass 密碼 #設(shè)置redis的密碼

maxclients 128 #同一時(shí)間最大客戶連接數(shù)庆捺,默認(rèn)0不限制

maxmemory <bytes> #redis最大內(nèi)存限制,默認(rèn)0不限制屁魏,當(dāng)達(dá)到最大內(nèi)存時(shí)只能讀不能寫

appendonly no #是否在每次更新數(shù)據(jù)后進(jìn)行日志記錄滔以,默認(rèn)為no

appendfilename appendonly.aof #指定更新日志文件名,默認(rèn)為appendonly.aof

appendfsync everysec #日志更新條件氓拼, no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快)

always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢你画,安全)

everysec:表示每秒同步一次(折衷,默認(rèn)值)

vm-enabled no #是否啟動(dòng)虛擬內(nèi)存機(jī)制桃漾,默認(rèn)no

vm-swap-file /tmp/redis.swap #虛擬文件路徑坏匪,默認(rèn)/tmp/redis.swap,不可多個(gè)redis實(shí)例共享

vm-max-memory 0 #所有大于該值的數(shù)據(jù)會(huì)存入虛擬內(nèi)存撬统,為0時(shí)所有數(shù)據(jù)都會(huì)存入虛擬內(nèi)存

vm-page-size 32 #redis的swap文件分成很多page适滓,這里設(shè)置page的大小,一般為32或64

vm-pages 134217728 #設(shè)置page的數(shù)量恋追,磁盤上每8個(gè)page消耗1byte內(nèi)存

vm-max-threads 4 #訪問(wèn)swap文件的線程數(shù)凭迹,不要超過(guò)cpu核心數(shù),為0則為串行操作

glueoutputbuf yes #向客戶端應(yīng)答時(shí)是否把較小的包合并為一個(gè)包發(fā)送苦囱,默認(rèn)為開(kāi)啟

hash-max-zipmap-entries 512 #指定在超過(guò)一定的數(shù)量或者最大的元素超過(guò)某一臨界值時(shí)嗅绸,采用一種特殊的哈希算法

hash-max-zipmap-value 64 #同上為一組功能

activerehashing yes #是否激活重置哈希,默認(rèn)開(kāi)啟

include /path/to/local.conf #指定包含的其他配置文件

sentinel配置文件:

bind 0.0.0.0 #在一些云主機(jī)上屏蔽掉了IPv6撕彤,所以加上這一項(xiàng)可只監(jiān)聽(tīng)I(yíng)Pv4

port xxxooo #端口

sentinel monitor master 127.0.0.1 6379 2 #指定要監(jiān)控的主IP朽砰、端口,2表示有幾個(gè)sentinel監(jiān)控到主出問(wèn)題時(shí)才判定down

sentinel down-after-milliseconds master 30000 #指定sentinel監(jiān)控到主異常多長(zhǎng)時(shí)間才判定down,單位毫秒

sentinel failover-timeout master 180000 #指定在該之間內(nèi)未完成主從切換則認(rèn)為本次failover失敗

sentinel parallel-syncs master 1 #指定failover過(guò)程中同時(shí)重新配置的slave的個(gè)數(shù)瞧柔,該值最好取小

sentinel notification-script #指定sentinel檢測(cè)到異常時(shí)執(zhí)行的腳本

sentinel auth-pass master password #password為redis有密碼時(shí)添加訪問(wèn)密碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漆弄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子造锅,更是在濱河造成了極大的恐慌撼唾,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥蔚,死亡現(xiàn)場(chǎng)離奇詭異倒谷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)糙箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門渤愁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人深夯,你說(shuō)我怎么就攤上這事抖格。” “怎么了咕晋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵雹拄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我掌呜,道長(zhǎng)滓玖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任质蕉,我火速辦了婚禮势篡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘模暗。我一直安慰自己殊霞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布汰蓉。 她就那樣靜靜地躺著绷蹲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顾孽。 梳的紋絲不亂的頭發(fā)上祝钢,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音若厚,去河邊找鬼拦英。 笑死,一個(gè)胖子當(dāng)著我的面吹牛测秸,可吹牛的內(nèi)容都是我干的疤估。 我是一名探鬼主播灾常,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铃拇!你這毒婦竟也來(lái)了钞瀑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤慷荔,失蹤者是張志新(化名)和其女友劉穎雕什,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體显晶,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贷岸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷雇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偿警。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唯笙,靈堂內(nèi)的尸體忽然破棺而出螟蒸,到底是詐尸還是另有隱情,我是刑警寧澤睁本,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布尿庐,位于F島的核電站忠怖,受9級(jí)特大地震影響呢堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凡泣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一枉疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鞋拟,春花似錦骂维、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至猴誊,卻和暖如春潦刃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懈叹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工乖杠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澄成。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓胧洒,卻偏偏與公主長(zhǎng)得像畏吓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卫漫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)汛兜、高可擴(kuò)展巴粪、高可用、大數(shù)據(jù)存儲(chǔ)問(wèn)題而產(chǎn)生的數(shù)據(jù)庫(kù)解決方...
    克魯?shù)吕?/span>閱讀 5,274評(píng)論 0 36
  • Codis高可用方案官方推薦使用Sentinel Redis 本身就是最終一致性的粥谬。Master 掛了肛根,Promo...
    三杯水Plus閱讀 2,730評(píng)論 2 8
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)漏策,如redis派哲,volde...
    MicoCube閱讀 3,961評(píng)論 2 27
  • http://blog.51cto.com/mxlmgl/2065789 redis-server說(shuō)明 服務(wù)器A:...
    SkTj閱讀 2,163評(píng)論 0 5
  • 前言 Redis是一個(gè)高性能的key-value數(shù)據(jù)庫(kù),現(xiàn)時(shí)越來(lái)越多企業(yè)與應(yīng)用使用Redis作為緩存服務(wù)器掺喻。樓主是...
    liangzzz閱讀 4,255評(píng)論 9 152