1.什么是Redis?
Redis(Remote Dictionary Server) 是一個使用 C 語言撰寫的,開源的(BSD許可)高性能非關系型(NoSQL)的鍵值對資料庫。
Redis 本質上是一個 Key-Value 型別的記憶體資料庫, 整個資料庫加載在記憶體當中進行操作, 定期通過異步操作把資料庫資料 flush 到硬碟上進行保存。因為是純記憶體操作, Redis 的性能非常出色, 每秒可以處理超過 10 萬次讀寫操作, 是已知性能最快的 Key-Value DB。
Redis 的出色之處不僅僅是性能, Redis 最大的魅力是支持保存多種資料結構, 此外單個value 的最大限制是 1GB, 不像 memcached 只能保存 1MB 的資料, 因此 Redis 可以用來實作很多有用的功能,比方說用他的 List 來做 FIFO 雙向鏈表,實作一個輕量級的高性 能訊息佇列服務, 用他的 Set 可以做高性能的 tag 系統等等。另外 Redis 也可以對存入的Key-Value 設定 expire 時間, 因此也可以被當作一 個功能加強版的 memcached 來用。
Redis 的主要缺點是資料庫容量受到物理記憶體的限制, 不能用作海量資料的高性能讀寫, 因此 Redis 適合的場景主要局限在較小資料量的高性能操作和運算上。
2.Redis有哪些資料型別?
Redis主要有5種資料型別,包括String,List,Set,Zset,Hash,滿足大部分的使用要求資料型別 可以存盤的值 操作STRING 字串、整數或者浮點數 對整個字串或者字串的其中一部分執行操作對整數和浮點數執行自增或者自減操作LIST 串列 從兩端壓入或者彈出元素對單個或者多個元素進行修剪,只保留一個范圍內的元素SET 無序集合 添加、獲取、移除單個元素檢查一個元素是否存在于集合中計算交集、并集、差集從集合里面隨機獲取元素HASH 包含鍵值對的無序散串列 添加、獲取、移除單個鍵值對獲取所有鍵值對檢查某個鍵是否存在ZSET 有序集合 添加、獲取、洗掉元素根據分值范圍或者成員來獲取元素計算一個鍵的排名
3. Redis有哪些優缺點?
優點:
讀寫性能優異, Redis能讀的速度是110000次/s,寫的速度是81000次/s。
支持資料持久化,支持AOF和RDB兩種持久化方式。
支持事務,Redis的所有操作都是原子性的,同時Redis還支持對幾個操作合并后的原子性執行。
資料結構豐富,除了支持string型別的value外還支持hash、set、zset、list等資料結構。
支持主從復制,主機會自動將資料同步到從機,可以進行讀寫分離。
缺點:
資料庫容量受到物理記憶體的限制,不能用作海量資料的高性能讀寫,因此Redis適合的場景主要局限在較小資料量的高性能操作和運算上。
Redis 不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
主機宕機,宕機前有部分資料未能及時同步到從機,切換IP后還會引入資料不一致的問題,降低了系統的可用性。
Redis 較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。
為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。
4.Redis為什么這么快?
①完全基于記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似于 HashMap,HashMap 的優勢就是查找和操作的時間復雜度都是O(1);
②資料結構簡單,對資料操作也簡單,Redis 中的資料結構是專門進行設計的;
③采用單執行緒,避免了不必要的背景關系切換和競爭條件,也不存在多行程或者多執行緒導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;
④使用多路 I/O 復用模型,非阻塞 IO;
⑤使用底層模型不同,它們之間底層實作方式以及與客戶端之間通信的應用協議不一樣,Redis 直接自己構建了 VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求


uj5u.com熱心網友回復:
論壇是用來討論問題的。筆記類知識, 請發到個人博客。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/87567.html
標籤:新技術前沿
上一篇:關于MYSQL資料更新問題,為什么我這句更新陳述句會出錯?
下一篇:休息方式
