十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
小編給大家分享一下redis高級(jí)應(yīng)用的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比赤壁網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式赤壁網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋赤壁地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴(lài)。
Redis高級(jí)實(shí)用特性分6部分:
1、安全性
設(shè)置客戶(hù)端連接后進(jìn)行任何其他操作時(shí),需要使用密碼
修改redis.conf配置文件,requirepass password指令就是用來(lái)設(shè)置密碼的
修改完配置文件后要重啟redis服務(wù)
重啟后,發(fā)現(xiàn)在命令行執(zhí)行操作時(shí),會(huì)有以下提示。此時(shí)需要用auth password 來(lái)授權(quán)
127.0.0.1:6379> keys * (error) NOAUTH Authentication required. 127.0.0.1:6379> auth redis123 OK 127.0.0.1:6379> keys * (empty list or set)
如果不希望在命令行輸入密碼來(lái)完成授權(quán),則可以在登錄客戶(hù)端時(shí),輸入密碼
[root@localhost init.d]# /usr/local/redis/bin/redis-cli -a redis123 127.0.0.1:6379> keys * (empty list or set)
2、主從復(fù)制
Redis主從復(fù)制配置和使用非常簡(jiǎn)單。通過(guò)主從復(fù)制可以允許多個(gè)slave server擁有和master server相同的數(shù)據(jù)庫(kù)副本
主從復(fù)制的工作原理:
1、slave與master建立連接后,發(fā)送sync同步命令
2、master會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程,將數(shù)據(jù)庫(kù)快照保存到文件中,同時(shí)master主進(jìn)程會(huì)開(kāi)始收集新的寫(xiě)命令并緩存
3、后臺(tái)完成保存后,將此文件發(fā)送給slave
4、slave將此文件保存到硬盤(pán)上
主從復(fù)制的特點(diǎn):
a、Master可以擁有多個(gè)slave
b、多個(gè)slave可以連接同一個(gè)master外,還可以連接到其他slave(這個(gè)特性是為了防止master出現(xiàn)故障后,slave無(wú)法進(jìn)行同步,如果slave還連接了其他slave,那么master掛掉后,這個(gè)slave就會(huì)變成master,接管服務(wù))
c、主從復(fù)制不會(huì)阻塞master,在同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client請(qǐng)求
d、提高系統(tǒng)的伸縮性
主從復(fù)制的配置:
在slava的配置文件中加入以下配置:
slaveof 192.168.1.1 6379 #指定master的ip和端口
masterauth PASSWORD # 這是master的密碼
注意:主從配置的注意事項(xiàng):
master、slave的配置文件中bind 127.0.0.1 這條配置改成eth0網(wǎng)卡的ip地址,否則redis的端口默認(rèn)監(jiān)聽(tīng)在127.0.0.1上。這樣slave 到master的端口不通。
更改bind 的IP地址后,進(jìn)入客戶(hù)端時(shí)使用命令:
$redis_home/bin/redis-cli -h 172.16.206.140
即使用-h參數(shù)指定eth0網(wǎng)卡的IP地址,默認(rèn)是127.0.0.1
3、事務(wù)處理
Redis對(duì)事務(wù)的處理目前還比較簡(jiǎn)單,Redis只能保證一個(gè)client發(fā)起的事物中的命令可以連續(xù)的執(zhí)行,而中間不會(huì)插入其他client的命令。當(dāng)一個(gè)client在一個(gè)連接中發(fā)出multi命令時(shí),這個(gè)連接會(huì)進(jìn)入一個(gè)事務(wù)上下文,該連接后續(xù)的命令不會(huì)立即執(zhí)行,而是先放到一個(gè)隊(duì)列中,當(dāng)執(zhí)行exec命令時(shí),redis會(huì)順序的執(zhí)行隊(duì)列中的命令
例如:
172.16.206.142:6379> set age 27 OK 172.16.206.142:6379> 172.16.206.142:6379> get age "27" 172.16.206.142:6379> multi OK 172.16.206.142:6379> set age 37 QUEUED 172.16.206.142:6379> set age 47\ QUEUED 172.16.206.142:6379> set age 47 QUEUED 172.16.206.142:6379> exec 1) OK 2) OK 3) OK 172.16.206.142:6379> get age "47"
discard:取消一個(gè)事務(wù)
172.16.206.142:6379> get age "47" 172.16.206.142:6379> multi OK 172.16.206.142:6379> set age 100 QUEUED 172.16.206.142:6379> set age 200 QUEUED 172.16.206.142:6379> discard OK 172.16.206.142:6379> get age "47"
事務(wù)回滾:
Redis不支持事務(wù)回滾,當(dāng)隊(duì)列中有兩個(gè)事務(wù),一個(gè)完成了另外一個(gè)沒(méi)有完成,那么沒(méi)有完成的那個(gè)事務(wù)不會(huì)影響整個(gè)事務(wù)。
172.16.206.142:6379> set name zeng OK 172.16.206.142:6379> get age "47" 172.16.206.142:6379> multi OK 172.16.206.142:6379> incr age QUEUED 172.16.206.142:6379> incr name QUEUED 172.16.206.142:6379> exec 1) (integer) 48 2) (error) ERR value is not an integer or out of range 172.16.206.142:6379> get name "zeng" 172.16.206.142:6379> 172.16.206.142:6379> get age "48"
樂(lè)觀鎖:
watch命令會(huì)監(jiān)視給定的key,當(dāng)exec時(shí)候如果監(jiān)視的key從調(diào)用watch后發(fā)生過(guò)變化,則整個(gè)事務(wù)會(huì)失敗。也可以調(diào)用watch多次監(jiān)視多個(gè)key,這樣就可以對(duì)指定的key加樂(lè)觀鎖了。
4、持久化機(jī)制
Redis是一個(gè)支持持久化的內(nèi)存數(shù)據(jù)庫(kù),也就是說(shuō)redis需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到硬盤(pán)來(lái)保證持久化。Redis支持兩種持久化方式:
1、snapshotting(快照)也是默認(rèn)方式
2、Append-only file(aof)的方式
Snapshotting方式:
快照是默認(rèn)的持久化方式,這種方式是將內(nèi)存中數(shù)據(jù)以快照的方式寫(xiě)入到二進(jìn)制文件中,默認(rèn)的文件名為dump.rdb.可以通過(guò)配置設(shè)置自動(dòng)做持久化的方式。我們可以配置redis在n秒內(nèi)如果超過(guò)m個(gè)key被修改就自動(dòng)做快照
save 900 1 #900秒內(nèi)如果超過(guò)1個(gè)key被修改,則發(fā)起快照保存
save 300 10 #300秒內(nèi)如果超過(guò)10個(gè)key被修改,則發(fā)起快照保存
save 60 10000
aof方式:
由于快照方式是在一定時(shí)間間隔內(nèi)做一次,所以如果redis意外down掉的話,就會(huì)丟失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof時(shí),redis會(huì)將每一個(gè)收到的寫(xiě)命令都通過(guò) write函數(shù)追加到文件中,當(dāng)redis重啟時(shí)會(huì)通過(guò)重新執(zhí)行文件中保存的寫(xiě)命令來(lái)在內(nèi)存中重建整個(gè)數(shù)據(jù)庫(kù)的內(nèi)容
appendonly yes //啟用aof持久化方式
#appendfsync always //收到寫(xiě)命令就立即寫(xiě)入磁盤(pán),最慢,但是保證完全的持久化
appendfsync everysec //每秒鐘寫(xiě)入磁盤(pán)一次,在性能和持久化方面做了很好的折中
#appendfsync no //完全依賴(lài)os,性能最好,持久化沒(méi)有保證
5、發(fā)布訂閱消息
發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解除消息發(fā)布者和消息訂閱者之間的耦合,Redis作為一個(gè)pub/sub的server,在訂閱者和發(fā)布者之間起到了消息路由的功能。訂閱者可以通過(guò)subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類(lèi)型,redis將信息類(lèi)型稱(chēng)為通道(channel)。當(dāng)發(fā)布者通過(guò)publish命令向redis server發(fā)送特定類(lèi)型的信息時(shí),訂閱該信息類(lèi)型的全部client都會(huì)收到此消息
測(cè)試:
Redis server開(kāi)三個(gè)會(huì)話窗口,并進(jìn)入redis客戶(hù)端命令行
終端一訂閱tv1、tv2兩個(gè)頻道
> subscribe tv1 tv2 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1 1) "subscribe" 2) "tv2" 3) (integer) 2
終端二訂閱tv2頻道
> subscribe tv1 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "tv1" 3) (integer) 1
終端三向tv1頻道發(fā)布消息hello
>publish tv1 hello (integer) 2
結(jié)果:
終端一、二都收到消息:
1) "message" 2) "tv1" 3) "hello"
6、虛擬內(nèi)存的使用
Redis的虛擬內(nèi)存與操作系統(tǒng)的虛擬內(nèi)存不是一回事,但是思路和目的都是相同的。就是暫時(shí)把不經(jīng)常訪問(wèn)的數(shù)據(jù)從內(nèi)存交換到磁盤(pán)中,從而騰出寶貴的內(nèi)存空間用于其他需要訪問(wèn)的數(shù)據(jù)。尤其是對(duì)于redis這樣的內(nèi)存數(shù)據(jù)庫(kù),內(nèi)存總是不夠用的。除了可以將數(shù)據(jù)分割到多個(gè)redis server外。另外能夠提高數(shù)據(jù)庫(kù)容量的辦法就是使用虛擬內(nèi)存把那些不經(jīng)常訪問(wèn)的數(shù)據(jù)交換到磁盤(pán)上。
配置如下:
vm-enabled yes #開(kāi)啟vm功能
really-use-vm yes #確定使用虛擬內(nèi)存,這條配置需要手動(dòng)添加
vm-swap-file /tmp/redis.swap #交換出來(lái)的value保存的文件路徑
vm-max-memory 1000000 #redis使用的最大內(nèi)存上線
vm-page-size 32 #每個(gè)頁(yè)面的大小32字節(jié)
vm-pages 134217728 #最多使用多少個(gè)頁(yè)面
vm-max-threads 4 #用于執(zhí)行value對(duì)象換入的工作線程數(shù)量
以上是“Redis高級(jí)應(yīng)用的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!