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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

redis幾個認識誤區(qū)

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-09 13:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

Redis性能驚人,國內前十大網(wǎng)站的子產品估計用1臺Redis就可以滿足存儲及Cache的需求。除了性能印象之外,業(yè)界其實普遍對Redis的認識存在一定誤區(qū)。下文是對對Redis研究的一個總結,澄清了一些認識上的誤區(qū),提出一些觀點供大家探討。

1. Redis是什么

這個問題的結果影響了我們怎么用Redis。如果你認為Redis是一個key value store, 那可能會用它來代替MySQL;如果認為它是一個可以持久化的cache, 可能只是它保存一些頻繁訪問的臨時數(shù)據(jù)。Redis是REmote DIctionary Server的縮寫,在Redis在官方網(wǎng)站的的副標題是A persistent key-value database with built-in net interface written in ANSI-C for Posix systems,這個定義偏向key value store。還有一些看法則認為Redis是一個memory database,因為它的高性能都是基于內存操作的基礎。另外一些人則認為Redis是一個data structure server,因為Redis支持復雜的數(shù)據(jù)特性,比如List, Set等。對Redis的作用的不同解讀決定了你對Redis的使用方式。

互聯(lián)網(wǎng)數(shù)據(jù)目前基本使用兩種方式來存儲,關系數(shù)據(jù)庫或者key value。但是這些互聯(lián)網(wǎng)業(yè)務本身并不屬于這兩種數(shù)據(jù)類型,比如用戶在社會化平臺中的關系,它是一個list,如果要用關系數(shù)據(jù)庫存儲就需要轉換成一種多行記錄的形式,這種形式存在很多冗余數(shù)據(jù),每一行需要存儲一些重復信息。如果用key value存儲則修改和刪除比較麻煩,需要將全部數(shù)據(jù)讀出再寫入。Redis在內存中設計了各種數(shù)據(jù)類型,讓業(yè)務能夠高速原子的訪問這些數(shù)據(jù)結構,并且不需要關心持久存儲的問題,從架構上解決了前面兩種存儲需要走一些彎路的問題。

2. Redis不可能比Memcache快

很多開發(fā)者都認為Redis不可能比Memcached快,Memcached完全基于內存,而Redis具有持久化保存特性,即使是異步的,Redis也不可能比Memcached快。但是測試結果基本是Redis占絕對優(yōu)勢。一直在思考這個原因,目前想到的原因有這幾方面。

Libevent。和Memcached不同,Redis并沒有選擇libevent。Libevent為了迎合通用性造成代碼龐大(目前Redis代碼還不到libevent的1/3)及犧牲了在特定平臺的不少性能。Redis用libevent中兩個文件修改實現(xiàn)了自己的epoll event loop(4)。業(yè)界不少開發(fā)者也建議Redis使用另外一個libevent高性能替代libev,但是作者還是堅持Redis應該小巧并去依賴的思路。一個印象深刻的細節(jié)是編譯Redis之前并不需要執(zhí)行。/configure。

CAS問題。CAS是Memcached中比較方便的一種防止競爭修改資源的方法。CAS實現(xiàn)需要為每個cache key設置一個隱藏的cas token,cas相當value版本號,每次set會token需要遞增,因此帶來CPU和內存的雙重開銷,雖然這些開銷很小,但是到單機10G+ cache以及QPS上萬之后這些開銷就會給雙方相對帶來一些細微性能差別(5)。

3. 單臺Redis的存放數(shù)據(jù)必須比物理內存小

Redis的數(shù)據(jù)全部放在內存帶來了高速的性能,但是也帶來一些不合理之處。比如一個中型網(wǎng)站有100萬注冊用戶,如果這些資料要用Redis來存儲,內存的容量必須能夠容納這100萬用戶。但是業(yè)務實際情況是100萬用戶只有5萬活躍用戶,1周來訪問過1次的也只有15萬用戶,因此全部100萬用戶的數(shù)據(jù)都放在內存有不合理之處,RAM需要為冷數(shù)據(jù)買單。

這跟操作系統(tǒng)非常相似,操作系統(tǒng)所有應用訪問的數(shù)據(jù)都在內存,但是如果物理內存容納不下新的數(shù)據(jù),操作系統(tǒng)會智能將部分長期沒有訪問的數(shù)據(jù)交換到磁盤,為新的應用留出空間。現(xiàn)代操作系統(tǒng)給應用提供的并不是物理內存,而是虛擬內存(Virtual Memory)的概念。

基于相同的考慮,Redis 2.0也增加了VM特性。讓Redis數(shù)據(jù)容量突破了物理內存的限制。并實現(xiàn)了數(shù)據(jù)冷熱分離。

4. Redis的VM實現(xiàn)是重復造輪子

Redis的VM依照之前的epoll實現(xiàn)思路依舊是自己實現(xiàn)。但是在前面操作系統(tǒng)的介紹提到OS也可以自動幫程序實現(xiàn)冷熱數(shù)據(jù)分離,Redis只需要OS申請一塊大內存,OS會自動將熱數(shù)據(jù)放入物理內存,冷數(shù)據(jù)交換到硬盤,另外一個知名的“理解了現(xiàn)代操作系統(tǒng)(3)”的Varnish就是這樣實現(xiàn),也取得了非常成功的效果。

