内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何理解Redis的使用場景

這篇文章主要介紹“如何理解redis的使用場景”,在日常操作中,相信很多人在如何理解Redis的使用場景問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解Redis的使用場景”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司專注骨干網(wǎng)絡(luò)服務(wù)器租用十年,服務(wù)更有保障!服務(wù)器租用,棕樹數(shù)據(jù)中心 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。

什么是Redis

Redis是一款內(nèi)存高速緩存數(shù)據(jù)庫。Redis全稱為:Remote Dictionary Server(遠程數(shù)據(jù)服務(wù)),使用C語言編寫,Redis是一個key-value存儲系統(tǒng)(鍵值存儲系統(tǒng)),支持豐富的數(shù)據(jù)類型,如:String、list、set、zset、hash。

Redis是一種支持key-value等多種數(shù)據(jù)結(jié)構(gòu)的存儲系統(tǒng)??捎糜诰彺?,事件發(fā)布或訂閱,高速隊列等場景。支持網(wǎng)絡(luò),提供字符串,哈希,列表,隊列,集合結(jié)構(gòu)直接存取,基于內(nèi)存,可持久化。

官方資料

Redis官網(wǎng):http://redis.io/

Redis官方文檔:http://redis.io/documentation

Redis教程:http://www.w3cschool.cn/redis/redis-intro.html

Redis下載:http://redis.io/download

為什么要使用Redis

一個產(chǎn)品的使用場景肯定是需要根據(jù)產(chǎn)品的特性,先列舉一下Redis的特點:

  • 讀寫性能優(yōu)異

    • Redis能讀的速度是110000次/s,寫的速度是81000次/s (測試條件見下一節(jié))。

  • 數(shù)據(jù)類型豐富

    • Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

  • 原子性

    • Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全并后的原子性執(zhí)行。

  • 豐富的特性

    • Redis支持 publish/subscribe, 通知, key 過期等特性。

  • 持久化

    • Redis支持RDB, AOF等持久化方式

  • 發(fā)布訂閱

    • Redis支持發(fā)布/訂閱模式

  • 分布式

    • Redis Cluster

(PS: 具體再結(jié)合下面的使用場景理解下)

