久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis高級應(yīng)用的示例分析

198次閱讀
沒有評論

共計 4151 個字符,預(yù)計需要花費 11 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 Redis 高級應(yīng)用的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Redis 高級實用特性分 6 部分:

1、安全性

設(shè)置客戶端連接后進行任何其他操作時,需要使用密碼

修改 redis.conf 配置文件,requirepass password 指令就是用來設(shè)置密碼的

修改完配置文件后要重啟 redis 服務(wù)

重啟后,發(fā)現(xiàn)在命令行執(zhí)行操作時,會有以下提示。此時需要用 auth password 來授權(quán)

127.0.0.1:6379  keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379  auth redis123
127.0.0.1:6379  keys *
(empty list or set)

如果不希望在命令行輸入密碼來完成授權(quán),則可以在登錄客戶端時,輸入密碼

[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ù)制配置和使用非常簡單。通過主從復(fù)制可以允許多個 slave server 擁有和 master server 相同的數(shù)據(jù)庫副本

主從復(fù)制的工作原理:

1、slave 與 master 建立連接后,發(fā)送 sync 同步命令

2、master 會啟動一個后臺進程,將數(shù)據(jù)庫快照保存到文件中,同時 master 主進程會開始收集新的寫命令并緩存

3、后臺完成保存后,將此文件發(fā)送給 slave

4、slave 將此文件保存到硬盤上

主從復(fù)制的特點:

a、Master 可以擁有多個 slave

b、多個 slave 可以連接同一個 master 外,還可以連接到其他 slave(這個特性是為了防止 master 出現(xiàn)故障后,slave 無法進行同步,如果 slave 還連接了其他 slave,那么 master 掛掉后,這個 slave 就會變成 master,接管服務(wù))

c、主從復(fù)制不會阻塞 master,在同步數(shù)據(jù)時,master 可以繼續(xù)處理 client 請求

d、提高系統(tǒng)的伸縮性

主從復(fù)制的配置:

在 slava 的配置文件中加入以下配置:

slaveof 192.168.1.1 6379 #指定 master 的 ip 和端口

masterauth PASSWORD  # 這是 master 的密碼

注意:主從配置的注意事項:

master、slave 的配置文件中 bind 127.0.0.1 這條配置改成 eth0 網(wǎng)卡的 ip 地址,否則 redis 的端口默認監(jiān)聽在 127.0.0.1 上。這樣 slave 到 master 的端口不通。

更改 bind 的 IP 地址后,進入客戶端時使用命令:

$redis_home/bin/redis-cli -h 172.16.206.140

即使用 - h 參數(shù)指定 eth0 網(wǎng)卡的 IP 地址,默認是 127.0.0.1 

3、事務(wù)處理

Redis 對事務(wù)的處理目前還比較簡單,Redis 只能保證一個 client 發(fā)起的事物中的命令可以連續(xù)的執(zhí)行,而中間不會插入其他 client 的命令。當一個 client 在一個連接中發(fā)出 multi 命令時,這個連接會進入一個事務(wù)上下文,該連接后續(xù)的命令不會立即執(zhí)行,而是先放到一個隊列中,當執(zhí)行 exec 命令時,redis 會順序的執(zhí)行隊列中的命令

例如:

172.16.206.142:6379  set age 27
172.16.206.142:6379  
172.16.206.142:6379  get age
172.16.206.142:6379  multi
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:取消一個事務(wù)

172.16.206.142:6379  get age
172.16.206.142:6379  multi
172.16.206.142:6379  set age 100
QUEUED
172.16.206.142:6379  set age 200
QUEUED
172.16.206.142:6379  discard
172.16.206.142:6379  get age
 47

事務(wù)回滾:

Redis 不支持事務(wù)回滾,當隊列中有兩個事務(wù),一個完成了另外一個沒有完成,那么沒有完成的那個事務(wù)不會影響整個事務(wù)。

172.16.206.142:6379  set name zeng
172.16.206.142:6379  get age
172.16.206.142:6379  multi
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

樂觀鎖:

watch 命令會監(jiān)視給定的 key,當 exec 時候如果監(jiān)視的 key 從調(diào)用 watch 后發(fā)生過變化,則整個事務(wù)會失敗。也可以調(diào)用 watch 多次監(jiān)視多個 key,這樣就可以對指定的 key 加樂觀鎖了。

