08-MyBatis(2)
Redis 資料備份與恢復
RedisSAVE命令用於建立當前資料庫的備份。
語法
redis Save 命令基本語法如下:
redis 127.0.0.1:6379> SAVE
例項
redis 127.0.0.1:6379> SAVE
OK
該命令將在 redis 安裝目錄中建立dump.rdb檔案。
恢復資料
如果需要恢復資料,只需將備份檔案 (dump.rdb) 移動到 redis 安裝目錄並啟動服務即可。獲取 redis 目錄可以使用CONFIG命令,如下所示:
redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"
以上命令CONFIG GET dir輸出的 redis 安裝目錄為 /usr/local/redis/bin。
Bgsave
建立 redis 備份檔案也可以使用命令BGSAVE,該命令在後臺執行。
例項
127.0.0.1:6379> BGSAVE Background saving started
Redis 安全
我們可以通過 redis 的配置檔案設定密碼引數,這樣客戶端連線到 redis 服務就需要密碼驗證,這樣可以讓你的 redis 服務更安全。
例項
我們可以通過以下命令檢視是否設定了密碼驗證:
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
預設情況下 requirepass 引數是空的,這就意味著你無需通過密碼驗證就可以連線到 redis 服務。
你可以通過以下命令來修改該引數:
127.0.0.1:6379> CONFIG set requirepass "runoob"
OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "runoob"
設定密碼後,客戶端連線 redis 服務就需要密碼驗證,否則無法執行命令。
語法
AUTH命令基本語法格式如下:
127.0.0.1:6379> AUTH password
例項
127.0.0.1:6379> AUTH "runoob"
OK
127.0.0.1:6379> SET mykey "Test value"
OK
127.0.0.1:6379> GET mykey
"Test value"
Redis 客戶端連線
Redis 通過監聽一個 TCP 埠或者 Unix socket 的方式來接收來自客戶端的連線,當一個連線建立後,Redis 內部會進行以下一些操作:
- 首先,客戶端 socket 會被設定為非阻塞模式,因為 Redis 在網路事件處理上採用的是非阻塞多路複用模型。
- 然後為這個 socket 設定 TCP_NODELAY 屬性,禁用 Nagle 演算法
- 然後建立一個可讀的檔案事件用於監聽這個客戶端 socket 的資料傳送
最大連線數
在 Redis2.4 中,最大連線數是被直接硬編碼在程式碼裡面的,而在2.6版本中這個值變成可配置的。
maxclients 的預設值是 10000,你也可以在 redis.conf 中對這個值進行修改。
config get maxclients
1) "maxclients"
2) "10000"
例項
以下例項我們在服務啟動時設定最大連線數為 100000:
redis-server --maxclients 100000
客戶端命令
S.N. | 命令 | 描述 |
---|---|---|
1 | CLIENT LIST | 返回連線到 redis 服務的客戶端列表 |
2 | CLIENT SETNAME | 設定當前連線的名稱 |
3 | CLIENT GETNAME | 獲取通過 CLIENT SETNAME 命令設定的服務名稱 |
4 | CLIENT PAUSE | 掛起客戶端連線,指定掛起的時間以毫秒計 |
5 | CLIENT KILL | 關閉客戶端連線 |
Redis 管道技術
Redis是一種基於客戶端-服務端模型以及請求/響應協議的TCP服務。這意味著通常情況下一個請求會遵循以下步驟:
- 客戶端向服務端傳送一個查詢請求,並監聽Socket返回,通常是以阻塞模式,等待服務端響應。
- 服務端處理命令,並將結果返回給客戶端。
https://blog.csdn.net/qq_24313635/article/details/83054300
Redis 分割槽
分割槽是分割資料到多個Redis例項的處理過程,因此每個例項只儲存key的一個子集。
分割槽的優勢
- 通過利用多臺計算機記憶體的和值,允許我們構造更大的資料庫。
- 通過多核和多臺計算機,允許我們擴充套件計算能力;通過多臺計算機和網路介面卡,允許我們擴充套件網路頻寬。
分割槽的不足
redis的一些特性在分割槽方面表現的不是很好:
- 涉及多個key的操作通常是不被支援的。舉例來說,當兩個set對映到不同的redis例項上時,你就不能對這兩個set執行交集操作。
- 涉及多個key的redis事務不能使用。
- 當使用分割槽時,資料處理較為複雜,比如你需要處理多個rdb/aof檔案,並且從多個例項和主機備份持久化檔案。
- 增加或刪除容量也比較複雜。redis叢集大多數支援在執行時增加、刪除節點的透明資料平衡的能力,但是類似於客戶端分割槽、代理等其他系統則不支援這項特性。然而,一種叫做presharding的技術對此是有幫助的。
分割槽型別
Redis 有兩種型別分割槽。 假設有4個Redis例項 R0,R1,R2,R3,和類似user:1,user:2這樣的表示使用者的多個key,對既定的key有多種不同方式來選擇這個key存放在哪個例項中。也就是說,有不同的系統來對映某個key到某個Redis服務。
範圍分割槽
最簡單的分割槽方式是按範圍分割槽,就是對映一定範圍的物件到特定的Redis例項。
比如,ID從0到10000的使用者會儲存到例項R0,ID從10001到 20000的使用者會儲存到R1,以此類推。
這種方式是可行的,並且在實際中使用,不足就是要有一個區間範圍到例項的對映表。這個表要被管理,同時還需要各 種物件的對映表,通常對Redis來說並非是好的方法。
雜湊分割槽
另外一種分割槽方法是hash分割槽。這對任何key都適用,也無需是object_name:這種形式,像下面描述的一樣簡單:
- 用一個hash函式將key轉換為一個數字,比如使用crc32 hash函式。對key foobar執行crc32(foobar)會輸出類似93024922的整數。
- 對這個整數取模,將其轉化為0-3之間的數字,就可以將這個整數對映到4個Redis例項中的一個了。93024922 % 4 = 2,就是說key foobar應該被存到R2例項中。注意:取模操作是取除的餘數,通常在多種程式語言中用%操作符實現。
JAVA使用Redis
連線到 redis 服務
例項
import redis.clients.jedis.Jedis; public class RedisJava { public static void main(String[] args) { //連線本地的 Redis 服務 Jedis jedis = new Jedis("localhost"); // 如果 Redis 服務設定來密碼,需要下面這行,沒有就不需要 // jedis.auth("123456"); System.out.println("連線成功"); //檢視服務是否執行 System.out.println("服務正在執行: "+jedis.ping()); } }編譯以上 Java 程式,確保驅動包的路徑是正確的。
連線成功
服務正在執行: PONG
Redis Java String(字串) 例項
例項
import redis.clients.jedis.Jedis; public class RedisStringJava { public static void main(String[] args) { //連線本地的 Redis 服務 Jedis jedis = new Jedis("localhost"); System.out.println("連線成功"); //設定 redis 字串資料 jedis.set("runoobkey", "www.runoob.com"); // 獲取儲存的資料並輸出 System.out.println("redis 儲存的字串為: "+ jedis.get("runoobkey")); } }編譯以上程式。
連線成功
redis 儲存的字串為: www.runoob.com
Redis Java List(列表) 例項
例項
@Test public void testRedisCon(){ Jedis jedis = new Jedis("localhost"); jedis.auth("renlong"); jedis.set("renlong","這個是redis測試用的"); jedis.lpush("1","dfsd"); System.out.println(jedis.keys("*")); System.out.println(jedis.ping()); }
編譯以上程式。
連線成功
列表項為: Taobao
列表項為: Google
列表項為: Runoob
Redis Java Keys 例項
例項
@Test public void testRedisCon(){ Jedis jedis = new Jedis("localhost"); jedis.auth("renlong"); jedis.set("renlong","這個是redis測試用的"); jedis.lpush("1","dfsd"); System.out.println(jedis.keys("*")); System.out.println(jedis.ping()); }
編譯以上程式。
連線成功
runoobkey
site-list