標籤:redis
11.redis常用命令
keys * 返回所有的鍵
keys my* 模糊比對
exists key 確認key是否存在
del key
expire key time對現有的鍵設定到期時間[秒為單位]
ttl key 查看到期時間,-1代表已到期
move 將當期資料庫中的key移到其它資料庫當中
select database_name 選擇資料庫
move key database_name
persist key 取消到期時間,此時ttl key返回-1並不代表到期
randomkey 隨機返回一個key
rename 重新命名key
rename set2 set20
type key 返回key的類型
ping 測試連接是否正常
echo 在命令列列印一些內容
select database 選擇資料庫 ,redis資料庫編號在0到15之間
quit/exit/ctrl+c退出
dbsize返回當前資料庫的數目
info擷取伺服器的資訊與統計
config get key 即時傳儲收到的請求
config get *
flushdb 刪除當前選擇資料庫中的所有key
flushall 刪除所有資料庫當中的所有key
12.redis進階應用程式
12.1安全性
設定密碼:
vi /usr/local/redis/etc/redis.conf
requirepass password
重啟服務之後進行串連
/usr/local/redis/bin/redis-cli
auth password
或者/usr/local/redis/bin/redis-cli -a password
12.2主從複製
master可以有多個slave
多個slave可以串連到同一個master外,還可以串連到其它的slave
主從複製不會阻塞master,在同步資料的時候,master可以繼續處理client請求
提高系統的伸縮性
redis主從複製的過程:
slave與master建立串連,發送sync同步指令
master會啟動一個後台進程,將資料庫快照集儲存到檔案中,同時master主進程會開始收集新的寫命令並緩衝
slave將此檔案儲存到硬碟上
配置主從伺服器:
配置slave伺服器很簡單,只需要在slave的設定檔中加入以下配置:
slaveof 192.168.1.1 6379#指定master的IP和連接埠
masterauth password #這是主機的密碼
info可以查看主從機器資訊
12.3事物處理
redis對事務的支援目前還比較簡單,redis只能保證一個Client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令,當一個client在一個串連中發出multi命令時,這個
串連會進入一個事務上下文,該串連後續的命令不會立即執行,而是先放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令
multi可以開啟事務上下文
exec執行事務當中的命令
discard取消事務
樂觀鎖:大多數是基於資料版本version的記錄機制實現的,即為資料增加一個版本標識
,在基於資料庫表的版本解決方案中,一般是通過為資料庫表添加一個version欄位來實現讀取資料時,
將此版本號碼一同讀出,之後更新時,對比版本號碼加1.此時,將提交資料的版本號碼與資料表對應記錄的目前的版本號進行對比
,如果提交的資料版本號碼大於資料庫目前的版本號,則予以更新,否則認為是到期資料
redis樂觀鎖
get age
watch age
multi
watch命令會監視給定的key,當exec時如果監視的key從調用watch後發生過變化,則整個事務會失敗。
也可以調用watch多次監視多個key,這樣就可以對指定的key加樂觀鎖了,注意watch的key是對整個
串連有效,事務也一樣。如果中斷連線,監視和事務都會被自動清除,當然了exec,discard,unwatch命令都會
清除串連中的所有監視。
12.4持久化機制
redis是一個支援持久化的記憶體資料庫,也就是說redis需要經常將記憶體中的資料同步到硬碟來保證持久化
1.snapshotting(快照)也是預設
2.append-only file(縮寫aof)的方式
快照是預設的持久化方式。這種方式是將記憶體中資料以快照的方式寫入到二進位檔案當中,預設的檔案名稱為
dump.rdb.可以通過配置設定自動做快照持久化的方式,我們可以配置redis在n秒內如果超過m個key被修改
就自動寫快照
save 900 1#900秒內如果超過一個key被修改,則發起快照儲存
save 300 10#300秒內如超過10個key被修改,則發起快照儲存
save 60 10000
由於快照方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照後的所有修改
aof比快照方式有更好的持久性,是由於在使用aof時,redis會將沒一個收到的寫命令都通過write函數追加到檔案中,
當redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。
當然由於os會在核心中緩衝write做的修改,所以可能不是立即寫到硬碟上,這樣aof方式的持久化也還是有可能會丟失部分修改。
可以通過設定檔告訴redis我們想要通過fsync函數強制os寫入到磁碟的時機
appendonly yes #啟用aof持久化方式
#appendfsync always #收到寫命令就立即寫入磁碟,最慢,但是保證完全的持久化
appendfsync everysec #每秒鐘寫入磁碟一次,在效能和持久化方面做了很好的折中
#appedfsync no #完全依賴os,效能最好,持久化沒保證
12.5發布訂閱訊息
發布訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解除訊息發行者和訊息訂閱者之間的耦合,redis作為一個pub/sub
的server,在訂閱者和發行者之間起到了訊息路由的功能,訂閱者可以通過subscribe和
psubscribe命令向redis server訂閱自己感興趣的訊息類型,redis將資訊類型稱為通道
(cahnnel).當發行者通過publish命令向redis server發送特定類型的資訊時,訂閱該資訊類型的全部client都會收到此訊息
subscribe tv1 監聽
subscribe tv1 tv2
publish tv1 zsjbroadcast 廣播
12.6虛擬記憶體的使用
redis的虛擬記憶體與作業系統的虛擬記憶體不是一回事,但是思路和目的都是相同的
就是暫時把不經常訪問的資料從記憶體交換到磁碟中,從而騰出寶貴的記憶體空間
用於其他需要訪問的資料,尤其是對於redis這樣的記憶體資料庫,記憶體總是不夠用的,除了可以將資料分割到多個redis server外
另外能夠提高資料庫容量的辦法就是使用虛擬記憶體把那些不經常訪問的資料交換到磁碟上
vm-enabled yes#開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value儲存的檔案路徑
vm-max-memory 1000000 #redis使用的最大記憶體上限
vm-page-size 32 #每個頁面的大小32位元組
vm-pages 1344217728 #最多使用多少頁面
vm-max-threads 4#用於執行value對象換入緩衝的背景工作執行緒數量
本文出自 “逆天” 部落格,請務必保留此出處http://xxzjzsj.blog.51cto.com/3052058/1629164
redis常用命令及進階特性