4、持久化機制

Redis 是一個支持持久化的內(nèi)存數(shù)據(jù)庫,也就是說 redis 需要經(jīng)常將內(nèi)存中的數(shù)據(jù)同步到硬盤來保證持久化。Redis 支持兩種持久化方式:

1、snapshotting(快照)也是默認方式

2、Append-only file(aof)的方式

Snapshotting 方式:

快照是默認的持久化方式,這種方式是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進制文件中,默認的文件名為 dump.rdb. 可以通過配置設(shè)置自動做持久化的方式。我們可以配置 redis 在 n 秒內(nèi)如果超過 m 個 key 被修改就自動做快照

save 900 1  #900 秒內(nèi)如果超過 1 個 key 被修改,則發(fā)起快照保存

save 300 10  #300 秒內(nèi)如果超過 10 個 key 被修改,則發(fā)起快照保存

save 60 10000

aof 方式:

由于快照方式是在一定時間間隔內(nèi)做一次,所以如果 redis 意外 down 掉的話,就會丟失最后一次快照后的所有修改。

aof 比快照方式有更好的持久化性,是由于在使用 aof 時,redis 會將每一個收到的寫命令都通過 write 函數(shù)追加到文件中,當 redis 重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容

appendonly yes // 啟用 aof 持久化方式

#appendfsync always // 收到寫命令就立即寫入磁盤,最慢,但是保證完全的持久化

appendfsync everysec // 每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中

#appendfsync no // 完全依賴 os,性能最好,持久化沒有保證

5、發(fā)布訂閱消息

發(fā)布訂閱(pub/sub)是一種消息通信模式,主要的目的是解除消息發(fā)布者和消息訂閱者之間的耦合,Redis 作為一個 pub/sub 的 server,在訂閱者和發(fā)布者之間起到了消息路由的功能。訂閱者可以通過 subscribe 和 psubscribe 命令向 redis server 訂閱自己感興趣的消息類型,redis 將信息類型稱為通道(channel)。當發(fā)布者通過 publish 命令向 redis server 發(fā)送特定類型的信息時,訂閱該信息類型的全部 client 都會收到此消息

測試:

Redis server 開三個會話窗口,并進入 redis 客戶端命令行

終端一訂閱 tv1、tv2 兩個頻道

 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)存不是一回事,但是思路和目的都是相同的。就是暫時把不經(jīng)常訪問的數(shù)據(jù)從內(nèi)存交換到磁盤中,從而騰出寶貴的內(nèi)存空間用于其他需要訪問的數(shù)據(jù)。尤其是對于 redis 這樣的內(nèi)存數(shù)據(jù)庫,內(nèi)存總是不夠用的。除了可以將數(shù)據(jù)分割到多個 redis server 外。另外能夠提高數(shù)據(jù)庫容量的辦法就是使用虛擬內(nèi)存把那些不經(jīng)常訪問的數(shù)據(jù)交換到磁盤上。

配置如下:

vm-enabled yes              # 開啟 vm 功能

really-use-vm yes            # 確定使用虛擬內(nèi)存,這條配置需要手動添加    

vm-swap-file  /tmp/redis.swap   #交換出來的 value 保存的文件路徑

vm-max-memory 1000000         #redis 使用的最大內(nèi)存上線

vm-page-size 32             #每個頁面的大小 32 字節(jié)

vm-pages 134217728           #最多使用多少個頁面

vm-max-threads 4            # 用于執(zhí)行 value 對象換入的工作線程數(shù)量

以上是“Redis 高級應(yīng)用的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-20發(fā)表,共計4151字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 依安县| 五家渠市| 吕梁市| 巴林左旗| 大关县| 庄浪县| 岳普湖县| 英德市| 泽库县| 石台县| 呼图壁县| 肇源县| 孟州市| 巫溪县| 扎兰屯市| 白沙| 班戈县| 绿春县| 宁都县| 威宁| 六安市| 建昌县| 河南省| 兴安盟| 武威市| 阜宁县| 石城县| 盐边县| 夹江县| 城固县| 汶川县| 昌吉市| 日照市| 监利县| 徐水县| 九寨沟县| 鸡泽县| 英德市| 商南县| 福海县| 南通市|