redis應用場景及產品定位

2021-09-02 03:06:09 字數 3446 閱讀 6238

關鍵字:redis應用場景及產品定位

總結與memcached主要區別:

redis memcached

複雜資料型別 單一資料型別

持久化策略(6種) 非持久化

支援主從讀寫分離(配置簡單) 集群存在單點問題

預定的記憶體大小 現申請記憶體(可以設定最大內側)

記憶體滿t掉最早資料 記憶體滿t掉過期時間中最早(無過期設定的報錯)

單執行緒模型 多執行緒模型

傳統mysql+ memcached架構遇到的問題

實際mysql是適合進行海量資料儲存的,通過memcached將熱點資料載入到cache,加速訪問,很多公司都曾經使用過這樣的架構,但隨著業務資料量的不斷增加,和訪問量的持續增長,我們遇到了很多問題:

mysql需要不斷進行拆庫拆表,memcached也需不斷跟著擴容,擴容和維護工作佔據大量開發時間。

memcached與mysql資料庫資料一致性問題。

memcached資料命中率低或down機,大量訪問直接穿透到db,mysql無法支撐。

跨機房cache同步問題。

眾多nosql百花齊放,如何選擇

最近幾年,業界不斷湧現出很多各種各樣的nosql產品,那麼如何才能正確地使用好這些產品,最大化地發揮其長處,是我們需要深入研究和思考的問題,實際歸根結底最重要的是了解這些產品的定位,並且了解到每款產品的tradeoffs,在實際應用中做到揚長避短,總體上這些nosql主要用於解決以下幾種問題

少量資料儲存,高速讀寫訪問。此類產品通過資料全部in-momery 的方式來保證高速訪問,同時提供資料落地的功能,實際這正是redis最主要的適用場景。

海量資料儲存,分布式系統支援,資料一致性保證,方便的集群節點新增/刪除。

schema free,auto-sharding等。比如目前常見的一些文件資料庫都是支援schema-free的,直接儲存json格式資料,並且支援auto-sharding等功能,比如mongodb。

面對這些不同型別的nosql產品,我們需要根據我們的業務場景選擇最合適的產品。

相關廠商內容

2023年ibm汽車系統工程論壇(上海 2023年5月15日 星期四)

側重業務,引領技術;開放競合,不忘初心——archsummit2014深圳站啟動

5月20日,pworld 2014軟體架構&平台創新大會在京召開【免費報名】

企業soa服務治理與服務開放平台

阿里雲:雲時代的軟體服務

相關贊助商

pworld 2014軟體架構&平台創新大會,北京5月20日,上海6月5日,誠邀蒞臨。

redis適用場景,如何正確的使用

前面已經分析過,redis最適合所有資料in-momory的場景,雖然redis也提供持久化功能,但實際更多的是乙個disk-backed的功能,跟傳統意義上的持久化有比較大的差別,那麼可能大家就會有疑問,似乎redis更像乙個加強版的memcached,那麼何時使用memcached,何時使用redis呢?

redis與memcached的比較

網路io模型

memcached是多執行緒,非阻塞io復用的網路模型,分為監聽主線程和worker子執行緒,監聽執行緒監聽網路連線,接受請求後,將連線描述字pipe 傳遞給worker執行緒,進行讀寫io, 網路層使用libevent封裝的事件庫,多執行緒模型可以發揮多核作用,但是引入了cache coherency和鎖的問題,比如,memcached最常用的stats 命令,實際memcached所有操作都要對這個全域性變數加鎖,進行計數等工作,帶來了效能損耗。

[img]

(memcached網路io模型)

redis使用單執行緒的io復用模型,自己封裝了乙個簡單的aeevent事件處理框架,主要實現了epoll、kqueue和select,對於單純只有io操作來說,單執行緒可以將速度優勢發揮到最大,但是redis也提供了一些簡單的計算功能,比如排序、聚合等,對於這些操作,單執行緒模型實際會嚴重影響整體吞吐量,cpu計算過程中,整個io排程都是被阻塞住的。

