為什麼要使用Redis做快取
對Redis,百度百科給出的的解釋是
“ Redis(Remote Dictionary Server ),即遠端字典服務,是一個開源的使用ANSI 編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value ,並提供多種語言的API ”
“ Redis 是一個高效能的key-value資料庫。 redis的出現,很大程度補償了 這類key/value儲存的不足,在部 分場合可以對關聯式資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。”
那麼,Redis有什麼 優點呢
-
Redis支援資料持久化
-
Redis的讀寫效能非常優異
-
豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除
-
支援事務,Redis的所有操作都是原子性的,同時Redis還支援對幾個操作合併後的原子性執行。
-
Redis的資料結構豐富,除了支援string型別的value外還支援hash、set、zset、list等資料結構。
相對應的,Redis也有 缺點
-
資料庫容量會受到實體記憶體的限制,不能用作海量資料的高效能讀寫,因此Redis適合的場景主要侷限在較小資料量的高效能操作和運算上。
-
Redis 不具備自動容錯和恢復功能,主機從機的當機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
-
如果主機當機,當機前有部分資料未能及時同步到從機,切換IP後還會引入資料不一致的問題,降低了系統的可用性。
-
Redis 較難支援線上擴容
-
Redis是單執行緒的,單臺伺服器無法充分利用多核伺服器的CPU
為什麼我們要使用Redis呢?
從高併發上來說:
-
直接操作快取能夠承受的請求是遠遠大於直接訪問資料庫的,所以我們可以考慮把資料庫中的部分資料轉移到快取中去,這樣使用者的一部分請求會直接到快取這裡而不用經過資料庫
從高效能上來說:
-
使用者第一次訪問資料庫中的某些資料。 因為是從硬碟上讀取的所以這個過程會比較慢。將該使用者訪問的資料存在快取中,下一次再訪問這些資料的時候就可以直接從快取中獲取了。操作快取就是直接操作記憶體,所以速度相當快。如果資料庫中的對應資料改變的之後,同步改變快取中相應的資料
為什麼要使用Redis而不是其他的,例如Java自帶的 map 或者 guava
-
快取分為本地快取和分散式快取。以 Java 自帶的 map 或者 guava為例子, 實現的是本地快取,最主要的特點是輕量以及快速,生命週期隨著 jvm 的銷燬而結束,並且在多例項的情況下,每個例項都需要各自儲存一份快取,快取不具有一致性。
-
使用 redis 或 memcached 之類的稱為分散式快取,在多例項的情況下,各例項共用一份快取資料,快取具有一致性。缺點是需要保持 redis 或 memcached服務的高可用,整個程式架構上較為複雜。
Redis為什麼這麼快
-
完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中
-
資料結構簡單,對資料操作也簡單
-
採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程式或者多執行緒導致的切換而消耗 CPU
-
使用多路 I/O 複用模型,非阻塞 IO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2688704/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Redis做為MySQL的快取RedisMySql快取
- redis為什麼快Redis
- Mybatis的二級快取、使用Redis做二級快取MyBatis快取Redis
- 什麼是redis快取雪崩、快取穿透、快取擊穿Redis快取穿透
- Redis為什麼那麼快?Redis
- Redis為什麼這麼快?Redis
- 什麼是redis的快取雪崩與快取穿透Redis快取穿透
- 為什麼我們做分散式使用Redis?分散式Redis
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- 大規模爬蟲為什麼要管理DNS快取爬蟲DNS快取
- SpringBoot註解使用redis做快取總結Spring BootRedis快取
- spring-boot-route(十二)整合redis做為快取SpringbootRedis快取
- redis為什麼要提供pipeline功能Redis
- Springboot 整合 SpringCache 使用 Redis 作為快取Spring BootGCRedis快取
- 破玩意 | Redis 為什麼那麼快Redis
- 為什麼Redis這麼快?5分鐘成為Redis高手Redis
- 如何使用 Redis 快取Redis快取
- Laravel使用Redis快取LaravelRedis快取
- 在我們使用Redis作為一個LRU快取的時候,怎麼做才能更高效Redis快取
- 為什麼要使用 Redis?Redis
- 為什麼要學習Python?Python可以做什麼事情?Python
- 2018-11-08 拿redis 做快取Redis快取
- Nginx代理websocket為什麼要這樣做?NginxWeb
- springboot +lettuce +redis 快取使用Spring BootRedis快取
- 京東二面,Redis為什麼那麼快?Redis
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為什麼要學習Python?學習Python可以做什麼?Python
- 為什麼redis是單執行緒的以及為什麼這麼快?Redis執行緒
- 美團面試:Redis 除了快取還能做什麼?可以做訊息佇列嗎?面試Redis快取佇列
- Redis是單執行緒的,但Redis為什麼這麼快?Redis執行緒
- 硬核!15張圖解Redis為什麼這麼快圖解Redis
- 為什麼要學Python?Python可做哪些事情?Python
- 為什麼要備份資料? 如何做?
- Django(39)使用redis配置快取DjangoRedis快取
- Redis 快取擊穿(失效)、快取穿透、快取雪崩怎麼解決?Redis快取穿透
- Redis單執行緒,為什麼速度快Redis執行緒
- 比Redis快5倍的中介軟體,究竟為什麼這麼快?Redis
- redis是單執行緒的,為什麼這麼快Redis執行緒