redis的持久化配置(圖文介紹)
redis簡(jiǎn)述
redis是一款由c語言編寫的,開源的高可用的非關(guān)系型數(shù)據(jù)庫(nosql,不僅僅是數(shù)據(jù)庫)型的鍵值對(duì)(key-value)數(shù)據(jù)庫。
與傳統(tǒng)的數(shù)據(jù)庫不同的是redis的數(shù)據(jù)是存在內(nèi)存的,所以讀寫性能不是一般的高,可達(dá)到每秒10萬次操作,因此被廣泛的應(yīng)用到緩存方向,例如:在網(wǎng)站架構(gòu)里面和tomcat做Session共享,做數(shù)據(jù)庫緩存等。
redis的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
-
讀寫速度快,讀能達(dá)到110000次/s,寫能達(dá)到81000次/s,c語言寫的,代碼優(yōu)雅,而且還是單線程架構(gòu) ,所以執(zhí)行效率高,速度快
-
支持多種數(shù)據(jù)結(jié)構(gòu),字符串(String,也是最常用的),哈希(hash),列表(list),集合(SET),有序集合(ZSET)
-
豐富的功能,例如:天然計(jì)數(shù)器, ?鍵過期功能,消息隊(duì)列等
-
支持?jǐn)?shù)據(jù)持久化
-
自帶多種高可用架構(gòu),比如:主從復(fù)制,哨兵,高可用集群
缺點(diǎn)
-
正是因?yàn)閿?shù)據(jù)都存在內(nèi)存里,所以對(duì)服務(wù)器性能要求嚴(yán)格,根據(jù)業(yè)務(wù)量自己選擇內(nèi)存選購多大
-
很難實(shí)現(xiàn)在線擴(kuò)容,所以第一次選購需謹(jǐn)慎
上面有提到持久化,何為持久化?
持久化就是支持把內(nèi)存中的數(shù)據(jù)寫到磁盤里面,防止服務(wù)器宕機(jī)了內(nèi)存里面數(shù)據(jù)全部丟失。
實(shí)現(xiàn)持久化的方式
支持2種格式持久化數(shù)據(jù)AOF, RDB,還有就是這兩種混合使用 AOF&RDB
注意:當(dāng)這種都開啟時(shí),redis數(shù)據(jù)恢復(fù)優(yōu)先使用AOF,但是RDB是默認(rèn)的持久化方式。
AOF持久化:就是把redis每一次執(zhí)行的命令都記錄到單獨(dú)指定的日志文件里面,當(dāng)重啟或者要恢復(fù)數(shù)據(jù)時(shí)就會(huì)恢復(fù)日志文件中的數(shù)據(jù)
RDB:就像是拍快照一樣,按照配置文件定義的save參數(shù)來定義快照的周期,然后保存到硬盤里面,會(huì)產(chǎn)生dump.rdb文件
AOF和RDB的對(duì)比:
-
1AOF文件比rdb更新頻率高,優(yōu)先使用aof還原
-
aof比rdb更安全
-
rdb性能比aof要好,數(shù)據(jù)量很大時(shí),日志恢復(fù)速度比rdb慢
-
在持續(xù)讀寫時(shí),如果rdb拍攝快照,會(huì)有數(shù)據(jù)延遲,恢復(fù)的數(shù)據(jù)會(huì)不完整
redis 的數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)類型 | 存儲(chǔ)值 | 常用的操作命令 | 應(yīng)用的場(chǎng)景 |
---|---|---|---|
string | 字符串 | SET(創(chuàng)建),GET(查看),DEL(刪除),MSET(批量創(chuàng)建),MGET(批量查看 | 做緩存,鍵值對(duì)的過期時(shí)間, 把session會(huì)話存在redis,過期刪除, 緩存用戶信息,緩存mysql部分?jǐn)?shù)據(jù),商城優(yōu)惠卷過期時(shí)間等 |
list | 列表 | RPUSH(創(chuàng)建,若存在則向右邊添加),LPUSH(左添加,LRABGE+范圍(查看范圍值),RPOP(刪除右邊最后一個(gè)),LPOP(刪除左邊最后一個(gè)) | 一般與zset結(jié)合用,主要應(yīng)用于排行榜,熱度/點(diǎn)擊數(shù)排行榜,直播間榜一大哥排行等 |
hash | 哈希 | HMSET+對(duì)象(創(chuàng)建對(duì)象的鍵值,針對(duì)的是一個(gè)對(duì)象),HGET+對(duì)象(查看對(duì)象的某個(gè)參數(shù)) | 一般key是ID或唯一標(biāo)識(shí),value是對(duì)應(yīng)的詳細(xì)信息,如:商品信息,個(gè)人信息,新聞等 |
SET | 無序集合 | SADD(創(chuàng)建集合),SMEMBERS(查看集合),SREM(刪除集合的值),SDIFF集合1 集合2(求差集),SINTER 集合1 集合2 (求合集),SUNION集合1 集合2(求并集) | 求交集,并集,合集,應(yīng)用于社交網(wǎng)絡(luò),如:共同愛好,共同好友等 |
ZSET | 有序集合 | 同SET | 可以和list結(jié)合完成排行榜 |
實(shí)現(xiàn)redis的持久化
部署redis
1.創(chuàng)建數(shù)據(jù)目錄
mkdir -p /redis/soft mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}
解釋下為什么自己創(chuàng)建conf,logs,pid目錄,而不是讓它初始化自動(dòng)生成
我們是為了再一臺(tái)主機(jī)上開啟多個(gè)redis進(jìn)程來實(shí)現(xiàn)后期的redis集群(至少6臺(tái))(Author電腦配置不允許我任性操作)
2.下載redis安裝包
cd /redis/soft wget http://download.redis.io/releases/redis-5.0.6.tar.gz
3.解壓redis到/opt/redis_cluster/
tar zxf redis-5.0.6.tar.gz -C /opt/redis_cluster/ ln -s /opt/redis_cluster/redis-5.0.6 /opt/redis_cluster/redis #做好軟連接,方便自己管理
4.切換目錄安裝redis
cd /opt/redis_cluster/redis make && make install
5.自己編寫配置文件/opt/redis_cluster/redis_6379/conf/6379.conf
添加一些重要的內(nèi)容
添加: bind 127.0.0.1 192.168.10.1 port 6379 daemonize yes #開啟daemon進(jìn)程pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log databases 16 dbfilename redis.rdb #RDB持久化文件dir /opt/redis_cluster/redis_6379 #RDB存放的位置
6.啟動(dòng)當(dāng)前redis服務(wù)
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
[root@redis-master ~]#.netstat -anpt |grep 6379tcp 0 0 192.168.10.1:6379 0.0.0.0:* LISTEN 49206/redis-server tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 49206/redis-server tcp 0 0 127.0.0.1:41400 127.0.0.1:6379 TIME_WAIT - tcp 0 0 192.168.10.1:6379 192.168.10.8:46220 ESTABLISHED 49206/redis-server [root@redis-master ~]#
持久化之RDB配置
修改配置文件,添加save項(xiàng)
vim /opt/redis_cluster/redis_6379/conf/6379.conf 添加: save 900 1 #在900秒(15分鐘)之后,如果至少有1個(gè)key發(fā)生變化,則dump內(nèi)存快照。save 300 10 #在300秒(5分鐘)之后,如果至少有10個(gè)key發(fā)生變化,則dump內(nèi)存快照。save 60 500 #在60秒(1分鐘)之后,如果至少有500個(gè)key發(fā)生變化,則dump內(nèi)存快照
持久化之AOF配置
同為修改配置文件
添加appendonly,啟用持久化
vim /opt/redis_cluster/redis_6379/conf/6379.conf 添加: appendonly yes #啟用AOF持久化appendfilename "redis.aof" #指定AOF文件名appendfsync everysec #每秒同步一次
重啟redis使其生效,驗(yàn)證持久化
redis-cli shutdownredis-server /opt/redis_cluster/redis_6379/conf/6379.conf
在redis數(shù)據(jù)庫里面添加鍵值對(duì)
#!/bin/bashfor i in {1..500}do redis-cli set k_$i v_$idone
這時(shí)候關(guān)閉數(shù)據(jù)庫,內(nèi)存里的東西正常肯定會(huì)丟失,但是,現(xiàn)在肯定不會(huì)丟失的,而且還會(huì)有持久化的文件
[root@redis-master ~]# redis-cli shutdown[root@redis-master ~]# redis-server /opt/redis_cluster/redis_6379/conf/6379.conf [root@redis-master ~]# [root@redis-master ~]# redis-cli127.0.0.1:6379> keys k_500 1) "v_500"127.0.0.1:6379>
redis主從復(fù)制
為什么要做redis主從復(fù)制?
為解決單點(diǎn)故障把數(shù)據(jù)復(fù)制到一個(gè)或多個(gè)副本副本服務(wù)器(從服務(wù)器),實(shí)現(xiàn)冗余,達(dá)到故障恢復(fù)和負(fù)載均衡的目的
另起一臺(tái)服務(wù)器,安裝redis
1.為了簡(jiǎn)單,我們直接復(fù)制前邊master
[root@redis-master ~]# scp -rp /opt/redis_cluster/ root@192.168.10.8:/opt
2.直接make install安裝redis,無須再編譯,在master已經(jīng)做過
修改配置文件
cd /opt/redis_cluster/redis vim /opt/redis_cluster/redis_6379/conf/6379.conf 修改: bind 127.0.0.1 192.168.10.8 slaveof 192.168.10.1 6379 #添加master的ip port保存退出
3.啟動(dòng)服務(wù)
redis-server /opt/redis_cluster/redis_6379/conf/6379.conf
主服務(wù)器上新建鍵值,測(cè)試從服務(wù)器自動(dòng)同步
注:
從服務(wù)器在同步過程中,只能復(fù)制主數(shù)據(jù)庫的數(shù)據(jù),不能手動(dòng)添加修改數(shù)據(jù);
如果從服務(wù)器非要修改數(shù)據(jù),需要斷開同步:
[root@redis-slave ~]# redis-cli slaveof no one
提示OK即可
如果master宕機(jī)的話,從服務(wù)器可以先手動(dòng)斷開同步,這時(shí)候,他就是一個(gè)獨(dú)立的個(gè)體,其他的從服務(wù)器再指向自己,即可完成切換
本文轉(zhuǎn)自:https://blog.csdn.net/weixin_43815140/article/details/106128848
更多相關(guān)知識(shí),請(qǐng)?jiān)L問 PHP中文網(wǎng)!!