1. 程式人生 > >Redis詳細介紹,以及在SpringBoot中的簡單使用

Redis詳細介紹,以及在SpringBoot中的簡單使用

1.Redis的特點:

  (1)Redis支援資料的持久化,可以將記憶體中的資料儲存到磁碟中,下次啟動的時候可以直接載入磁碟中的資料;

  (2)Redis不僅可以儲存key-value型別的資料,還可以儲存List、Set、hash、zset等資料結構的資料;

  (3)Redis支援資料的備份,即master-slave模式的備份;

  (4)Redis效能極高,讀寫速度特別快,讀的速度為110000次/s,寫的速度為81000次/s;

2.Redis的安裝(Windows環境下)

  •     首先下載:https://github.com/MSOpenTech/redis/releases
    ,解壓後,將資料夾重新命名為redis;
  •     使用cmd調出命令視窗,進入redis路徑下,輸入redis-server.exe redis.windows.conf執行redis服務;
  •     再重新開啟cmd視窗,執行redis-cli.exe -h 127.0.0.1 -p 6379 ,輸入set myKey abc設定myKey的值,然後使用get myKey取值。
  • Mac下安裝)

3.redis配置

  •     --使用” CONFIG GET 配置名稱 ”獲取配置
  •     --使用“CONFIG GET *”獲取所有的配置名稱
  •     --使用“CONFIG SET 配置名稱 ‘要修改為的值’”來修改配置

    3.1支援的資料型別

  •     String、hash、Set、zset、List
  •     --String:set myKey “aaa”
  •     --hash:HMSET myKey field1 aa field2 bb   (HSET myKey field1)
  •     --List:

  •     --Set:

  •     --zset:

4.客戶端啟動

  •     --使用redis-cli啟動客戶端
  •     --使用PING來看是否連線成功
  •     --操控遠端的redis

5.關於鍵的基本命令

  •     --DEL:刪除鍵
  •     --DUMP:序列化給定的key,並返回被序列化的值
  •     --EXPIPR:(EXPIPR key seconds)為指定的key設定時間
  •     --EXISTS:檢查給定的key是否存在
  •     --KEYS pattern:查詢所有符合給定模式的key
  •     --……更多關於鍵的命令請檢視:https://redis.io/commands

6.常用的redis字串命令

  •     --SET key value:設定指定key的值
  •     --GET key:獲取指定key的值
  •     --GETRANGE key start end:返回字串中指定的字元
  •     --GETSET key value:設定key的值為value,並返回key的舊值
  •     --……更多命令請看:http://www.runoob.com/redis/redis-strings.html

7.常用的Hash的命令

  •     --HDEL key field1 [field2]:刪除一個或多個雜湊表字段
  •     --HEXISTS key field:檢視雜湊表中給定的欄位是否存在
  •     --HGET key field:獲取指定欄位的值
  •     --HGETALL key:獲取雜湊表中指定key的所有欄位和值
  •     --………更多命令請看:http://www.runoob.com/redis/redis-hashes.html

8.常用的List的命令

  •     --LINDEX key index:通過索引獲取列表中的元素
  •     --LLEN key:獲取列表長度
  •     --LPOP key:移除並獲取列表的第一個元素
  •     --LPUSH key value1[value2]:將一個或多個值插入到列表頭部
  •     --………更多命令請看:http://www.runoob.com/redis/redis-lists.html

9.集合和有序集合相關命令

http://www.runoob.com/redis/redis-sorted-sets.html

10.什麼是基數?

  •     基數就是一個集合中不重複的元素:例如{1,3,5,7,5,7,8},那麼這個集合的基數為{1,3,5,7,8}。基數估計就是在誤差可接受的範圍內快速計算基數。
  •     Redis在2.8.9增加了HyperLogLog結構:

11.釋出訂閱者模式

  •     Redis釋出訂閱者模式:是一種訊息釋出模式,釋出(pub)即傳送訊息,訂閱(sub)即接受訊息。使用SUBSCRIBE “頻道名稱”建立一個頻道,然後重新開啟另外一個客戶端,通過PUBLISH redisChat “message”向頻道傳送訊息,然後客戶端就可以收到訊息了。具體例項如下圖所示:
  •    

  •     釋出訂閱模式常見的命令為:

12.事務

  •     redis事務:一次可以執行多個命令,並帶有一下幾個特性:
  •     (1)批量操作在執行EXES命令前會被放入到快取中
  •     (2)執行EXES命令時,進入事務執行,如果任意的命令執行失敗,其他的命令會繼續執行
  •     (3)在EXEC執行的過程中,其他客戶端傳送的命令不會被插入到事務的命令序列中
  •     redis事務的執行過程分為:開始事務——命令入隊——執行事務,具體的示例如下圖所示:

  •     它以MULTI開始一個事務,然後將多個命令加入到隊列當中,最後以EXEC觸發事務執行。如果其中的任意一個命令執行失敗,都不會影響剩下的命令進行執行,而執行過的命令也不會進行回滾。常見的事務的命令如下所示:

13.指令碼執行

  •     Redis:使用Lua直譯器來執行Redis指令碼,Redis2.6內嵌了Lua直譯器,常用的命令為EVAL。具體的示例如下圖所示:

  •     常見的Redis指令碼的命令為:

14.連線

  •     redis連線主要用於連線redis服務,下面的示例描述瞭如何設定密碼、如何連線服務、驗證是否連線成功等步驟:

  •     常見的連線命令為:

15.伺服器

  •     --檢視伺服器資訊INFO
  •     --獲取連線到伺服器的所有的客戶端資訊
  •     其他常見的redis伺服器的命令如一下連線所示:

            http://www.runoob.com/redis/redis-server.html

16.資料儲存與備份

  •     使用SAVE建立當前資料庫的備份;
  •     使用CONFIG GET dir獲取redis目錄,只需要將redis目錄下的dump.rdb檔案移動到redis的安裝目錄下,重啟服務就可以完成資料的恢復;
  •     使用BGSAVE建立備份檔案,該命令在後臺執行。

17.效能測試

  •     在非redis服務下,使用redis-benchmark 引數 具體值   的形式來對redis的效能進行測試。詳細的引數列表如下圖所示:

  •     具體的示例如下圖所示:

18.客戶端連線

  •     客戶端的最大連線數預設為10000

  •     Redis通過監聽一個TCP埠或者Unix socket的方式來接受來自客戶端的連線,當一個連線建立後,Redis內部會進行一下操作:
  •     首先,客戶端socket會被設定為非阻塞模式,因為Redis在網路事件處理上採用的是非阻塞多路複用模型;
  •     然後為這個socket設定TCP_NODELAY屬性,禁用Nagle演算法;
  •     然後建立一個可讀的檔案事件用於監聽這個客戶端 socket 的資料傳送。
  •     ----常見的客戶端命令如下圖所示:

19.管道技術

  •     Redis是一種基於客戶端、服務端和請求相應協議的TCP協議。他的具體流程如下:
  •     (1)客戶端傳送請求至服務端,並監聽socket返回,等待伺服器相應
  •     (2)伺服器端收到請求並處理,將處理後的結果返回給客戶端
  •     Redis管道技術可以在服務端未響應時,客戶端繼續向服務端傳送請求,然後一次性接受所有的服務端相應。
  •     檢視Redis管道只需要開啟Redis例項,然後輸入以下命令即可,具體示例如下圖所示:

  •     上面的例子中,首先我們檢視redis是否連線,然後設定了runoobkey的值,接下來獲取了runoobkey的值並使得visitor的值自增3次。在返回的結果中我們看到,所有的命令一次性提交,並返回了全部的響應結果。
  •     管道開啟後,速度會提升很多。。。。。。

20.分割槽

  •     分割槽是分割資料到多個Redis例項的過程,也就是每個例項只儲存key的一個子集。
  •     ----優勢
  •     (1)通過分割槽,可以構造更大的資料庫
  •     (2)利用多核和多臺計算機,可以提升計算速度
  •     (3)通過多臺計算機以及網路介面卡,允許我們拓展頻寬
  •     但是涉及多個key的操作通常是不被支援的。
  •     Redis 有兩種型別分割槽。 假設有4個Redis例項 R0,R1,R2,R3,和類似user:1,user:2這樣的表示使用者的多個key,對既定的key有多種不同方式來選擇這個key存放在哪個例項中。也就是說,有不同的系統來對映某個key到某個Redis服務。
  •     1)、範圍分割槽
  •     就是對映一定範圍的物件到某個Redis例項,例如,ID從0到10000的使用者會被對映到Redis例項1,範圍在10001到20001的使用者將會被對映到Redis例項2.。。。。。
  •     2)、hash分割槽
  •     利用hash的一個函式將這個key轉換成一個整數,然後對這個整數進行取模,例如:如果模為2,則將這個key對映到R2中。

21.SpringBoot中使用Redis

  •     以springboot為例:
  •     首先匯入依賴包:

  •     使用RedisTemplate連線redis:

  •     最簡單的插入操作: