【Redis 开发与运维】初识 Redis
生活随笔
收集整理的這篇文章主要介紹了
【Redis 开发与运维】初识 Redis
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、什么是 Redis ?
- 二、Redis 的特性
- 三、Redis 典型使用場景
- Redis 可以做什么
- Redis 不可以做什么
- 四、為什么單線程還能這么快
- 單線程要注意的問題
一、什么是 Redis ?
Redis(全稱:Remote Dictionary Server 遠程字典服務)是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫。
二、Redis 的特性
- 所有數據都存放在內存中
- C語言實現
- 單線程架構
- 支持字符串、哈希、列表、集合、有序集合、BitMaps(位圖)、HyperLogLog(超小內存唯一值計數)、GEO(地理信息定位)
- 發布訂閱、Lua腳本、事務、pipeline
- 源碼少,早期版本只有 2 萬行左右,3.0 版本之后增加了集群特性,代碼增至 5 萬行左右
- 單線程模型
- 不依賴操作系統中的類庫
- 支持 Java、php、python、ruby、lua、nodeJS…
- Redis 所有數據保存在內存當中,對數據的更新將異步地保存到磁盤上。
- 支持主從復制,后面文章介紹
- Redis-Sentinel 支持高可用,后面文章介紹
- Redis-Cluster 支持分布式,后面文章介紹
三、Redis 典型使用場景
Redis 可以做什么
- 緩存機制幾乎在所有的大型網站都有使用,合理地使用緩存不僅可以加快數據的訪問速度,而且能夠有效的降低后端數據源的壓力。Redis 提供了鍵值過期時間設置,并且也提供了靈活控制最大內存和內存溢出后的淘汰策略。
- Redis 提供了列表和有序集合數據結構,合理使用可以很方便地構建各種排行榜系統。比如按照熱度排行的微博熱搜、百度熱搜等。
- 比如微博的轉發數、評論數、點贊數等,為了保證數據的實時性,每一次都要做加 1 的操作,如果并發量很大對于傳統關系型數據的性能是一種挑戰。Redis 天然支持計數功能而且計數的性能也非常好,是計數器系統的重要選擇。
- 例如粉絲數、觀眾數、共同關注、時間軸列表等等,由于社交網站訪問量通常比較大,而且傳統關系型數據庫不太適合保存這種類型的數據,Redis 提供的數據結構可以相對比較容易地實現這些功能。
- Redis 提供了發布訂閱功能和阻塞隊列的功能,輕量級的消息隊列系統,一些對于消息隊列功能不是有很強要求的系統的時候,就可以使用它來實現。
Redis 不可以做什么
- 從數據規模角度看,因為 Redis 數據都是放在內存中的,數據量非常大并不適合 Redis 的使用場景。
- 從數據冷熱角度看,熱數據指頻繁操作的數據,反之為冷數據。如果將冷數據放內存,那對于內存是一種浪費,將熱數據放入內存可以加速讀寫,也可降低后端負載。
四、為什么單線程還能這么快
通常來說,單線程處理能力要比多線程差,那 Redis 的單線程架構為什么還能這么快?
- 純內存訪問,Redis 將所有數據放在內存中。
- 非阻塞 I/O,Redis 使用 epoll 作為 I/O 多路復用技術的實現,不在網絡 I/O 上浪費過多時間。
- 單線程避免了線程切換和競態產生的消耗。
單線程要注意的問題
- 因為是單線程,同一時間只運行一條命令,所以它拒絕長(慢)命令,單線程對于每個命令的執行時間是有要求的。如果命令執行過長,會造成其他命令的阻塞,對于 Redis 這種高性能的服務來說是致命的。
來源:《Redis 開發與運維》第 1 章 初識 Redis
總結
以上是生活随笔為你收集整理的【Redis 开发与运维】初识 Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#:Dockpanel的一些入门的基本
- 下一篇: sufeinet