chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有關(guān)Redis的一些思考和理解

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-10-30 11:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇文章不是一篇具體的教程,筆者打算記錄一下自己對(duì) Redis 的一些思考。說(shuō)來(lái)慚愧,筆者剛接觸 Redis 的時(shí)候只是簡(jiǎn)單地使用了一下,背了一些面試題,就在簡(jiǎn)歷上寫下了 Redis 這個(gè)技能點(diǎn)。

我們能在網(wǎng)絡(luò)上輕易地找到關(guān)于 Redis 具體知識(shí)點(diǎn)的講解,但很少有文字說(shuō)明為什么會(huì)有這項(xiàng)技術(shù),筆者希望通過(guò)本文總結(jié)一下個(gè)人目前對(duì) Redis 的理解。

1. 初識(shí) Redis

最開(kāi)始的時(shí)候,筆者是通過(guò)網(wǎng)絡(luò)上面的一些項(xiàng)目教程了解到 Redis 的,當(dāng)時(shí)教程里說(shuō)把首頁(yè)數(shù)據(jù)放到 Redis 里,能夠加快首頁(yè)數(shù)據(jù)的訪問(wèn)速度,于筆者我就照做了。代碼跑起來(lái)后,發(fā)現(xiàn)好像確實(shí)加載得蠻快的,就當(dāng)完成了。

項(xiàng)目做完后,寫到了簡(jiǎn)歷里,順便在技能里寫上熟練使用 Redis,再背了幾道關(guān)于 Redis 的數(shù)據(jù)類型,持久化機(jī)制的面試題,便去找實(shí)習(xí)了。

當(dāng)時(shí)面試的時(shí)候面試官問(wèn)筆者:你為什么使用 Redis 呀?

筆者按照項(xiàng)目教程里說(shuō)的復(fù)述了一遍:因?yàn)槟茏屖醉?yè)更快地加載數(shù)據(jù),咱們的產(chǎn)品首頁(yè)是很重要,越快加載出數(shù)據(jù),用戶越滿意。

現(xiàn)在回想起來(lái)真是哭笑不得,你也不能說(shuō)這個(gè)回答有問(wèn)題,Redis 用作緩存的一大亮點(diǎn)就是能夠加快數(shù)據(jù)查詢效率,但是如果從技術(shù)面試的角度看,這個(gè)回答其實(shí)更應(yīng)該從技術(shù)的角度去答,這也是促使筆者寫這篇文章的沖動(dòng)之一。

2. 為什么要有 Redis 這項(xiàng)技術(shù)?(你為什么用 Redis)

如果現(xiàn)在再被問(wèn)到為什么要用 Redis,筆者打算從計(jì)算機(jī)的存儲(chǔ)結(jié)構(gòu)開(kāi)始聊。

計(jì)算機(jī)界有一本名書《深入理解計(jì)算機(jī)系統(tǒng)》,里面有一幅關(guān)于計(jì)算機(jī)存儲(chǔ)結(jié)構(gòu)的圖,非常經(jīng)典:

由圖可見(jiàn)計(jì)算機(jī)的存儲(chǔ)器是一個(gè)金字塔結(jié)構(gòu),越上層的存儲(chǔ)器存儲(chǔ)效率越高,越下層的存儲(chǔ)效率越低。而計(jì)算機(jī)中內(nèi)存的層級(jí)位于磁盤之上,內(nèi)存的存儲(chǔ)效率要比磁盤快得多。

正常情況下,我們會(huì)把應(yīng)用的數(shù)據(jù)存放在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)把數(shù)據(jù)存放在磁盤;而 Redis 是一款基于內(nèi)存的存儲(chǔ)系統(tǒng),數(shù)據(jù)都存在內(nèi)存里,這就是從 Redis 讀取數(shù)據(jù)比從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)要快的根本原因了。

看到這里你可能會(huì)說(shuō),把數(shù)據(jù)存在內(nèi)存有啥了不起的,我可以用谷歌的 guava 呀!再不濟(jì),我可以直接 new 一個(gè) HashMap 存數(shù)據(jù)呀,這不都是基于內(nèi)存的嗎?

