Jedis基本用法:redis
鏈接池創建-〉訪問密碼設置-〉鏈接超時等參數設置app
詳看 cacheDemo的JedisUtils工具類工具
pom.xml引入如下依賴便可性能
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
1.jedis直接鏈接redis以下:測試
2,使用鏈接池方式優化
生產環境通常使用鏈接池進行操做,jedis鏈接redis對象放在鏈接池裏,每次用的時候去POOL借用,用完後歸還lua
序列化與反序列化spa
指把結構化的對象變成無結構的字節流,便於存儲、傳輸,保持一個類在傳遞數據的有序性,使接收到的數據更具備保證,而反序列化是利用類成員變量反射成爲一個類操作系統
(即把對象序列化後存redis, 從redis取值後反序列化爲JAVA對象)線程
序列化的工具依賴包
<dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-runtime</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.1.3</version> </dependency>
實例:見cache-demo的SerializerTest測試用例
Jedis中的pipeline使用方式
你們知道redis提供了mset、mget方法,但沒有提供mdel方法,
若是想實現,能夠藉助pipeline實現,詳見cache-demo, 看JedisAllCommandTest用例testPipelineMdel方法
下面代碼可將set和incr作一次pipiline操做,看JedisAllCommandTest用例testPipelineSyncAll方法
Jedis中的lua腳本
6379>set name james
6379>eval "return redis.call('get',KEYS[1])" 1 name //1個鍵,鍵名爲name,返回james
能夠看JedisAllCommandTest用例testLuaScript方法
如何執行lua文件呢?
例子請看cache-demo的testLuaFile測試用例方法
redis支持RDB和AOF兩種持久化機制,持久化能夠避免因進程退出而形成數據丟失;
RDB持久化
把當前進程數據生成快照(.rdb)文件保存到硬盤的過程,有手動觸發和自動觸發
手動觸發有save和bgsave兩命令
save命令:阻塞當前Redis,直到RDB持久化過程完成爲止,若內存實例比較大會形成長時間阻塞,線上環境不建議用它
bgsave命令:redis進程執行fork操做建立子線程,由子線程完成持久化,阻塞時間很短(微秒級),是save的優化,在執行redis-cli shutdown關閉redis服務時,若是沒有開啓AOF持久化,自動執行bgsave;
顯然bgsave是對save的優化
bgsave運行流程
RDB文件的操做
命令:config set dir /usr/local //設置rdb文件保存路徑
備份:bgsave //將dump.rdb保存到usr/local下
恢復:將dump.rdb放到redis安裝目錄與redis.conf同級目錄,重啓redis便可
優勢:1,壓縮後的二進制文,適用於備份、全量複製,用於災難恢復
2,加載RDB恢復數據遠快於AOF方式
缺點:1,沒法作到實時持久化,每次都要建立子進程,頻繁操做成本太高
2,保存後的二進制文件,存在老版本不兼容新版本rdb文件的問題
AOF持久化
針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決
開啓:redis.conf設置:appendonly yes (默認不開啓,爲no)
默認文件名:appendfilename "appendonly.aof"
流程說明: 1,全部的寫入命令(set hset)會append追加到aof_buf緩衝區中
2,AOF緩衝區向硬盤作sync同步
3,隨着AOF文件愈來愈大,需按期對AOF文件rewrite重寫,達到壓縮
4,當redis服務重啓,可load加載AOF文件進行恢復
AOF持久化流程:命令寫入(append),文件同步(sync),文件重寫(rewrite),重啓加載(load)
redis的AOF配置詳解:
appendonly yes //啓用aof持久化方式
# appendfsync always //每收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
appendfsync everysec //每秒強制寫入磁盤一次,性能和持久化方面作了折中,推薦
# appendfsync no //徹底依賴os,性能最好,持久化沒保證(操做系統自身的同步)
no-appendfsync-on-rewrite yes //正在導出rdb快照的過程當中,要不要中止同步aof
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重寫時的大小,增加率100%時,重寫
auto-aof-rewrite-min-size 64mb //aof文件,至少超過64M時,重寫
如何從AOF恢復?
1. 設置appendonly yes;
2. 將appendonly.aof放到dir參數指定的目錄;
3. 啓動Redis,Redis會自動加載appendonly.aof文件。
redis重啓時恢復加載AOF與RDB順序及流程:
1,當AOF和RDB文件同時存在時,優先加載
2,若關閉了AOF,加載RDB文件
3,加載AOF/RDB成功,redis重啓成功
4,AOF/RDB存在錯誤,redis啓動失敗並打印錯誤信息