国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

我眼中的 Redis

liujs / 1134人閱讀

摘要:如今數據量越來越大,傳統的關系型數據庫已經無法應付如此大數據的需求了。由此可見,在數據量日漸增長的今天,為了解決大數據量與高并發的難題,應運而生。的消息存儲采用的就是數據庫,支持大數據進行隨機實時訪問。

引言

打開Microsoft To-Do,發現Redis的學習計劃還躺在那里。

其實我對Redis的理解,僅僅停留在我認識這個單詞的層面上。

學習 簡介

本來對這個Redis沒什么興趣的,不就是一個緩存的數據庫而已嗎?直到上次配置spring-redis的時候,發現這個東西沒有用戶名。

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:

配置如上所示,只有主機、端口和密碼,和普通的MySQL或其他數據庫不同。

Redis是一個使用ANSI C編寫的開源、支持網絡、基于內存、可選持久性的鍵值對存儲數據庫。

我們熟知的就是Redis的緩存,Redis采用C編寫,運行異常的快。是有磁盤存儲支持的內存數據庫!

適用于數據變化快且數據庫大小可遇見(適合內存容量)的應用程序。

使用場景:股票價格、數據分析、實時數據搜集、實時通訊。

NoSQL

Redis屬于NoSQLNoSQL = Not Only SQL

如今數據量越來越大,傳統的關系型數據庫已經無法應付如此大數據的需求了。

舉個例子:假設我們使用關系型數據庫存儲朋友圈,那一天會產生多少數據?再查詢的時候數據庫不就死了嗎?

這讓我想起了我之前關注的一個帖子:騰訊微信的后臺數據庫到底是怎么設計的?無知的人相談甚歡,最后好像是官方的哥們是在看不下去了,回復:誰告訴你們微信用的是關系型數據庫?

普通關系型數據庫,如果只查詢的話效率很高?如果算上讀寫的話?那可能傳統的數據庫都承受不住高并發。

重要的是關系型數據庫沒法擴展,大家想一想,因為數據之間是有關系的,所以數據庫擴展絕對不像擴展后臺服務規模一樣再拎個服務器出來那么簡單。

由此可見,在數據量日漸增長的今天,為了解決大數據量與高并發的難題,NoSQL應運而生。

NoSQL產品主要有四類:

類型 特點 代表 適用場景
鍵值對存儲 能實現快速查詢,但存儲的數據缺少結構化 Redis 內容緩存,主要用于處理大數據的高訪問負載
列存儲數據庫 查找速度快,可擴展性強,更容易進行分布式擴展,但功能相對局限 HBase 分布式的文件系統
文檔數據庫 數據結構要求不嚴格,查詢性能不高,而且缺乏統一的查詢語法 MongoDB Web應用(相較于普通的Key-Value,其Value是結構化的)
圖形數據庫 利用圖結構相關算法,但需要對整個圖做計算才能得出結果,不容易分布式 Neo4j 社交網絡,推薦系統,專注于構建關系圖譜

這些數據庫的名稱大家或多或少應該聽說過吧?今天才真正知道它們的作用,各有其特長,我們需根據業務場景動態選擇。Facebook的消息存儲采用的就是HBase數據庫,支持大數據進行隨機、實時訪問。

NoSQL因為數據之間都是沒有關系的,所以易擴展,同時具有很高的讀寫性能,很適合高并發場景。

歷史

2008年,意大利的一家創業公司Merzia推出了一款基于MySQL的網站實時統計系統LLOOGG

沒過多久,創始人Salvatore SanfilippoMySQL的性能大失所望,于是他決定自己寫一個數據庫。牛人就是牛人,我們就算質疑MySQL的性能,想寫也寫不出來啊?!

2009年,Salvatore Sanfilippo完成了數據庫的編寫,這就是Redis

Salvatore SanfilippoRedis開源,并一直進行著Redis的開發,直到今天。我們熟知的GithubStackOverflow、新浪微博等公司都是Redis的用戶。

緩存

傳統的緩存代碼需要這樣寫,很冗長,都是重復的代碼。

ValueOperations valueOperations = redisTemplate.opsForValue();

logger.info("判斷Redis中是否有Key");
if (redisTemplate.hasKey(url)) {
    logger.info("Redis命中,從Redis中獲取");
    return valueOperations.get(url);
}

logger.info("發起Get請求");
ResponseEntity response = restTemplate.getForEntity(url, String.class);

logger.info("存入緩存");
valueOperations.set(url, response.getBody(), TIME_OUT, TimeUnit.MINUTES);

感謝Spring AOP,我們可以使用注解實現緩存功能。

@Cacheable("cacheName")
public List findAll() {
    return studentRepository.findAll();
}

使用注解實現緩存很簡單,同時@Cacheable還有許多的高級用法,以后與大家詳述。

操作

Redis有三種動作:

GET:根據鍵查找值。

SET:給定鍵存儲值。

DEL:刪除鍵中的值。

然后就是Redis的數據結構,這個覺得暫時還不需要知道,畢竟現在使用的是現成的@Cacheable注解,還不需要我們手動去操作Redis

一如代碼深似海,軟件之路很廣很遠。生命有限的我們不能把所有東西都精通,我們要在學習成本與能力提升之間進行權衡。

總結
故不積跬步,無以至千里;不積小流,無以成江海。騏驥一躍,不能十步,駑馬十駕,功在不舍。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/62084.html

相關文章

  • 眼中 Nginx(五):Nginx — 子請求設計之道

    摘要:上圖中,每個紅圈表示一個請求,每一層的請求分別是上一層請求的子請求。換而言之,父請求是依賴于子請求的。特別地,的子請求運行時,會阻塞父請求掛起其對應的協程。 張超:又拍云系統開發高級工程師,負責又拍云 CDN 平臺相關組件的更新及維護。Github ID: tokers,活躍于 OpenResty 社區和 Nginx 郵件列表等開源社區,專注于服務端技術的研究;曾為 ngx_lua 貢...

    Jioby 評論0 收藏0
  • 一個開發眼中運維

    摘要:資源包括什么內存磁盤網絡文件描述符外部緩存數據庫等,編程語言是如何管理資源的合理的算法架構保證了資源的合理使用,分配內存使用網絡等等。 在云計算時代,開發和運維的結合變得越來越重要。在DIFF論壇第一期,前新浪SAE運維主管,鄭志勇,分享了《一個開發眼中的運維》根據自己從開發人員轉型運維之后的心得,談如何把在開發上的運用抽象思維方式運用到運維領域。 showImg(http://se...

    Hanks10100 評論0 收藏0
  • JDK源碼那些事兒之眼中HashMap

    摘要:接下來就來說下我眼中的。鏈表轉換為樹的閾值,超過這個長度的鏈表會被轉換為紅黑樹,當然,不止這一個條件,在下面的源碼部分會看到。 源碼部分從HashMap說起是因為筆者看了很多遍這個類的源碼部分,同時感覺網上很多都是粗略的介紹,有些可能還不正確,最后只能自己看源碼來驗證理解,寫下這篇文章一方面是為了促使自己能深入,另一方面也是給一些新人一些指導,不求有功,但求無過。有錯誤的地方請在評論中...

    voyagelab 評論0 收藏0
  • 眼中閉包

    閉包,顧名思義就是一個封閉的包裹,你沒辦法窺探到其內部,只能通過暴露給你的方法進行操作。其實在寫代碼的過程中,我們可能已經使用了閉包,只是當時不知道而已。等理解了閉包,再去回顧以前的代碼,就會發現JavaScript中閉包無處不在。剛開始學習閉包的時候,我看過很多關于閉包的文章,大部分都會舉例這樣一段代碼:showImg(https://segmentfault.com/img/bVO3Mo?w=...

    leeon 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<