共計 3351 個字符,預計需要花費 9 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 redis 數據庫的優缺點有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
redis 數據庫的優缺點:
1、使用 redis 有哪些好處?
(1) 速度快,因為數據存在內存中,類似于 HashMap,HashMap 的優勢就是查找和操作的時間復雜度都是 O(1)
(2) 支持豐富數據類型,支持 string,list,set,sorted set,hash
(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要么全部執行,要么全部不執行
(4) 豐富的特性:可用于緩存,消息,按 key 設置過期時間,過期后將會自動刪除
2、redis 相比 memcached 有哪些優勢?
(1) memcached 所有的值均是簡單的字符串,redis 作為其替代者,支持更為豐富的數據類型
(2) redis 的速度比 memcached 快很多
(3) redis 可以持久化其數據
3、redis 常見性能問題和解決方案:
(1) Master 最好不要做任何持久化工作,如 RDB 內存快照和 AOF 日志文件
(2) 如果數據比較重要,某個 Slave 開啟 AOF 備份數據,策略設置為每秒同步一次
(3) 為了主從復制的速度和連接的穩定性,Master 和 Slave 最好在同一個局域網內
(4) 盡量避免在壓力很大的主庫上增加從庫
(5) 主從復制不要用圖狀結構,用單向鏈表結構更為穩定,即:Master – Slave1 – Slave2 – Slave3…
這樣的結構方便解決單點故障問題,實現 Slave 對 Master 的替換。如果 Master 掛了,可以立刻啟用 Slave1 做 Master,其他不變。
4、MySQL 里有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中的數據都是熱點數據
相關知識:redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。redis 提供 6 種數據淘汰策略:
voltile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據
5、Memcache 與 Redis 的區別都有哪些?
1)、存儲方式
Memecache 把數據全部存在內存之中,斷電后會掛掉,數據不能超過內存大小。
Redis 有部份存在硬盤上,這樣能保證數據的持久性。
2)、數據支持類型
Memcache 對數據類型支持相對簡單。
Redis 有復雜的數據類型。
3)、使用底層模型不同
它們之間底層實現方式 以及與客戶端之間通信的應用協議不一樣。
Redis 直接自己構建了 VM 機制,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
4)、value 大小
redis 最大可以達到 1GB,而 memcache 只有 1MB
5、Redis 常見的性能問題都有哪些?如何解決?
1).Master 寫內存快照,save 命令調度 rdbSave 函數,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以 Master 最好不要寫內存快照。
2).Master AOF 持久化,如果不重寫 AOF 文件,這個持久化方式對性能的影響是最小的,但是 AOF 文件會不斷增大,AOF 文件過大會影響 Master 重啟的恢復速度。Master 最好不要做任何持久化工作,包括內存快照和 AOF 日志文件,特別是不要啟用內存快照做持久化, 如果數據比較關鍵,某個 Slave 開啟 AOF 備份數據,策略為每秒同步一次。
3).Master 調用 BGREWRITEAOF 重寫 AOF 文件,AOF 在重寫的時候會占大量的 CPU 和內存資源,導致服務 load 過高,出現短暫服務暫?,F象。
4). Redis 主從復制的性能問題,為了主從復制的速度和連接的穩定性,Slave 和 Master 最好在同一個局域網內
7、redis 最適合的場景
Redis 最適合所有數據 in-momory 的場景,雖然 Redis 也提供持久化功能,但實際更多的是一個 disk-backed 的功能,跟傳統意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎 Redis 更像一個加強版的 Memcached,那么何時使用 Memcached, 何時使用 Redis 呢?
如果簡單地比較 Redis 與 Memcached 的區別,大多數都會得到以下觀點:
1、Redis 不僅僅支持簡單的 k / v 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲。
2、Redis 支持數據的備份,即 master-slave 模式的數據備份。
3、Redis 支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
(1)、會話緩存(Session Cache)
最常用的一種使用 Redis 的情景是會話緩存(session cache)。用 Redis 緩存會話比其他存儲(如 Memcached)的優勢在于:Redis 提供持久化。當維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?
幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當的使用 Redis 來緩存會話的文檔。甚至廣為人知的商業平臺 Magento 也提供 Redis 的插件。
(2)、全頁緩存(FPC)
除基本的會話 token 之外,Redis 還提供很簡便的 FPC 平臺?;氐揭恢滦詥栴},即使重啟了 Redis 實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進,類似 PHP 本地 FPC。
再次以 Magento 為例,Magento 提供一個插件來使用 Redis 作為全頁緩存后端。
此外,對 WordPress 的用戶來說,Pantheon 有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。
(3)、隊列
Reids 在內存存儲引擎領域的一大優點是提供 list 和 set 操作,這使得 Redis 能作為一個很好的消息隊列平臺來使用。Redis 作為隊列使用的操作,就類似于本地程序語言(如 Python)對 list 的 push/pop 操作。
如果你快速的在 Google 中搜索“Redis queues”,你馬上就能找到大量的開源項目,這些項目的目的就是利用 Redis 創建非常好的后端工具,以滿足各種隊列需求。例如,Celery 有一個后臺就是使用 Redis 作為 broker,你可以從這里去查看。
(4),排行榜 / 計數器
Redis 在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis 只是正好提供了這兩種數據結構。所以,我們要從排序集合中獲取到排名最靠前的 10 個用戶–我們稱之為“user_scores”,我們只需要像下面一樣執行即可:
當然,這是假定你是根據你用戶的分數做遞增的排序。如果你想返回用戶及用戶的分數,你需要這樣執行:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games 就是一個很好的例子,用 Ruby 實現的,它的排行榜就是使用 Redis 來存儲數據的,你可以在這里看到。
(5)、發布 / 訂閱
最后(但肯定不是最不重要的)是 Redis 的發布 / 訂閱功能。發布 / 訂閱的使用場景確實非常多。我已看見人們在社交網絡連接中使用,還可作為基于發布 / 訂閱的腳本觸發器,甚至用 Redis 的發布 / 訂閱功能來建立聊天系統?。ú?,這是真的,你可以去核實)。
Redis 提供的所有特性中,我感覺這個是喜歡的人最少的一個,雖然它為用戶提供如果此多功能。
看完了這篇文章,相信你對 redis 數據庫的優缺點有哪些有了一定的了解,想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!
向 AI 問一下細節