這個(gè)問(wèn)題讓我聯(lián)想起了我在網(wǎng)上看面經(jīng)的時(shí)候看到的一道題:如果讓你設(shè)計(jì)一個(gè)緩存,你會(huì)怎么設(shè)計(jì)?

大家可以想一下 guava 和 Map 集合使用時(shí)的缺點(diǎn)是什么?

很明顯一點(diǎn)就是這兩者雖然基于內(nèi)存,但他們使用的是 jvm 的內(nèi)存,如果 jvm 掛掉或者重啟了,數(shù)據(jù)也就丟失了。這就能方便我們聯(lián)想到 Redis 的持久化機(jī)制,Redis 的持久化機(jī)制使得內(nèi)存中的數(shù)據(jù)能夠持久化到磁盤上,解決內(nèi)存數(shù)據(jù)掉電易失的問(wèn)題,而且 Redis 是一款中間件,無(wú)需依賴于 jvm。

(當(dāng)初我只是死背 Redis 的持久化機(jī)制,并沒(méi)有想過(guò)為什么。我想搞清楚了這背后的關(guān)系后再去學(xué)習(xí),能夠?qū)W得更扎實(shí)一些吧)

再換一個(gè)角度:既然數(shù)據(jù)庫(kù)是因?yàn)榇疟P才慢,那為啥不再內(nèi)存里實(shí)現(xiàn)數(shù)據(jù)庫(kù)呢?

還別說(shuō),SAP 公司還真有基于內(nèi)存的數(shù)據(jù)庫(kù)系統(tǒng),但是使用內(nèi)存有一個(gè)致命的缺點(diǎn):那就是貴!能買得起那套軟件和巨大內(nèi)存機(jī)器的公司畢竟是少數(shù),所以說(shuō)為什么要使用 Redis,就是因?yàn)樗诘托У拇疟P和昂貴的內(nèi)存中取了一個(gè)折中。

補(bǔ)充:面試的時(shí)候還被問(wèn)到一個(gè)問(wèn)題:Redis 的內(nèi)存淘汰機(jī)制

當(dāng)時(shí)直接懵圈了,后來(lái)想了一下其實(shí)這是一個(gè)再正常不過(guò)的考點(diǎn)了:Redis 把數(shù)據(jù)存放在內(nèi)存,內(nèi)存的空間有限,總會(huì)有用完的一天。當(dāng)內(nèi)存使用完之后肯定需要有相應(yīng)的內(nèi)存淘汰策略來(lái)釋放內(nèi)存。

不過(guò)說(shuō)到內(nèi)存淘汰,我還想起一個(gè)高級(jí)點(diǎn)的知識(shí)點(diǎn),由于 Redis 的內(nèi)存是有限的,我們使用內(nèi)存的時(shí)候應(yīng)該更加小心。Redis 內(nèi)部是有許多高效使用內(nèi)存的招數(shù)的,比如說(shuō)我們存放用戶信息的時(shí)候,把用戶信息存成一個(gè) hash,要比把用戶信息逐條用 key-value 存儲(chǔ)占的空間小得多,這些知識(shí)你可以在 Redid 的官網(wǎng)上找到。

3. 關(guān)于 Redis 的主從復(fù)制,哨兵,集群

在學(xué)習(xí) Redis 之前,我對(duì)分布式的知識(shí)了解得非常少。當(dāng)時(shí)為了面試背 Redis 的面試題,背到有關(guān)主從復(fù)制,哨兵,集群等知識(shí)點(diǎn)的時(shí)候,我既興奮又茫然。感覺(jué)自己背完后掌握了許多分布式的知識(shí),但是把這些知識(shí)點(diǎn)都揉在一起了,根本不知道這背后的邏輯是什么?,F(xiàn)在想通了一些,應(yīng)該好好記下來(lái):

在擴(kuò)展到多機(jī)之前,我們先想一下單機(jī)的 Redis 有什么缺點(diǎn):

有可能出現(xiàn)單點(diǎn)故障,這樣 Redis 服務(wù)就不可用了

單一臺(tái)機(jī)器的內(nèi)存有限,存儲(chǔ)不了太多的數(shù)據(jù)

