Redis詳細介紹,以及在SpringBoot中的簡單使用
阿新 • • 發佈:2018-12-21
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
- 使用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:
- 最簡單的插入操作: