Spring Boot之集成Redis(一):Redis初入門

前言

來啦老鐵绪撵!

筆者學習Spring Boot有一段時間了姆蘸,附上Spring Boot系列學習文章官扣,歡迎取閱翅敌、賜教:

  1. 5分鐘入手Spring Boot;
  2. Spring Boot數據庫交互之Spring Data JPA;
  3. Spring Boot數據庫交互之Mybatis;
  4. Spring Boot視圖技術;
  5. Spring Boot之整合Swagger;
  6. Spring Boot之junit單元測試踩坑;
  7. 如何在Spring Boot中使用TestNG;
  8. Spring Boot之整合logback日志;
  9. Spring Boot之整合Spring Batch:批處理與任務調度;
  10. Spring Boot之整合Spring Security: 訪問認證;
  11. Spring Boot之整合Spring Security: 授權管理;
  12. Spring Boot之多數據庫源:極簡方案;
  13. Spring Boot之使用MongoDB數據庫源;
  14. Spring Boot之多線程、異步:@Async;
  15. Spring Boot之前后端分離(一):Vue前端;
  16. Spring Boot之前后端分離(二):后端惕蹄、前后端集成;
  17. Spring Boot之前后端分離(三):登錄蚯涮、登出、頁面認證;
  18. Spring Boot之面向切面編程:Spring AOP;

接下來計劃在Spring Boot中集成Redis卖陵,而筆者本身對Redis沒有任何開發(fā)遭顶、應用經驗,只知道我們公司有用它來做緩存泪蔫。因此棒旗,本篇文章我自己先對Redis進行掃盲,有興趣的同學也可以一起學起來喲撩荣!

主要知識點

  1. Redis簡介铣揉;
  2. 為什么選擇Redis;
  3. 如何安裝Redis餐曹;
  4. Redis 配置逛拱;
  5. Redis中的基本數據類型;
  6. Redis的基本操作台猴;

1. Redis簡介朽合;

REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)俱两。
Redis 是完全開源的,遵守 BSD 協(xié)議旁舰,是一個高性能的 key-value 數據庫锋华。
Redis 與其他 key - value 緩存產品有以下三個特點

  • Redis支持數據的持久化,可以將內存中的數據保存在磁盤中箭窜,重啟的時候可以再次加載進行使用毯焕。
  • Redis不僅僅支持簡單的key-value類型的數據,同時還提供list磺樱,set纳猫,zset,hash等數據結構的存儲竹捉。
  • Redis支持數據的備份芜辕,即master-slave模式的數據備份。
    (以上摘抄自菜鳥教程:https://www.runoob.com/redis/redis-intro.html)

2. 為什么選擇Redis块差;

Redis 優(yōu)勢:
  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 侵续。
  • 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
  • 原子 – Redis的所有操作都是原子性的憨闰,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行状蜗。單個操作是原子性的。多個操作也支持事務鹉动,即原子性轧坎,通過MULTI和EXEC指令包起來。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性泽示。
Redis與其他key-value存儲有什么不同缸血?
  • Redis有著更為復雜的數據結構并且提供對他們的原子性操作,這是一個不同于其他數據庫的進化路徑械筛。Redis的數據類型都是基于基本數據結構的同時對程序員透明捎泻,無需進行額外的抽象。

  • Redis運行在內存中但是可以持久化到磁盤变姨,所以在對不同數據集進行高速讀寫時需要權衡內存族扰,因為數據量不能大于硬件內存。在內存數據庫方面的另一個優(yōu)點是定欧,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單怒竿,這樣Redis可以做很多內部復雜性很強的事情砍鸠。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的耕驰,因為他們并不需要進行隨機訪問爷辱。
    (以上摘抄自菜鳥教程:https://www.runoob.com/redis/redis-intro.html)

Redis使用場景:

1). 存儲Key-Value數據的數據庫;
2). 高速緩存;
3). 分布式架構的Session服務饭弓;
4). 消息隊列系統(tǒng)双饥;
5). 計數;
6). 分布式鎖弟断;
7). 等咏花。

3. 如何安裝Redis;

1). 下載Redis壓縮包:

Windows版本下載地址:https://github.com/tporadowski/redis/releases

Redis壓縮包
2). 解壓Redis壓縮包阀趴;
解壓Redis壓縮包
3). 設置系統(tǒng)環(huán)境變量昏翰;

為了更方便的使用redis相關命令和可執(zhí)行文件,可以將Redis壓縮包解壓后的文件路徑放到系統(tǒng)環(huán)境變量中去(也可不設置刘急,使用時要cd到Redis文件路徑內再執(zhí)行):

設置系統(tǒng)環(huán)境變量
4). 簡單演示使用Redis棚菊;

(1). 打開一個命令行窗口:(鍵盤windows按鈕+R,然后輸入cmd叔汁,回車打開命令行窗口)

打開命令行窗口

(2). 啟動Redis服務端:
命令行窗口輸入:

redis-server.exe

或:

redis-server.exe redis.windows.conf
啟動Redis服務端

特別注意一下统求,該Redis服務端的默認端口是6379,下一步連接Redis服務端時會用到据块!

(3). 使用redis-cli連接Redis服務端:
另起一個命令行窗口(我們稱之為客戶端窗口)码邻,在命令行窗口內輸入命令:

redis-cli.exe -h 127.0.0.1 -p 6379
使用redis-cli連接Redis服務端
  • -h代表redis服務端的host;
  • -p代表redis服務端redis服務的端口port;

我們也可在窗口中輸入ping來驗證是否已經連接上redis服務端:

ping

(4). 設置鍵值對:
在客戶端窗口中使用命令:
(set和get也可用大寫SET和GET)

set myTestKey test123
設置鍵值對

命令行窗口顯示“OK”瑰钮,說明鍵值對已設置成功冒滩,接下來我們來驗證一下是不是真的設置成功了:

(5). 取出已設置的鍵值對:
在客戶端窗口中使用命令:

get myTestKey
出已設置的鍵值對

可以看到,我們取出上一步驟設置的值:test123

(6). 嘗試取出未曾設置的鍵值對:
在客戶端窗口中使用命令如:

get testKey
嘗試取出未曾設置的鍵值對

嘗試取出未曾設置的鍵值對時浪谴,結果為nil开睡,即結果為空;

以上說明我們已經成功在windows環(huán)境下安裝了redis苟耻,并且基本使用是正常的篇恒。其他環(huán)境如linux、ubuntu等凶杖,可參照:https://www.runoob.com/redis/redis-install.html 或官網胁艰、其他資料自行腦補哈!

4. Redis 配置智蝠;

由于我是初入門腾么,暫時不太涉及Redis配置的修改,未來有深入學習杈湾,有機會再來一起學習解虱。這方面可參考菜鳥教程上的文章:https://www.runoob.com/redis/redis-conf.html

這里想要重點提一下的是:設置Redis訪問密碼

(擁有一個數據庫而不設置密碼是非常不安全的漆撞!)

(1). 在Redis解壓后的目錄中找到redis.windows.conf文件殴泰,在文件中輸入密碼設置代碼并保存于宙,如:

requirepass Redis!123
redis.windows.conf文件
設置Redis服務端密碼

這表示,我們Redis服務端的密碼設置為:Redis!123

(2). 在Redis解壓后的目錄中重啟Redis服務端悍汛,注意捞魁,此時要使用redis.windows.conf文件:

redis-server.exe redis.windows.conf
重啟Redis服務端

(3). 另啟cmd窗口,再次連接服務端并嘗試ping:

再次ping

我們會發(fā)現离咐,客戶端訪問服務端需要授權了谱俭, 需要密碼了,使用auth命令來驗證合法性健霹,后續(xù)的操作才能成功:

auth "Redis!123"

這是最基本的安全設置旺上,建議都做一下這一步驟!也可在連接Redis服務端的時候糖埋,帶上密碼宣吱,順帶完成auth:(但出于安全考慮,不是很推薦)

redis-cli.exe -h 127.0.0.1 -p 6379 -a Redis!123

注:如果在使用Redis客戶端的時候瞳别,需要用到中文征候,則可以在連接命令后加上--raw參數,如:

redis-cli.exe -h 127.0.0.1 -p 6379 --raw
中文支持

5. Redis中的基本數據類型祟敛;

Redis支持五種數據類型:

  • string(字符串)疤坝;
  • hash(哈希);
  • list(列表)馆铁;
  • set(集合)跑揉;
  • zset(sorted set:有序集合)。

我們一個一個來看怎么使用:

1). string埠巨;

string 是 redis 最基本的類型历谍,可以包含任何數據,如jpg圖片或者序列化的對象辣垒,string 類型的值單個key最大能存儲 512MB望侈。
設置key-value:

set myTestKey test123

或:

set myTestKey "test123"

取出key:

get myTestKey

設置多個key,如:mset set key1 test123 key2 test456
獲取多個key勋桶,如:mget key1 key2
(m代表multiple脱衙,即多個的意思,后面會多處用到m)例驹。

2). hash捐韩;

Redis hash 是一個鍵值(key=>value)對集合,是一個 string 類型的 field 和 value 的映射表鹃锈,hash 特別適合用于存儲對象奥帘,每個 hash 可以存儲 2^32 -1 鍵值對(40多億)。
設置key-value:

hset dylan username "dylanz"
hset dylan password "123"

這里的dylan稱之為key仪召,username和password稱之為field寨蹋,"dylanz"和"123"稱之為value,我們也可一次性設置多個field:

hmset dylan username "dylanz" password "123"

獲取key:

hget dylan username
hget dylan password

也可以一次性獲取多個field:

hmget dylan username password
Redis hash
3). list扔茅;

Redis 列表是簡單的字符串列表已旧,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)召娜。列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)运褪。

創(chuàng)建列表并在列表頭部插入元素(先進后出):

lpush user dylanz
lpush user ritay
lpush user lucash

讀取列表:

lrange user 0 5
lrange user 1 5

創(chuàng)建列表并在列表尾部插入元素(先進先出):

rpush location xiamen
rpush location quanzhou
rpush location zhangzhou
Redis list

一次性插入多個元素:

lpush user dylanz ritay lucash
rpush location xiamen quanzhou zhangzhou
列表的其他命令:
  • Lpop:左邊出棧,獲取列表的第一個元素(命令完成后玖瘸,元素就不存在了)秸讹;
  • Rpop:右邊出棧,獲取列表的最后一個元素(命令完成后雅倒,元素就不存在了)璃诀;
  • Lindex:根據索引,取出元素蔑匣;
  • Llen:鏈表長度劣欢,元素個數;
  • Lrem:根據key裁良,刪除n個value凿将;
  • Ltrim:根據索引,刪除指定元素价脾;
  • Rpoplpush:出棧牧抵,入棧(用于移除列表的最后一個元素,并將該元素添加到另一個列表并返回)侨把;
  • Lset:根據index犀变,設置value(更新);
  • Linsert before:根據value座硕,在之前插入值弛作;
  • Linsert after:根據value,在之后插入值华匾;

這些命令在redis-cli命令行窗口下映琳,均有參數提示,讀者可自行嘗試蜘拉!

4). set萨西;

Redis 的 Set 是 string 類型的無序集合。
集合是通過哈希表實現的旭旭,所以添加谎脯,刪除,查找的復雜度都是 O(1)持寄。
集合內元素均是唯一性源梭,不可能存在2個一模一樣的元素娱俺!
集合中最大的成員數為 232 - 1(4294967295, 每個集合可存儲40多億個成員)。

添加一個 string 元素到 key 對應的 set 集合中废麻,成功返回 1或大于1荠卷,如果元素已經在集合中返回 0:

逐個往Set中添加元素:

sadd job QA
sadd job Engineer
sadd job PM

批量往Set中添加元素:

sadd season Spring Summer Autumn Winter

讀取Set中的元素

smembers job
smembers season
Redis set
5). zset;

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員烛愧。
不同的是每個元素都會關聯(lián)一個double類型的分數油宜。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重復怜姿。