下面是官方的bench-mark根據(jù)如下條件獲得的性能測試(讀的速度是110000次/s,寫的速度是81000次/s

  • 測試完成了50個并發(fā)執(zhí)行100000個請求。

  • 設(shè)置和獲取的值是一個256字節(jié)字符串。

  • Linux box是運行Linux 2.6,這是X3320 Xeon 2.5 ghz。

  • 文本執(zhí)行使用loopback接口(127.0.0.1)。

Redis的使用場景

redis應(yīng)用場景總結(jié)redis平時我們用到的地方蠻多的,下面就了解的應(yīng)用場景做個總結(jié):

熱點數(shù)據(jù)的緩存

緩存是Redis最常見的應(yīng)用場景,之所有這么使用,主要是因為Redis讀寫性能優(yōu)異。而且逐漸有取代memcached,成為首選服務(wù)端緩存的組件。而且,Redis內(nèi)部是支持事務(wù)的,在使用時候能有效保證數(shù)據(jù)的一致性。

作為緩存使用時,一般有兩種方式保存數(shù)據(jù):

  • 讀取前,先去讀Redis,如果沒有數(shù)據(jù),讀取數(shù)據(jù)庫,將數(shù)據(jù)拉入Redis。

  • 插入數(shù)據(jù)時,同時寫入Redis。

方案一:實施起來簡單,但是有兩個需要注意的地方:

  • 避免緩存擊穿。(數(shù)據(jù)庫沒有就需要命中的數(shù)據(jù),導(dǎo)致Redis一直沒有數(shù)據(jù),而一直命中數(shù)據(jù)庫。)

  • 數(shù)據(jù)的實時性相對會差一點。

方案二:數(shù)據(jù)實時性強,但是開發(fā)時不便于統(tǒng)一處理。

當(dāng)然,兩種方式根據(jù)實際情況來適用。如:方案一適用于對于數(shù)據(jù)實時性要求不是特別高的場景。方案二適用于字典表、數(shù)據(jù)量不大的數(shù)據(jù)存儲。

限時業(yè)務(wù)的運用

redis中可以使用expire命令設(shè)置一個鍵的生存時間,到時間后redis會刪除它。利用這一特性可以運用在限時的優(yōu)惠活動信息、手機驗證碼等業(yè)務(wù)場景。

計數(shù)器相關(guān)問題

redis由于incrby命令可以實現(xiàn)原子性的遞增,所以可以運用于高并發(fā)的秒殺活動、分布式序列號的生成、具體業(yè)務(wù)還體現(xiàn)在比如限制一個手機號發(fā)多少條短信、一個接口一分鐘限制多少請求、一個接口一天限制調(diào)用多少次等等。

分布式鎖

這個主要利用redis的setnx命令進行,setnx:"set if not exists"就是如果不存在則成功設(shè)置緩存同時返回1,否則返回0 ,這個特性在俞你奔遠方的后臺中有所運用,因為我們服務(wù)器是集群的,定時任務(wù)可能在兩臺機器上都會運行,所以在定時任務(wù)中首先 通過setnx設(shè)置一個lock, 如果成功設(shè)置則執(zhí)行,如果沒有成功設(shè)置,則表明該定時任務(wù)已執(zhí)行。 當(dāng)然結(jié)合具體業(yè)務(wù),我們可以給這個lock加一個過期時間,比如說30分鐘執(zhí)行一次的定時任務(wù),那么這個過期時間設(shè)置為小于30分鐘的一個時間就可以,這個與定時任務(wù)的周期以及定時任務(wù)執(zhí)行消耗時間相關(guān)。

在分布式鎖的場景中,主要用在比如秒殺系統(tǒng)等。

延時操作

比如在訂單生產(chǎn)后我們占用了庫存,10分鐘后去檢驗用戶是夠真正購買,如果沒有購買將該單據(jù)設(shè)置無效,同時還原庫存。 由于redis自2.8.0之后版本提供Keyspace Notifications功能,允許客戶訂閱Pub/Sub頻道,以便以某種方式接收影響Redis數(shù)據(jù)集的事件。 所以我們對于上面的需求就可以用以下解決方案,我們在訂單生產(chǎn)時,設(shè)置一個key,同時設(shè)置10分鐘后過期, 我們在后臺實現(xiàn)一個監(jiān)聽器,監(jiān)聽key的實效,監(jiān)聽到key失效時將后續(xù)邏輯加上。

當(dāng)然我們也可以利用rabbitmq、activemq等消息中間件的延遲隊列服務(wù)實現(xiàn)該需求。

排行榜相關(guān)問題

關(guān)系型數(shù)據(jù)庫在排行榜方面查詢速度普遍偏慢,所以可以借助redis的SortedSet進行熱點數(shù)據(jù)的排序。

比如點贊排行榜,做一個SortedSet, 然后以用戶的openid作為上面的username, 以用戶的點贊數(shù)作為上面的score, 然后針對每個用戶做一個hash, 通過zrangebyscore就可以按照點贊數(shù)獲取排行榜,然后再根據(jù)username獲取用戶的hash信息,這個當(dāng)時在實際運用中性能體驗也蠻不錯的。

點贊、好友等相互關(guān)系的存儲

Redis 利用集合的一些命令,比如求交集、并集、差集等。

在微博應(yīng)用中,每個用戶關(guān)注的人存在一個集合中,就很容易實現(xiàn)求兩個人的共同好友功能。

簡單隊列

由于Redis有l(wèi)ist push和list pop這樣的命令,所以能夠很方便的執(zhí)行隊列操作。

參考文章

  • https://baike.baidu.com/item/Redis/6549233?fr=aladdin

  • https://zhuanlan.zhihu.com/p/29665317

  • https://www.jianshu.com/p/40dbc78711c8

知識體系

知識體系

如何理解Redis的使用場景

相關(guān)文章

首先,我們通過學(xué)習(xí)Redis的概念基礎(chǔ),了解它適用的場景。

  • Redis入門 - Redis概念和基礎(chǔ)

    • Redis是一種支持key-value等多種數(shù)據(jù)結(jié)構(gòu)的存儲系統(tǒng)??捎糜诰彺?,事件發(fā)布或訂閱,高速隊列等場景。支持網(wǎng)絡(luò),提供字符串,哈希,列表,隊列,集合結(jié)構(gòu)直接存取,基于內(nèi)存,可持久化。

其次,這些適用場景都是基于Redis支持的數(shù)據(jù)類型的,所以我們需要學(xué)習(xí)它支持的數(shù)據(jù)類型;同時在redis優(yōu)化中還需要對底層數(shù)據(jù)結(jié)構(gòu)了解,所以也需要了解一些底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計和實現(xiàn)。

如何理解Redis的使用場景

  • Redis入門 - 數(shù)據(jù)類型:5種基礎(chǔ)數(shù)據(jù)類型詳解

    • Redis所有的key(鍵)都是字符串。我們在談基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)時,討論的是存儲值的數(shù)據(jù)類型,主要包括常見的5種數(shù)據(jù)類型,分別是:String、List、Set、Zset、Hash

  • Redis入門 - 數(shù)據(jù)類型:3種特殊類型詳解

    • Redis除了上文中5種基礎(chǔ)數(shù)據(jù)類型,還有三種特殊的數(shù)據(jù)類型,分別是 HyperLogLogs(基數(shù)統(tǒng)計), Bitmaps (位圖) 和 geospatial (地理位置)

  • Redis入門 - 數(shù)據(jù)類型:Stream詳解

    • Redis5.0 中還增加了一個數(shù)據(jù)結(jié)構(gòu)Stream,它借鑒了Kafka的設(shè)計,是一個新的強大的支持多播的可持久化的消息隊列。

  • Redis進階 - 底層數(shù)據(jù)結(jié)構(gòu):對象機制詳解

    • 我們在前文已經(jīng)闡述了Redis 5種基礎(chǔ)數(shù)據(jù)類型詳解,分別是字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset),以及5.0版本中Redis Stream結(jié)構(gòu)詳解;那么這些基礎(chǔ)類型的底層是如何實現(xiàn)的呢?Redis的每種對象其實都由對象結(jié)構(gòu)(redisObject)對應(yīng)編碼的數(shù)據(jù)結(jié)構(gòu)組合而成, 本文主要介紹對象結(jié)構(gòu)(redisObject)部分。。

  • Redis進階 - 底層數(shù)據(jù)結(jié)構(gòu):底層數(shù)據(jù)結(jié)構(gòu)詳解

    • 前文是第一部分底層設(shè)計:對象機制詳解, 本文主要介紹底層數(shù)據(jù)結(jié)構(gòu) 部分。

  • Redis進階 - 底層數(shù)據(jù)結(jié)構(gòu):redis對象與編碼(底層結(jié)構(gòu))對應(yīng)關(guān)系詳解

    • 在學(xué)習(xí)完底層數(shù)據(jù)結(jié)構(gòu)之后,我們終于可以結(jié)合前文內(nèi)容闡述redis對象及編碼之間的關(guān)系了。

再者,需要學(xué)習(xí)Redis支持的核心功能,包括持久化,消息,事務(wù),高可用;高可用方面包括,主從,哨兵等;高可拓展方面,比如 分片機制等。

  • Redis進階 - 持久化:RDB和AOF機制詳解

    • 為了防止數(shù)據(jù)丟失以及服務(wù)重啟時能夠恢復(fù)數(shù)據(jù),Redis支持?jǐn)?shù)據(jù)的持久化,主要分為兩種方式,分別是RDB和AOF; 當(dāng)然實際場景下還會使用這兩種的混合模式。

  • Redis進階 - 消息傳遞:發(fā)布訂閱模式詳解

    • Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。

  • Redis進階 - 事件:Redis事件機制詳解

    • Redis 采用事件驅(qū)動機制來處理大量的網(wǎng)絡(luò)IO。它并沒有使用 libevent 或者 libev 這樣的成熟開源方案,而是自己實現(xiàn)一個非常簡潔的事件驅(qū)動庫 ae_event。

  • Redis進階 - 事務(wù):Redis事務(wù)詳解

    • Redis 事務(wù)的本質(zhì)是一組命令的集合。事務(wù)支持一次執(zhí)行多個命令,一個事務(wù)中所有命令都會被序列化。在事務(wù)執(zhí)行過程,會按照順序串行化執(zhí)行隊列中的命令,其他客戶端提交的命令請求不會插入到事務(wù)執(zhí)行命令序列中。

  • Redis進階 - 高可用:主從復(fù)制詳解

    • 我們知道要避免單點故障,即保證高可用,便需要冗余(副本)方式提供集群服務(wù)。而Redis 提供了主從庫模式,以保證數(shù)據(jù)副本的一致,主從庫之間采用的是讀寫分離的方式。本文主要闡述Redis的主從復(fù)制。

  • Redis進階 - 高可用:哨兵機制(Redis Sentinel)詳解

    • 在上文主從復(fù)制的基礎(chǔ)上,如果注節(jié)點出現(xiàn)故障該怎么辦呢? 在 Redis 主從集群中,哨兵機制是實現(xiàn)主從庫自動切換的關(guān)鍵機制,它有效地解決了主從復(fù)制模式下故障轉(zhuǎn)移的問題。

  • Redis進階 - 高可拓展:分片技術(shù)(Redis Cluster)詳解

    • 前面兩篇文章,主從復(fù)制和哨兵機制保障了高可用,就讀寫分離而言雖然slave節(jié)點來擴展主從的讀并發(fā)能力,但是寫能力和存儲能力是無法進行擴展的,就只能是master節(jié)點能夠承載的上限。如果面對海量數(shù)據(jù)那么必然需要構(gòu)建master(主節(jié)點分片)之間的集群,同時必然需要吸收高可用(主從復(fù)制和哨兵機制)能力,即每個master分片節(jié)點還需要有slave節(jié)點,這是分布式系統(tǒng)中典型的縱向擴展(集群的分片技術(shù))的體現(xiàn);所以在Redis 3.0版本中對應(yīng)的設(shè)計就是Redis Cluster。

最后,就是具體的實踐以及實踐中遇到的問題和解決方法了:在不同版本中有不同特性,所以還需要了解版本;以及性能優(yōu)化,大廠實踐等。

  • Redis進階 - 緩存問題:一致性, 穿擊, 穿透, 雪崩, 污染等

    • Redis最常用的一個場景就是作為緩存,本文主要探討作為緩存,在實踐中可能會有哪些問題?比如一致性, 穿擊, 穿透, 雪崩, 污染等

  • Redis進階 - 版本特性: Redis4.0、5.0、6.0特性整理

    • 在學(xué)習(xí)Redis知識體系時,我們難免會需要查看版本實現(xiàn)之間的差異,本文主要整理Redis較為新的版本的特性。

  • Redis進階 - 運維監(jiān)控:Redis的監(jiān)控詳解

    • Redis實戰(zhàn)中包含開發(fā),集群 和 運維,Redis用的好不好,如何讓它更好,這是運維要做的;本文主要在 Redis自身狀態(tài)及命令可視化監(jiān)控工具,以及Redis監(jiān)控體系等方面幫助你構(gòu)建對redis運維/監(jiān)控體系的認(rèn)知,它是性能優(yōu)化的前提。

到此,關(guān)于“如何理解Redis的使用場景”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

標(biāo)題名稱:如何理解Redis的使用場景
文章來源:http://www.rwnh.cn/article6/jgjhog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站維護App設(shè)計、企業(yè)網(wǎng)站制作網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
万载县| 历史| 高尔夫| 潮安县| 西贡区| 当雄县| 兰州市| 汪清县| 潜江市| 临高县| 缙云县| 仁化县| 星子县| 吉安市| 贵溪市| 常熟市| 冷水江市| 天峨县| 盘山县| 马尔康县| 晴隆县| 甘孜县| 邵阳市| 五指山市| 铁岭市| 翁牛特旗| 资兴市| 苍溪县| 康定县| 汉沽区| 二连浩特市| 奉化市| 老河口市| 武隆县| 洪雅县| 康马县| 从化市| 台东市| 北宁市| 奈曼旗| 和平县|