溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Redis做緩存的原因有哪些

發(fā)布時(shí)間:2021-11-11 11:09:32 來源:億速云 閱讀:135 作者:小新 欄目:數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)使用Redis做緩存的原因有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

對Redis,百度百科給出的的解釋是

“Redis(Remote Dictionary Server ),即遠(yuǎn)程字典服務(wù),是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API”

“Redis 是一個(gè)高性能的key-value數(shù)據(jù)庫。 redis的出現(xiàn),很大程度補(bǔ)償了memcached這類key/value存儲的不足,在部 分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便?!?/p>

那么,Redis有什么優(yōu)點(diǎn)

  • Redis支持?jǐn)?shù)據(jù)持久化

  • Redis的讀寫性能非常優(yōu)異

  • 豐富的特性:可用于緩存,消息,按key設(shè)置過期時(shí)間,過期后將會自動刪除

  • 支持事務(wù),Redis的所有操作都是原子性的,同時(shí)Redis還支持對幾個(gè)操作合并后的原子性執(zhí)行。

  • Redis的數(shù)據(jù)結(jié)構(gòu)豐富,除了支持string類型的value外還支持hash、set、zset、list等數(shù)據(jù)結(jié)構(gòu)。

相對應(yīng)的,Redis也有缺點(diǎn)

  • 數(shù)據(jù)庫容量會受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運(yùn)算上。

  • Redis 不具備自動容錯(cuò)和恢復(fù)功能,主機(jī)從機(jī)的宕機(jī)都會導(dǎo)致前端部分讀寫請求失敗,需要等待機(jī)器重啟或者手動切換前端的IP才能恢復(fù)。

  • 如果主機(jī)宕機(jī),宕機(jī)前有部分?jǐn)?shù)據(jù)未能及時(shí)同步到從機(jī),切換IP后還會引入數(shù)據(jù)不一致的問題,降低了系統(tǒng)的可用性。

  • Redis 較難支持在線擴(kuò)容

  • Redis是單線程的,單臺服務(wù)器無法充分利用多核服務(wù)器的CPU

為什么我們要使用Redis呢?

從高并發(fā)上來說:

  • 直接操作緩存能夠承受的請求是遠(yuǎn)遠(yuǎn)大于直接訪問數(shù)據(jù)庫的,所以我們可以考慮把數(shù)據(jù)庫中的部分?jǐn)?shù)據(jù)轉(zhuǎn)移到緩存中去,這樣用戶的一部分請求會直接到緩存這里而不用經(jīng)過數(shù)據(jù)庫

從高性能上來說:

  • 用戶第一次訪問數(shù)據(jù)庫中的某些數(shù)據(jù)。因?yàn)槭菑挠脖P上讀取的所以這個(gè)過程會比較慢。將該用戶訪問的數(shù)據(jù)存在緩存中,下一次再訪問這些數(shù)據(jù)的時(shí)候就可以直接從緩存中獲取了。操作緩存就是直接操作內(nèi)存,所以速度相當(dāng)快。如果數(shù)據(jù)庫中的對應(yīng)數(shù)據(jù)改變的之后,同步改變緩存中相應(yīng)的數(shù)據(jù)

為什么要使用Redis而不是其他的,例如Java自帶的 map 或者 guava

  • 緩存分為本地緩存和分布式緩存。以 Java 自帶的 map 或者 guava為例子, 實(shí)現(xiàn)的是本地緩存,最主要的特點(diǎn)是輕量以及快速,生命周期隨著 jvm 的銷毀而結(jié)束,并且在多實(shí)例的情況下,每個(gè)實(shí)例都需要各自保存一份緩存,緩存不具有一致性。

  • 使用 redis 或 memcached 之類的稱為分布式緩存,在多實(shí)例的情況下,各實(shí)例共用一份緩存數(shù)據(jù),緩存具有一致性。缺點(diǎn)是需要保持 redis 或 memcached服務(wù)的高可用,整個(gè)程序架構(gòu)上較為復(fù)雜。

Redis為什么這么快

  • 完全基于內(nèi)存,絕大部分請求是純粹的內(nèi)存操作,非??焖?。數(shù)據(jù)存在內(nèi)存中

  • 數(shù)據(jù)結(jié)構(gòu)簡單,對數(shù)據(jù)操作也簡單

  • 采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進(jìn)程或者多線程導(dǎo)致的切換而消耗 CPU

  • 使用多路 I/O 復(fù)用模型,非阻塞 IO

感謝各位的閱讀!關(guān)于“使用Redis做緩存的原因有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI