3、事務處理
Redis的事務處理比較簡單。只能保證client發起的事務中的命令可以連續的履行,而且不會插入其他的client命令,當1個client在連接中發出multi命令時,這個連接就進入1個事務的上下文,該連接后續的命令不會履行,而是寄存到1個隊列中,當履行exec命令時,redis會順序的履行隊列中的所有命令。如果其中履行出現錯去,履行正確的不會回滾,次不同于關系型數據庫的事務。
回滾后age的值已改變。
取消1個事務用discard,取消事務隊列,數據全部回滾。
Redis樂觀鎖:使用watch監視指定的key,當exec時如果監視的key從調用watch后產生過變化,這全部事務會失敗。可調用watch屢次監視多個key。watch和事務對全部連接有效,如果斷開了連接監視和事務都會清除(exec,discard,unwatch也不例外)。
4、持久化機制
Redis是1個支持持久化的內存數據庫,Redis需要常常將內存中的數據同步到磁盤來保證持久化。
Redis支持兩種持久化方式:
1、snapshotting(快照),將數據寄存到文件里,默許方式。
是將內存中的數據已快照的方式寫入到2進制文件中,默許文件dump.rdb,可以通過配置設置自動做快照持久化的方式??膳渲肦edis在n秒內如果超過m
個key被修改就自動保存快照。
save 900 1 #900秒內如果超過1個key被修改,者發起快照保存
save 300 10 #300秒內如果超過10個key被修改,這快照保存
save 60 10000 #60秒內如果超過10000個數據被修改,發起快照保存
2、 Append-only file(縮寫為aof),將讀寫操作寄存到文件中。
由于快照方式在1定間隔時間做1次,所以如果Redis意外down掉的話,就會丟失最后1次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于使用aof時,redis會將每個收到的寫命令都通過write函數住家到文件中當redis啟東市會通太重新履行文件中保存
的寫命令來在內存中重新建立全部數據庫的內容。
由于os會在內核中緩存write做的修改,所以可能不是立即寫到磁盤上,這樣aof方式的持久化也還是有可能會丟失1部份數據。
可以通過配置文件告知redis我們想要通過fsync函數強迫os寫入到磁盤的時機。
appendonly yes #啟用aof持久化方式
#appendfsync always //收到寫命令就立即寫入磁盤,最慢,但是保證了數據的完全持久化
appendfsync everysec //每秒中寫入磁盤1次,在性能和持久化方面做了很好的折衷
#appendfsync no //完全依賴os,性能最好,持久化沒有保證
開啟以后,在bin文件夾中會多兩個存儲文件,以下:
5、發布與定閱信息
發布定閱(pub/sub)是1種消息通訊模式,主要的目的是消除消息發布者和定閱者之間的耦合,Redis作為1個pub/sub的server,在定閱者和發布者之間起到消息路由的功能。定閱者通過subscribe和psubscribe命令向redis定閱自己感興趣的消息類型,redis將信息類型成為通道(channel)。當發布者通過關publish命令向redis server發送特定類型的信息時,定閱該消息類型的全部client都會接收到此消息。
例如開啟3個客戶端,1個發布消息,另外兩個定閱消息,以下
6、虛擬內存的使用
Redis的虛擬內存是暫時吧不常常訪問的數據從內存交換到磁盤中,從而騰出內存空間用于其他的訪問數據,特別對redis這樣的內存數據庫,內存總是不夠用的。除分隔到多個redis server外,提高數據庫的容量的方法就是使用虛擬內存,把那些不常訪問的數據交換到磁盤上。
通過配置vm相干的redis.config配置:
vm-enable yes #開啟vm功能
vm-swap-file /tmp/redis.swap #交換出來的value保存的文件路徑
vm-max-memory 10000000 #redis使用的最大內存上線
vm-page-size 32 #每一個頁面的大小32字節
vm-pages 123217729 #最多使用多小個頁面
vm-max-threads 4 #用于履行value對象換入的工作線程數量
虛擬內存管理在2.6及之上版本取消了
上一篇 Spring常用注解