記憶體管理方面

memcached使用預分配的記憶體池的方式,使用slab和大小不同的chunk來管理記憶體,item根據大小選擇合適的chunk儲存,記憶體池的方式可以省去申請/釋放記憶體的開銷,並且能減小記憶體碎片產生,但這種方式也會帶來一定程度上的空間浪費,並且在記憶體仍然有很大空間時,新的資料也可能會被剔除,原因可以參考timyang的文章:

redis使用現場申請記憶體的方式來儲存資料,並且很少使用free-list等方式來優化記憶體分配,會在一定程度上存在記憶體碎片,redis跟據儲存命令引數,會把帶過期時間的資料單獨存放在一起,並把它們稱為臨時資料,非臨時資料是永遠不會被剔除的,即便物理記憶體不夠,導致swap也不會剔除任何非臨時資料(但會嘗試剔除部分臨時資料),這點上redis更適合作為儲存而不是cache。

資料一致性問題

memcached提供了cas命令,可以保證多個併發訪問操作同乙份資料的一致性問題。 redis沒有提供cas 命令,並不能保證這點,不過redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。

儲存方式及其它方面

memcached基本只支援簡單的key-value儲存,不支援列舉,不支援持久化和複製等功能

redis除key/value之外,還支援list,set,sorted set,hash等眾多資料結構,提供了keys

關於不同語言的客戶端支援

在不同語言的客戶端方面,memcached和redis都有豐富的第三方客戶端可供選擇,不過因為memcached發展的時間更久一些,目前看在客戶端支援方面,memcached的很多客戶端更加成熟穩定,而redis由於其協議本身就比memcached複雜,加上作者不斷增加新的功能等,對應第三方客戶端跟進速度可能會趕不上,有時可能需要自己在第三方客戶端基礎上做些修改才能更好的使用。

根據以上比較不難看出,當我們不希望資料被踢出,或者需要除key/value之外的更多資料型別時,或者需要落地功能時,使用redis比使用memcached更合適。

關於redis的一些周邊功能

redis除了作為儲存之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對於此類功能需要了解其實現原理,清楚地了解到它的侷限性後,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支援的,消費方連線閃斷或重連之間過來的訊息是會全部丟失的,又比如聚合計算和scripting等功能受redis單執行緒模型所限,是不可能達到很高的吞吐量的,需要謹慎使用。

總的來說redis作者是一位非常勤奮的開發者,可以經常看到作者在嘗試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入了解後再使用。

總結:redis使用最佳方式是全部資料in-memory。

redis更多場景是作為memcached的替代者來使用。

當需要除key/value之外的更多資料型別支援時,使用redis更合適。

當儲存的資料不能被剔除時,使用redis更合適。

redis資料型別與容量規劃。

如何根據業務場景搭建穩定,可靠,可擴充套件的redis集群。

redis引數,**優化及二次開發基礎實踐。

redis應用範圍及應用場景

redis remote dictionary service 遠端服務字典 是網際網路領域使用最廣泛的儲存中介軟體,包括的超高的效能 完美的文件 簡潔易懂的原始碼和豐富的客戶端庫支援在開源中介軟體領域廣受好評。1 快取 2 分布式鎖 hash 2 記錄帖子的標題 摘要 作者和封面資訊,用於列表頁的...

Redis應用場景

redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。redis常用資料型別 redis最為常用的資料型別主要有以下五種 在具體描述這幾種資料型別之...

Redis應用場景

redis開創了一種新的資料儲存思路,使用redis,我們不用在面對功能單調的資料庫時,把精力放在如何把大象放進冰箱這樣的問題上,而是利用redis靈活多變的資料結構和資料操作,為不同的大象構建不同的冰箱。redis常用資料型別 redis最為常用的資料型別主要有以下五種 在具體描述這幾種資料型別之...