添加元素到集合慎冤,元素在集合中存在則更新對應score:

zadd school 100 jimei
zadd school 101 xiada
zadd school 102 qinghua

獲取zset中的元素,常規(guī)版:

zrange school 0 5
zrange school 0 -1(獲取所有元素)

獲取zset中的元素沧卢,按分數區(qū)間獲纫系獭:

zrangebyscore school 100 102
zrangebyscore shcool 101 102
Redis zset

6. Redis的基本命令;

我們在上面介紹Redis基本數據類型的時候搏恤,已經有涉及到很多命令了违寿,這里再匯總、擴展一下:

  • ping:用于檢查客戶端是否連接上Redis服務端熟空;
  • quit:關閉當前連接藤巢;
  • del key:用于刪除key;
  • exists key:用于檢查key是否存在息罗;
  • type key:用于獲取key的數據類型掂咒;
  • rename key newkey:用于修改key的名稱;
  • renamenx key newkey:用于修改key的名稱迈喉,且newkey必須為不存在绍刮;
  • expire key seconds:用于給key設置過期時間,以秒計挨摸;
  • expireat key timestamp:用于給key設置過期時間點孩革,參數timestamp為以秒計的UNIX 時間戳;
  • pexpire key milliseconds:用于給key設置過期時間得运,以毫秒計膝蜈;
  • pexpireat key milliseconds-timestamp:用于給key設置過期時間點,參數timestamp為以毫秒計的UNIX 時間戳熔掺;
  • ttl key:已秒為單位饱搏,返回key的剩余生存時間(TTL,time to live)
  • pttl key:以毫秒為單位置逻,返回key的剩余生存時間推沸;
  • keys pattern:查找所有符合給定模式的key;
  • move key db:將key移動到給定的數據庫db當中;
  • persist key:移除key的過期時間鬓催,key將永久保持肺素,不會過期;
  • randomkey:從當前Redis數據庫中隨機返回一個key深浮;
  • SCAN cursor [MATCH pattern] [COUNT count]:令用于迭代數據庫中的數據庫鍵压怠;
至此,我們已經推開Redis的大門了飞苇,當然,這還是很初級的使用蜗顽,未來我們再深入學習布卡,一步一步來。道阻且長雇盖,但不忘初心忿等!

下一篇,我將嘗試在Spring Boot項目中集成Redis崔挖,敬請期待贸街!

如果本文對您有幫助,麻煩點贊狸相、關注薛匪!

謝謝!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末脓鹃,一起剝皮案震驚了整個濱河市逸尖,隨后出現的幾起案子,更是在濱河造成了極大的恐慌瘸右,老刑警劉巖娇跟,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異太颤,居然都是意外死亡苞俘,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門龄章,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吃谣,“玉大人,你說我怎么就攤上這事瓦堵』” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵菇用,是天一觀的道長澜驮。 經常有香客問我,道長惋鸥,這世上最難降的妖魔是什么杂穷? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任悍缠,我火速辦了婚禮,結果婚禮上耐量,老公的妹妹穿的比我還像新娘飞蚓。我一直安慰自己,他們只是感情好廊蜒,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布趴拧。 她就那樣靜靜地躺著,像睡著了一般山叮。 火紅的嫁衣襯著肌膚如雪著榴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天屁倔,我揣著相機與錄音脑又,去河邊找鬼。 笑死锐借,一個胖子當著我的面吹牛问麸,可吹牛的內容都是我干的。 我是一名探鬼主播钞翔,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼严卖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嗅战?” 一聲冷哼從身側響起妄田,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驮捍,沒想到半個月后疟呐,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡东且,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年启具,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珊泳。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鲁冯,死狀恐怖,靈堂內的尸體忽然破棺而出色查,到底是詐尸還是另有隱情薯演,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布秧了,位于F島的核電站跨扮,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜衡创,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一帝嗡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璃氢,春花似錦哟玷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至塘秦,卻和暖如春讼渊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尊剔。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菱皆,地道東北人须误。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像仇轻,于是被迫代替她去往敵國和親京痢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353