您好,登錄后才能下訂單哦!
小編給大家分享一下Redis高級應用的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Redis高級實用特性分6部分:
1、安全性
設置客戶端連接后進行任何其他操作時,需要使用密碼
修改redis.conf配置文件,requirepass password指令就是用來設置密碼的
修改完配置文件后要重啟redis服務
重啟后,發現在命令行執行操作時,會有以下提示。此時需要用auth password 來授權
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)
如果不希望在命令行輸入密碼來完成授權,則可以在登錄客戶端時,輸入密碼
[root@localhost init.d]# /usr/local/redis/bin/redis-cli -a redis123 127.0.0.1:6379> keys * (empty list or set)
2、主從復制
Redis主從復制配置和使用非常簡單。通過主從復制可以允許多個slave server擁有和master server相同的數據庫副本
主從復制的工作原理:
1、slave與master建立連接后,發送sync同步命令
2、master會啟動一個后臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令并緩存
3、后臺完成保存后,將此文件發送給slave
4、slave將此文件保存到硬盤上
主從復制的特點:
a、Master可以擁有多個slave
b、多個slave可以連接同一個master外,還可以連接到其他slave(這個特性是為了防止master出現故障后,slave無法進行同步,如果slave還連接了其他slave,那么master掛掉后,這個slave就會變成master,接管服務)
c、主從復制不會阻塞master,在同步數據時,master可以繼續處理client請求
d、提高系統的伸縮性
主從復制的配置:
在slava的配置文件中加入以下配置:
slaveof 192.168.1.1 6379 #指定master的ip和端口
masterauth PASSWORD # 這是master的密碼
注意:主從配置的注意事項:
master、slave的配置文件中bind 127.0.0.1 這條配置改成eth0網卡的ip地址,否則redis的端口默認監聽在127.0.0.1上。這樣slave 到master的端口不通。
更改bind 的IP地址后,進入客戶端時使用命令:
$redis_home/bin/redis-cli -h 172.16.206.140
即使用-h參數指定eth0網卡的IP地址,默認是127.0.0.1
3、事務處理
Redis對事務的處理目前還比較簡單,Redis只能保證一個client發起的事物中的命令可以連續的執行,而中間不會插入其他client的命令。當一個client在一個連接中發出multi命令時,這個連接會進入一個事務上下文,該連接后續的命令不會立即執行,而是先放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的命令
例如:
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:取消一個事務
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"
事務回滾:
Redis不支持事務回滾,當隊列中有兩個事務,一個完成了另外一個沒有完成,那么沒有完成的那個事務不會影響整個事務。
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"
樂觀鎖:
watch命令會監視給定的key,當exec時候如果監視的key從調用watch后發生過變化,則整個事務會失敗。也可以調用watch多次監視多個key,這樣就可以對指定的key加樂觀鎖了。
4、持久化機制
Redis是一個支持持久化的內存數據庫,也就是說redis需要經常將內存中的數據同步到硬盤來保證持久化。Redis支持兩種持久化方式:
1、snapshotting(快照)也是默認方式
2、Append-only file(aof)的方式
Snapshotting方式:
快照是默認的持久化方式,這種方式是將內存中數據以快照的方式寫入到二進制文件中,默認的文件名為dump.rdb.可以通過配置設置自動做持久化的方式。我們可以配置redis在n秒內如果超過m個key被修改就自動做快照
save 900 1 #900秒內如果超過1個key被修改,則發起快照保存
save 300 10 #300秒內如果超過10個key被修改,則發起快照保存
save 60 10000
aof方式:
由于快照方式是在一定時間間隔內做一次,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof時,redis會將每一個收到的寫命令都通過 write函數追加到文件中,當redis重啟時會通過重新執行文件中保存的寫命令來在內存中重建整個數據庫的內容
appendonly yes //啟用aof持久化方式
#appendfsync always //收到寫命令就立即寫入磁盤,最慢,但是保證完全的持久化
appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中
#appendfsync no //完全依賴os,性能最好,持久化沒有保證
5、發布訂閱消息
發布訂閱(pub/sub)是一種消息通信模式,主要的目的是解除消息發布者和消息訂閱者之間的耦合,Redis作為一個pub/sub的server,在訂閱者和發布者之間起到了消息路由的功能。訂閱者可以通過subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將信息類型稱為通道(channel)。當發布者通過publish命令向redis server發送特定類型的信息時,訂閱該信息類型的全部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頻道發布消息hello
>publish tv1 hello (integer) 2
結果:
終端一、二都收到消息:
1) "message" 2) "tv1" 3) "hello"
6、虛擬內存的使用
Redis的虛擬內存與操作系統的虛擬內存不是一回事,但是思路和目的都是相同的。就是暫時把不經常訪問的數據從內存交換到磁盤中,從而騰出寶貴的內存空間用于其他需要訪問的數據。尤其是對于redis這樣的內存數據庫,內存總是不夠用的。除了可以將數據分割到多個redis server外。另外能夠提高數據庫容量的辦法就是使用虛擬內存把那些不經常訪問的數據交換到磁盤上。
配置如下:
vm-enabled yes #開啟vm功能
really-use-vm yes #確定使用虛擬內存,這條配置需要手動添加
vm-swap-file /tmp/redis.swap #交換出來的value保存的文件路徑
vm-max-memory 1000000 #redis使用的最大內存上線
vm-page-size 32 #每個頁面的大小32字節
vm-pages 134217728 #最多使用多少個頁面
vm-max-threads 4 #用于執行value對象換入的工作線程數量
以上是“Redis高級應用的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。