如果訪問(wèn)量很大的話,單臺(tái)機(jī)器壓力會(huì)很大

通過(guò)第一個(gè)缺點(diǎn),我們可以引出為什么需要主從復(fù)制和哨兵。大家想一想,如果我們只有一個(gè) Redis 服務(wù),要是服務(wù)掛了就沒(méi)法用了,但如果我們安排多一臺(tái) Redis 服務(wù)器,它的數(shù)據(jù)時(shí)刻與第一臺(tái) Redis 的數(shù)據(jù)保持一致,這樣當(dāng)?shù)谝慌_(tái) Redis 掛掉后,我們就可以把請(qǐng)求遷移到第二臺(tái) Redis 上,這樣 Redis 服務(wù)的可用性就提高了。為了讓第二臺(tái) Redis 的數(shù)據(jù)與第一臺(tái) Redis 保持一致,我們就需要用到主從復(fù)制。

有時(shí)候,可能一主一從的配置還是不夠保險(xiǎn),這個(gè)時(shí)候我們就要為主節(jié)點(diǎn)配置兩個(gè)或以上的從節(jié)點(diǎn),那么問(wèn)題來(lái)了,要是主節(jié)點(diǎn)掛了,該通過(guò)什么方案在從節(jié)點(diǎn)中選出新的主節(jié)點(diǎn)呢?這就用到了哨兵機(jī)制。

而且在一主多從的情況下,我們使用主從復(fù)制讓多臺(tái) Redis 的數(shù)據(jù)保持一致,這個(gè)時(shí)候我們就可以把讀請(qǐng)求分?jǐn)偟綇墓?jié)點(diǎn)上,這樣能有效緩解主節(jié)點(diǎn)的讀壓力。

但如果 Redis 的寫請(qǐng)求壓力也很大,而且數(shù)據(jù)量很大,這個(gè)時(shí)候?yàn)?Redis 增加備份機(jī)的橫向擴(kuò)展已經(jīng)幫不上什么忙了,這個(gè)時(shí)候我們就要考慮縱向擴(kuò)展,增加多臺(tái) Redis 分?jǐn)倢懻?qǐng)求,讓不同的 key 落到不同的機(jī)器上。這個(gè)時(shí)候我們就要考慮使用一致性哈希等算法把不同的 key 分給不同的機(jī)器。

Redis 自身也提供了集群機(jī)制,但內(nèi)部使用的不是一致性哈希,而是哈希槽。簡(jiǎn)單來(lái)說(shuō)就是在哈希槽中劃分不同的區(qū)間,不同的區(qū)間對(duì)應(yīng)不同的機(jī)制;當(dāng)擴(kuò)容或縮減的時(shí)候有相應(yīng)的哈希槽調(diào)整策略。

我最初學(xué)習(xí) Redis 的多機(jī)策略的時(shí)候就是搞不清楚集群,主從復(fù)制,哨兵機(jī)制之間的關(guān)系。其實(shí)集群就是一套完整的 Redis 多機(jī)解決方案,他有效解決了單機(jī) Redis 的所有問(wèn)題。當(dāng)你在集群中為某個(gè)節(jié)點(diǎn)配置從機(jī)的時(shí)候,主從節(jié)點(diǎn)間同步用的就是主從復(fù)制。主節(jié)點(diǎn)掛掉之后,從節(jié)點(diǎn)的選取,內(nèi)部的邏輯就和哨兵機(jī)制相似。當(dāng)我們使用集群機(jī)制的時(shí)候,就可以省去自己寫類似一致性哈希這樣的分?jǐn)傔壿?,集群機(jī)制會(huì)給節(jié)點(diǎn)加上相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來(lái)完成這些功能。

如果想深入了解集群背后的實(shí)現(xiàn)原理,我推薦這樣一個(gè)學(xué)習(xí)路線:

首先登錄官網(wǎng),按照官網(wǎng)的步驟學(xué)習(xí)配置主從復(fù)制,配置哨兵,搭建集群

然后看《Redis 的設(shè)計(jì)與實(shí)現(xiàn)》這本書,閱讀主從復(fù)制,哨兵和集群這三個(gè)章節(jié)

4. 后話

筆者覺(jué)得,如果把文章中提到的 Redis 的點(diǎn)都深入了解一下,Redis 基本能算入門了。

寫下這篇感想主要也是想提醒自己,學(xué)一項(xiàng)技術(shù)的時(shí)候多問(wèn)為什么,這樣知識(shí)學(xué)到手后不容易忘掉。

至于為什么說(shuō)只能說(shuō)是入門 Redis,因?yàn)?Redis 的用法實(shí)在太多了,你可以把它當(dāng)作緩存,也可以把它當(dāng)成數(shù)據(jù)庫(kù),甚至能把它當(dāng)作消息隊(duì)列。緩存可能大家都很熟悉了,在當(dāng)數(shù)據(jù)庫(kù)的方面 Redis 簡(jiǎn)直是潛力無(wú)限,大家一定要善用它的 bitmap 位圖功能,簡(jiǎn)直能在面對(duì)復(fù)雜需求的時(shí)候玩出花來(lái)。比如說(shuō)老板要統(tǒng)計(jì)所有用戶一年中的登錄天數(shù),一個(gè)用戶只需要 365bit(46B)的空間,相比于用傳統(tǒng)的 mysql 不知道也節(jié)省多少倍的空間。

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    390

    瀏覽量

    12029
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Redis集群部署配置詳解

    Redis集群是種分布式Redis解決方案,通過(guò)數(shù)據(jù)分片和主從復(fù)制實(shí)現(xiàn)高可用性和橫向擴(kuò)展。集群將整個(gè)數(shù)據(jù)集分割成16384個(gè)哈希槽(hash slots),每個(gè)節(jié)點(diǎn)負(fù)責(zé)部分槽位。
    的頭像 發(fā)表于 07-17 11:04 ?578次閱讀

    Redis集群部署與性能優(yōu)化實(shí)戰(zhàn)

    Redis作為高性能的內(nèi)存數(shù)據(jù)庫(kù),在現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中扮演著關(guān)鍵角色。作為運(yùn)維工程師,掌握Redis的部署、配置和優(yōu)化技能至關(guān)重要。本文將從實(shí)戰(zhàn)角度出發(fā),詳細(xì)介紹Redis集群的搭建、性能優(yōu)化以及監(jiān)控運(yùn)維的核心技術(shù)。
    的頭像 發(fā)表于 07-08 17:56 ?594次閱讀

    【經(jīng)驗(yàn)分享】在Omni3576上編譯Redis-8.0.2源碼,并安裝及性能測(cè)試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運(yùn)行Redis性能測(cè)試,并
    的頭像 發(fā)表于 06-05 08:05 ?752次閱讀
    【經(jīng)驗(yàn)分享】在Omni3576上編譯<b class='flag-5'>Redis</b>-8.0.2源碼,并安裝及性能測(cè)試

    【幸狐Omni3576邊緣計(jì)算套件試用體驗(yàn)】Redis最新8.0.2版本源碼安裝及性能測(cè)試

    的結(jié)果進(jìn)行對(duì)比。 Redis是什么 維基百科的介紹是: Redis個(gè)使用ANSI C編寫的開(kāi)源、支持網(wǎng)絡(luò)、基于內(nèi)存、分布式、可選持久性的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)。
    發(fā)表于 06-03 01:28

    Debian和Ubuntu哪個(gè)好一些?

    兼容性對(duì)比Debian和Ubuntu哪個(gè)好一些,并為您揭示如何通過(guò)RAKsmart服務(wù)器釋放Linux系統(tǒng)的最大潛能。
    的頭像 發(fā)表于 05-07 10:58 ?826次閱讀

    Redis 再次開(kāi)源!

    “ ?Redis 現(xiàn)已采用 AGPLv3 開(kāi)源許可證。? ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 這樣
    的頭像 發(fā)表于 05-06 18:26 ?663次閱讀

    如何添加一些網(wǎng)絡(luò)上的庫(kù)到mpy固件的說(shuō)明或手冊(cè)教程?

    于如何添加一些網(wǎng)絡(luò)上的庫(kù)到mpy固件的說(shuō)明或手冊(cè)教程? 問(wèn)題2: 關(guān)于mpy的image庫(kù)在哪里能了解學(xué)習(xí)內(nèi)部代碼,只了解一些python,想知道怎么從c轉(zhuǎn)換成mpy能調(diào)用的,自己寫的c也能轉(zhuǎn)成py調(diào)用
    發(fā)表于 04-29 08:16

    redis三種集群方案詳解

    Redis中提供的集群方案總共有三種(個(gè)redis節(jié)點(diǎn)不超過(guò)10G內(nèi)存)。
    的頭像 發(fā)表于 03-31 10:46 ?1258次閱讀
    <b class='flag-5'>redis</b>三種集群方案詳解

    Redis實(shí)戰(zhàn)筆記

    在目前的技術(shù)選型中,Redis 儼然已經(jīng)成為了系統(tǒng)高性能緩存方案的事實(shí)標(biāo)準(zhǔn),因此現(xiàn)在?Redis 也成為了后端開(kāi)發(fā)的基本技能樹(shù)之。 ? 基于上述情況,今天給大家分享份?杰哥?親筆撰
    的頭像 發(fā)表于 02-09 09:12 ?616次閱讀
    <b class='flag-5'>Redis</b>實(shí)戰(zhàn)筆記

    Redis Cluster之故障轉(zhuǎn)移

    1. Redis Cluster 簡(jiǎn)介 Redis Cluster 是 Redis 官方提供的 Redis 集群功能。 為什么要實(shí)現(xiàn) Redis
    的頭像 發(fā)表于 01-20 09:21 ?1238次閱讀
    <b class='flag-5'>Redis</b> Cluster之故障轉(zhuǎn)移

    AN29-關(guān)于DC-DC轉(zhuǎn)換器的一些想法

    電子發(fā)燒友網(wǎng)站提供《AN29-關(guān)于DC-DC轉(zhuǎn)換器的一些想法.pdf》資料免費(fèi)下載
    發(fā)表于 01-08 13:57 ?0次下載
    AN29-關(guān)于DC-DC轉(zhuǎn)換器的<b class='flag-5'>一些</b>想法

    華為云Flexus X實(shí)例,Redis性能加速評(píng)測(cè)及對(duì)比

    隨著云計(jì)算技術(shù)的飛速發(fā)展,Redis 作為種高性能的內(nèi)存數(shù)據(jù)庫(kù),在各種應(yīng)用場(chǎng)景中發(fā)揮著越來(lái)越重要的作用。為了滿足不同用戶對(duì) Redis 性能的高要求,華為云推出了 Flexus X 實(shí)例,并提供了
    的頭像 發(fā)表于 12-29 15:47 ?820次閱讀
    華為云Flexus X實(shí)例,<b class='flag-5'>Redis</b>性能加速評(píng)測(cè)及對(duì)比

    華為云 Flexus X 輕松實(shí)現(xiàn) Redis 主多從高效部署

    前言 ????????華為云 Flexus?X 是款專為高性能計(jì)算設(shè)計(jì)的云服務(wù)器實(shí)例,其搭載的 X-Turbo 加速技術(shù)和智能應(yīng)用調(diào)優(yōu)算法,能夠大幅提升 Redis 的處理能力和響應(yīng)速度。此外
    的頭像 發(fā)表于 12-27 13:45 ?766次閱讀
    華為云 Flexus X 輕松實(shí)現(xiàn) <b class='flag-5'>Redis</b> <b class='flag-5'>一</b>主多從高效部署

    一些關(guān)于ldc1000的spi通信的問(wèn)題求解

    我有一些關(guān)于ldc1000的spi通信的問(wèn)題。 應(yīng)用情況是spi16f887與ldc1000的spi通信 1.是否對(duì)于讀、寫,都是只需要把CSB變成低電平即可。 2.對(duì)于寫操作,寫地址時(shí)(例如
    發(fā)表于 12-26 08:23

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),它們主要用于提高應(yīng)用程序的性能,通過(guò)減少對(duì)數(shù)據(jù)庫(kù)的直接訪問(wèn)來(lái)加速數(shù)據(jù)檢索。以下是對(duì)Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發(fā)表于 12-18 09:33 ?897次閱讀