作者antirez在解釋為什么要自己實現(xiàn)VM中提到幾個原因(6)。主要OS的VM換入換出是基于Page概念,比如OS VM1個Page是4K, 4K中只要還有一個元素即使只有1個字節(jié)被訪問,這個頁也不會被SWAP, 換入也同樣道理,讀到一個字節(jié)可能會換入4K無用的內存。而Redis自己實現(xiàn)則可以達到控制換入的粒度。另外訪問操作系統(tǒng)SWAP內存區(qū)域時block進程,也是導致Redis要自己實現(xiàn)VM原因之一。

5. 用get/set方式使用Redis

作為一個key value存在,很多開發(fā)者自然的使用set/get方式來使用Redis,實際上這并不是最優(yōu)化的使用方法。尤其在未啟用VM情況下,Redis全部數(shù)據(jù)需要放入內存,節(jié)約內存尤其重要。

假如一個key-value單元需要最小占用512字節(jié),即使只存一個字節(jié)也占了512字節(jié)。這時候就有一個設計模式,可以把key復用,幾個key-value放入一個key中,value再作為一個set存入,這樣同樣512字節(jié)就會存放10-100倍的容量。

這就是為了節(jié)約內存,建議使用hashset而不是set/get的方式來使用Redis,詳細方法見參考文獻(7)。

6. 使用aof代替snapshot

Redis有兩種存儲方式,默認是snapshot方式,實現(xiàn)方法是定時將內存的快照(snapshot)持久化到硬盤,這種方法缺點是持久化之后如果出現(xiàn)crash則會丟失一段數(shù)據(jù)。因此在完美主義者的推動下作者增加了aof方式。aof即append only mode,在寫入內存數(shù)據(jù)的同時將操作命令保存到日志文件,在一個并發(fā)更改上萬的系統(tǒng)中,命令日志是一個非常龐大的數(shù)據(jù),管理維護成本非常高,恢復重建時間會非常長,這樣導致失去aof高可用性本意。另外更重要的是Redis是一個內存數(shù)據(jù)結構模型,所有的優(yōu)勢都是建立在對內存復雜數(shù)據(jù)結構高效的原子操作上,這樣就看出aof是一個非常不協(xié)調的部分。

其實aof目的主要是數(shù)據(jù)可靠性及高可用性,在Redis中有另外一種方法來達到目的:Replication。由于Redis的高性能,復制基本沒有延遲。這樣達到了防止單點故障及實現(xiàn)了高可用。

小結

要想成功使用一種產品,我們需要深入了解它的特性。Redis性能突出,如果能夠熟練的駕馭,對國內很多大型應用具有很大幫助。希望更多同行加入到Redis使用及代碼研究行列。

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

    關注

    0

    文章

    390

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Redis集群部署配置詳解

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

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

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

    【經驗分享】在Omni3576上編譯Redis-8.0.2源碼,并安裝及性能測試

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

    【幸狐Omni3576邊緣計算套件試用體驗】Redis最新8.0.2版本源碼安裝及性能測試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運行Redis性能測試,并
    發(fā)表于 06-03 01:28

    Redis 再次開源!

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

    redis三種集群方案詳解

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

    Redis實戰(zhàn)筆記

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

    華為云 Flexus X 加速 Redis 案例實踐與詳解

    Redis 加速鏡像,更是為開發(fā)者提供了極大的便利。本文將詳細介紹如何利用華為云 Flexus X 實例自帶的 Redis 鏡像,快速部署并配置 Redis,以及通過實際案例展示其便捷性和高效性。 一、華為云 Flexus
    的頭像 發(fā)表于 01-23 17:52 ?509次閱讀
    華為云 Flexus X 加速 <b class='flag-5'>Redis</b> 案例實踐與詳解

    Redis Cluster之故障轉移

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

    漏電開關使用誤區(qū)及糾正

    漏電開關是現(xiàn)代電氣安全中不可或缺的一部分,它能夠在檢測到漏電時迅速切斷電源,從而保護人身安全和設備不受損害。然而,在實際使用過程中,由于對漏電開關的認識不足或操作不當,常常會出現(xiàn)一些誤區(qū)誤區(qū)
    的頭像 發(fā)表于 12-30 17:18 ?1053次閱讀

    華為云Flexus X實例,Redis性能加速評測及對比

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

    DFT的常見誤區(qū)與解決方案

    DFT(離散傅里葉變換)在信號處理領域具有廣泛的應用,但在使用過程中也常會遇到一些誤區(qū)。以下是對DFT常見誤區(qū)的總結以及相應的解決方案: 常見誤區(qū) 混疊現(xiàn)象 : 誤區(qū)描述:在采樣過程中
    的頭像 發(fā)表于 12-20 09:32 ?1770次閱讀

    Redis緩存與Memcached的比較

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

    編程語言的誤區(qū)與常見問題

    : 選擇編程語言時,應考慮項目需求、個人興趣以及語言的適用性。例如,如果你對Web開發(fā)感興趣,那么學習JavaScript可能是一個好選擇。 認識到沒有一種編程語言是萬能的。不同的語言有不同的優(yōu)勢和適用場景,靈活選擇是關鍵。 誤區(qū)二:忽
    的頭像 發(fā)表于 11-15 09:35 ?952次閱讀

    eda的常見誤區(qū)和解決方案

    探索性數(shù)據(jù)分析(EDA)是數(shù)據(jù)分析過程中的重要步驟,它涉及對數(shù)據(jù)的初步檢查和分析,以便更好地理解數(shù)據(jù)集的特征和結構。 誤區(qū)1:忽視數(shù)據(jù)清洗 常見誤區(qū): 在沒有徹底清洗數(shù)據(jù)的情況下就開始進行EDA
    的頭像 發(fā)表于 11-13 10:59 ?1147次閱讀