來(lái)源:北大青鳥(niǎo)總部 2023年02月06日 11:16
在互聯(lián)網(wǎng)發(fā)展的早期,那還是一個(gè)各路軍閥混戰(zhàn),實(shí)戰(zhàn)為王的時(shí)代,沒(méi)有所謂正規(guī)軍,搞定問(wèn)題才是王道。
當(dāng)然,那個(gè)時(shí)期也沒(méi)有那么多問(wèn)題,互聯(lián)網(wǎng)還是個(gè)新鮮的詞匯,能被稱作是網(wǎng)民的人也都是“稀有物種”,上網(wǎng)多半是大戶人家才玩的起的高端奢侈品。
從技術(shù)的角度來(lái)看,那時(shí)還處在Web應(yīng)用發(fā)展的初期,互聯(lián)網(wǎng)技術(shù)架構(gòu)還是最原始的單體架構(gòu),因?yàn)榇藭r(shí)的網(wǎng)民數(shù)量還是很少,一個(gè)服務(wù)器完全足夠扛起用戶的訪問(wèn)的壓力。
這個(gè)時(shí)期的關(guān)系型數(shù)據(jù)庫(kù)得到了較為廣泛的關(guān)注和應(yīng)用,網(wǎng)站訪問(wèn)量談不上什么高并發(fā)、更別說(shuō)什么用戶體驗(yàn)了。
但是轉(zhuǎn)眼到現(xiàn)在,中國(guó)的互聯(lián)網(wǎng)發(fā)展已經(jīng)是發(fā)生了天翻地覆的變化,也早已經(jīng)不是當(dāng)年那個(gè)“吳下阿蒙”。在如今這個(gè)不提三高(高并發(fā)、高可用、高性能)都不好意思說(shuō)自己是個(gè)程序猿。
現(xiàn)在單純的依靠關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法滿足的我們的業(yè)務(wù)需求了,更何況當(dāng)今在云計(jì)算、大數(shù)據(jù)、人工智能盛行的時(shí)代,對(duì)技術(shù)的需求也更加的多元化。
現(xiàn)在網(wǎng)絡(luò)上每天都會(huì)產(chǎn)生龐大的數(shù)據(jù),這些數(shù)據(jù)有很大一部分是由關(guān)系型數(shù)據(jù)庫(kù)來(lái)處理,其嚴(yán)謹(jǐn)成熟的數(shù)學(xué)理論基礎(chǔ)使得數(shù)據(jù)建模和應(yīng)用程序編程更加簡(jiǎn)單。
然而,由于數(shù)據(jù)量級(jí)很大而且包含有大量的無(wú)規(guī)律的數(shù)據(jù),而我們?nèi)绻胍玫睦眠@些數(shù)據(jù),對(duì)數(shù)據(jù)的處理和存儲(chǔ)的重要性也越來(lái)越高,如果還僅僅依賴關(guān)系型數(shù)據(jù)庫(kù)顯然是不太現(xiàn)實(shí)的。所以,此時(shí)非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)就應(yīng)運(yùn)而生了,
接下來(lái)讓我們看看什么是非關(guān)系型數(shù)據(jù)庫(kù)。
所謂非關(guān)系型數(shù)據(jù)庫(kù),其實(shí)是相對(duì)于關(guān)系型數(shù)據(jù)庫(kù)而說(shuō)的,我們都知道關(guān)系型數(shù)據(jù)庫(kù)通常都是處理一些結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)通常都是有某些對(duì)應(yīng)關(guān)系。
非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)通常用于存儲(chǔ)那些類型不固定的,也沒(méi)有什么規(guī)律的數(shù)據(jù)。現(xiàn)在的企業(yè)每天都產(chǎn)生大量的數(shù)據(jù)過(guò)程中,非關(guān)系型數(shù)據(jù)庫(kù)的應(yīng)用非常廣泛,應(yīng)用場(chǎng)景也非常多,比如:緩存等,目前比較常用的非關(guān)系型數(shù)據(jù)庫(kù)有
Redis
Memcache
MongoDb
HBase
今天咱們就為大家解讀其中一個(gè)非常優(yōu)秀且用的非常多的非關(guān)系型數(shù)據(jù)庫(kù)-Redis。
非關(guān)系型數(shù)據(jù)庫(kù)之Redis,提到Redis可謂是無(wú)人不知無(wú)人不曉,當(dāng)然是在程序猿這個(gè)可愛(ài)的群體中;不管你是從事Python、Java、Go,還是世界上最好的語(yǔ)言PHP開(kāi)發(fā),Redis都應(yīng)該是一個(gè)比較熟悉的中間件產(chǎn)品。Redis是一個(gè) Key-Value 存儲(chǔ)結(jié)構(gòu),它支持存儲(chǔ)的value 類型非常豐富:
string(字符串)
hash(哈希)
list(列表)
set(無(wú)序集合)
zset(sorted set:有序集合)
在Java開(kāi)發(fā)過(guò)程中Redis的應(yīng)用場(chǎng)景也非常多,比如:緩存、秒殺、分布式鎖等;接下來(lái)咱么就來(lái)一睹Redis芳容。
走進(jìn)Redis實(shí)戰(zhàn)俗話說(shuō)的好:"光說(shuō)不練假把式,光練不說(shuō)傻把式,連說(shuō)帶練全把式",所以接下來(lái),咱們就連說(shuō)代練的實(shí)操一把
首先介紹一下我們的開(kāi)發(fā)環(huán)境,這里咱們是基于Java語(yǔ)言使用IDEA做為開(kāi)發(fā)工具,使用Spring Boot來(lái)集成Redis。(Redis的安裝內(nèi)容,大家可以按照自己的習(xí)慣使用Windows版、Linux版本都可以。)
Java中操作Redis的方案很多,我們使用目前最主流的Spring Boot Redis,從名稱上我們就可以看出來(lái),這又是Spring對(duì)操作Redis的客戶端的封裝,沒(méi)錯(cuò)Spring就是這么優(yōu)秀。
我們知道在SpringBoot中默認(rèn)集成的就是Spring Data Redis,它提供了針對(duì)Redis提供了非常方便的操作模板類RedisTemplate;那么接下來(lái)我們就來(lái)看看Spring Boot中Spring Data Redis的具體用法。
Tips:在spring中凡是以XxxTemplate命名的類,都是Spring提供的操作xxx的模板類。如:RedisTemplate就是操作Redis的模板類
使用Spring Initializr創(chuàng)建Spring Boot基礎(chǔ)工程,引入Redis依賴有兩種方式:
1.直接在pom文件中加入redis依賴
2.在創(chuàng)建項(xiàng)目的時(shí)候直接勾選Spring Boot Redis
在application.properties中添加redis的相關(guān)配置信息
接下來(lái)咱么來(lái)編寫(xiě)一個(gè)測(cè)試類,存儲(chǔ)一個(gè)字符串類型的數(shù)據(jù),并且取出來(lái)驗(yàn)證是否存儲(chǔ)成功
RedisTemplate模板類提供了對(duì)5種數(shù)據(jù)結(jié)構(gòu)操作的方法,其他的數(shù)據(jù)類型大家感興趣可以自己去試下,使用方式都是一樣的
redisTemplate.opsForValue() 操作string
redisTemplate.opsForHash() 操作hash
redisTemplate.opsForList() 操作list
redisTemplate.opsForSet() 操作set
redisTemplate.opsForZSet() 操作有序set
實(shí)戰(zhàn)測(cè)試結(jié)果如下:
結(jié)果表明我們從redis中取出的數(shù)據(jù)和存儲(chǔ)的數(shù)據(jù)是一樣的,說(shuō)明我們?cè)趕pring中使用Spring Data Redis是成功的,是不是很簡(jiǎn)單呢,馬上動(dòng)手練練吧