摘要:如今數(shù)據(jù)量越來(lái)越大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法應(yīng)付如此大數(shù)據(jù)的需求了。由此可見(jiàn),在數(shù)據(jù)量日漸增長(zhǎng)的今天,為了解決大數(shù)據(jù)量與高并發(fā)的難題,應(yīng)運(yùn)而生。的消息存儲(chǔ)采用的就是數(shù)據(jù)庫(kù),支持大數(shù)據(jù)進(jìn)行隨機(jī)實(shí)時(shí)訪(fǎng)問(wèn)。
引言
打開(kāi)Microsoft To-Do,發(fā)現(xiàn)Redis的學(xué)習(xí)計(jì)劃還躺在那里。
其實(shí)我對(duì)Redis的理解,僅僅停留在我認(rèn)識(shí)這個(gè)單詞的層面上。
學(xué)習(xí) 簡(jiǎn)介本來(lái)對(duì)這個(gè)Redis沒(méi)什么興趣的,不就是一個(gè)緩存的數(shù)據(jù)庫(kù)而已嗎?直到上次配置spring-redis的時(shí)候,發(fā)現(xiàn)這個(gè)東西沒(méi)有用戶(hù)名。
spring: redis: host: 127.0.0.1 port: 6379 password:
配置如上所示,只有主機(jī)、端口和密碼,和普通的MySQL或其他數(shù)據(jù)庫(kù)不同。
Redis是一個(gè)使用ANSI C編寫(xiě)的開(kāi)源、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久性的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)。
我們熟知的就是Redis的緩存,Redis采用C編寫(xiě),運(yùn)行異常的快。是有磁盤(pán)存儲(chǔ)支持的內(nèi)存數(shù)據(jù)庫(kù)!
適用于數(shù)據(jù)變化快且數(shù)據(jù)庫(kù)大小可遇見(jiàn)(適合內(nèi)存容量)的應(yīng)用程序。
使用場(chǎng)景:股票價(jià)格、數(shù)據(jù)分析、實(shí)時(shí)數(shù)據(jù)搜集、實(shí)時(shí)通訊。
NoSQLRedis屬于NoSQL,NoSQL = Not Only SQL。
如今數(shù)據(jù)量越來(lái)越大,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法應(yīng)付如此大數(shù)據(jù)的需求了。
舉個(gè)例子:假設(shè)我們使用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)朋友圈,那一天會(huì)產(chǎn)生多少數(shù)據(jù)?再查詢(xún)的時(shí)候數(shù)據(jù)庫(kù)不就死了嗎?
這讓我想起了我之前關(guān)注的一個(gè)帖子:騰訊微信的后臺(tái)數(shù)據(jù)庫(kù)到底是怎么設(shè)計(jì)的?無(wú)知的人相談甚歡,最后好像是官方的哥們是在看不下去了,回復(fù):誰(shuí)告訴你們微信用的是關(guān)系型數(shù)據(jù)庫(kù)?
普通關(guān)系型數(shù)據(jù)庫(kù),如果只查詢(xún)的話(huà)效率很高?如果算上讀寫(xiě)的話(huà)?那可能傳統(tǒng)的數(shù)據(jù)庫(kù)都承受不住高并發(fā)。
重要的是關(guān)系型數(shù)據(jù)庫(kù)沒(méi)法擴(kuò)展,大家想一想,因?yàn)閿?shù)據(jù)之間是有關(guān)系的,所以數(shù)據(jù)庫(kù)擴(kuò)展絕對(duì)不像擴(kuò)展后臺(tái)服務(wù)規(guī)模一樣再拎個(gè)服務(wù)器出來(lái)那么簡(jiǎn)單。
由此可見(jiàn),在數(shù)據(jù)量日漸增長(zhǎng)的今天,為了解決大數(shù)據(jù)量與高并發(fā)的難題,NoSQL應(yīng)運(yùn)而生。
NoSQL產(chǎn)品主要有四類(lèi):
類(lèi)型 | 特點(diǎn) | 代表 | 適用場(chǎng)景 |
---|---|---|---|
鍵值對(duì)存儲(chǔ) | 能實(shí)現(xiàn)快速查詢(xún),但存儲(chǔ)的數(shù)據(jù)缺少結(jié)構(gòu)化 | Redis | 內(nèi)容緩存,主要用于處理大數(shù)據(jù)的高訪(fǎng)問(wèn)負(fù)載 |
列存儲(chǔ)數(shù)據(jù)庫(kù) | 查找速度快,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展,但功能相對(duì)局限 | HBase | 分布式的文件系統(tǒng) |
文檔數(shù)據(jù)庫(kù) | 數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格,查詢(xún)性能不高,而且缺乏統(tǒng)一的查詢(xún)語(yǔ)法 | MongoDB | Web應(yīng)用(相較于普通的Key-Value,其Value是結(jié)構(gòu)化的) |
圖形數(shù)據(jù)庫(kù) | 利用圖結(jié)構(gòu)相關(guān)算法,但需要對(duì)整個(gè)圖做計(jì)算才能得出結(jié)果,不容易分布式 | Neo4j | 社交網(wǎng)絡(luò),推薦系統(tǒng),專(zhuān)注于構(gòu)建關(guān)系圖譜 |
這些數(shù)據(jù)庫(kù)的名稱(chēng)大家或多或少應(yīng)該聽(tīng)說(shuō)過(guò)吧?今天才真正知道它們的作用,各有其特長(zhǎng),我們需根據(jù)業(yè)務(wù)場(chǎng)景動(dòng)態(tài)選擇。Facebook的消息存儲(chǔ)采用的就是HBase數(shù)據(jù)庫(kù),支持大數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)訪(fǎng)問(wèn)。
NoSQL因?yàn)閿?shù)據(jù)之間都是沒(méi)有關(guān)系的,所以易擴(kuò)展,同時(shí)具有很高的讀寫(xiě)性能,很適合高并發(fā)場(chǎng)景。
歷史2008年,意大利的一家創(chuàng)業(yè)公司Merzia推出了一款基于MySQL的網(wǎng)站實(shí)時(shí)統(tǒng)計(jì)系統(tǒng)LLOOGG。
沒(méi)過(guò)多久,創(chuàng)始人Salvatore Sanfilippo對(duì)MySQL的性能大失所望,于是他決定自己寫(xiě)一個(gè)數(shù)據(jù)庫(kù)。牛人就是牛人,我們就算質(zhì)疑MySQL的性能,想寫(xiě)也寫(xiě)不出來(lái)啊?!
2009年,Salvatore Sanfilippo完成了數(shù)據(jù)庫(kù)的編寫(xiě),這就是Redis。
Salvatore Sanfilippo將Redis開(kāi)源,并一直進(jìn)行著Redis的開(kāi)發(fā),直到今天。我們熟知的Github、StackOverflow、新浪微博等公司都是Redis的用戶(hù)。
緩存傳統(tǒng)的緩存代碼需要這樣寫(xiě),很冗長(zhǎng),都是重復(fù)的代碼。
ValueOperationsvalueOperations = redisTemplate.opsForValue(); logger.info("判斷Redis中是否有Key"); if (redisTemplate.hasKey(url)) { logger.info("Redis命中,從Redis中獲取"); return valueOperations.get(url); } logger.info("發(fā)起Get請(qǐng)求"); ResponseEntity response = restTemplate.getForEntity(url, String.class); logger.info("存入緩存"); valueOperations.set(url, response.getBody(), TIME_OUT, TimeUnit.MINUTES);
感謝Spring AOP,我們可以使用注解實(shí)現(xiàn)緩存功能。
@Cacheable("cacheName") public ListfindAll() { return studentRepository.findAll(); }
使用注解實(shí)現(xiàn)緩存很簡(jiǎn)單,同時(shí)@Cacheable還有許多的高級(jí)用法,以后與大家詳述。
操作Redis有三種動(dòng)作:
GET:根據(jù)鍵查找值。
SET:給定鍵存儲(chǔ)值。
DEL:刪除鍵中的值。
然后就是Redis的數(shù)據(jù)結(jié)構(gòu),這個(gè)覺(jué)得暫時(shí)還不需要知道,畢竟現(xiàn)在使用的是現(xiàn)成的@Cacheable注解,還不需要我們手動(dòng)去操作Redis。
一如代碼深似海,軟件之路很廣很遠(yuǎn)。生命有限的我們不能把所有東西都精通,我們要在學(xué)習(xí)成本與能力提升之間進(jìn)行權(quán)衡。
總結(jié)故不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海。騏驥一躍,不能十步,駑馬十駕,功在不舍。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/62084.html
摘要:上圖中,每個(gè)紅圈表示一個(gè)請(qǐng)求,每一層的請(qǐng)求分別是上一層請(qǐng)求的子請(qǐng)求。換而言之,父請(qǐng)求是依賴(lài)于子請(qǐng)求的。特別地,的子請(qǐng)求運(yùn)行時(shí),會(huì)阻塞父請(qǐng)求掛起其對(duì)應(yīng)的協(xié)程。 張超:又拍云系統(tǒng)開(kāi)發(fā)高級(jí)工程師,負(fù)責(zé)又拍云 CDN 平臺(tái)相關(guān)組件的更新及維護(hù)。Github ID: tokers,活躍于 OpenResty 社區(qū)和 Nginx 郵件列表等開(kāi)源社區(qū),專(zhuān)注于服務(wù)端技術(shù)的研究;曾為 ngx_lua 貢...
摘要:資源包括什么內(nèi)存磁盤(pán)網(wǎng)絡(luò)文件描述符外部緩存數(shù)據(jù)庫(kù)等,編程語(yǔ)言是如何管理資源的合理的算法架構(gòu)保證了資源的合理使用,分配內(nèi)存使用網(wǎng)絡(luò)等等。 在云計(jì)算時(shí)代,開(kāi)發(fā)和運(yùn)維的結(jié)合變得越來(lái)越重要。在DIFF論壇第一期,前新浪SAE運(yùn)維主管,鄭志勇,分享了《一個(gè)開(kāi)發(fā)眼中的運(yùn)維》根據(jù)自己從開(kāi)發(fā)人員轉(zhuǎn)型運(yùn)維之后的心得,談如何把在開(kāi)發(fā)上的運(yùn)用抽象思維方式運(yùn)用到運(yùn)維領(lǐng)域。 showImg(http://se...
摘要:接下來(lái)就來(lái)說(shuō)下我眼中的。鏈表轉(zhuǎn)換為樹(shù)的閾值,超過(guò)這個(gè)長(zhǎng)度的鏈表會(huì)被轉(zhuǎn)換為紅黑樹(shù),當(dāng)然,不止這一個(gè)條件,在下面的源碼部分會(huì)看到。 源碼部分從HashMap說(shuō)起是因?yàn)楣P者看了很多遍這個(gè)類(lèi)的源碼部分,同時(shí)感覺(jué)網(wǎng)上很多都是粗略的介紹,有些可能還不正確,最后只能自己看源碼來(lái)驗(yàn)證理解,寫(xiě)下這篇文章一方面是為了促使自己能深入,另一方面也是給一些新人一些指導(dǎo),不求有功,但求無(wú)過(guò)。有錯(cuò)誤的地方請(qǐng)?jiān)谠u(píng)論中...
閉包,顧名思義就是一個(gè)封閉的包裹,你沒(méi)辦法窺探到其內(nèi)部,只能通過(guò)暴露給你的方法進(jìn)行操作。其實(shí)在寫(xiě)代碼的過(guò)程中,我們可能已經(jīng)使用了閉包,只是當(dāng)時(shí)不知道而已。等理解了閉包,再去回顧以前的代碼,就會(huì)發(fā)現(xiàn)JavaScript中閉包無(wú)處不在。剛開(kāi)始學(xué)習(xí)閉包的時(shí)候,我看過(guò)很多關(guān)于閉包的文章,大部分都會(huì)舉例這樣一段代碼:showImg(https://segmentfault.com/img/bVO3Mo?w=...
閱讀 1260·2021-11-23 09:51
閱讀 1628·2021-11-16 11:45
閱讀 4014·2021-10-09 09:43
閱讀 2682·2021-07-22 16:47
閱讀 944·2019-08-27 10:55
閱讀 3449·2019-08-26 17:40
閱讀 3083·2019-08-26 11:39
閱讀 3228·2019-08-23 18:39