1. 程式人生 > >Redis, Memcache, Mysql區別

Redis, Memcache, Mysql區別

在使用Redis過程中,我們發現了不少Redis不同於Memcached,也不同於MySQL的特徵。
(本文主要討論Redis未啟用VM支援情況)

1. Schema

MySQL: 需事先設計
Memcached: 無需設計
Redis: 小型系統可以不用,但是如果要合理的規劃及使用Redis,需要事先進行類似如下一些規劃

  • 資料項: value儲存的內容是什麼,如使用者資料
  • Redis資料型別: 如String, List
  • 資料大小: 如100位元組
  • 記錄數: 如100萬條(決定是否需要拆分)
  • ⋯⋯

上面的規劃就是一種schema,為什麼Redis在大型專案需要事先設計schema?因為Redis伺服器有容量限制,資料容量不能超出實體記憶體大小,同時考慮到業務資料的可擴充性,記錄數會持續增多、單條記錄的內容也都會增長,因此需要提前規劃好容量,資料架構師就是通過schema來判斷當前業務的Redis是否需要“分庫分表”以滿足可擴充套件需求。

2. 容量及頻寬規劃

容量規劃
MySQL: < 硬碟大小
Memcached: < RAM
Redis: < RAM

頻寬規劃
由於Redis比MySQL快10倍以上,因此頻寬也是需要事先規劃,避免頻寬跑滿而出現瓶頸。

3. 效能規劃(QPS)

當系統讀寫出現瓶頸,通常如何解決?
MySQL
寫: 拆分到多伺服器
讀: (1) 拆分 (2) 寫少也可以通過增加Slave來解決

Memcached
讀寫: 都通過hash拆分到更多節點。

Redis:
寫:拆分
讀: (1) 拆分 (2) 寫少也可以通過增加Slave來解決

4. 可擴充套件性

MySQL: 分庫分表
Memcached: hash分佈
Redis:也可以分庫,也可以hash分佈

小結

通過以上分析,Redis在很多方面同時具備MySQL及Memcached使用特徵,在某些方面則更像MySQL。
由於Redis資料不能超過記憶體大小,一方面需要進行事先容量規劃,保證容量足夠;另外一方面設計上需要防止資料規模無限制增加,進而導致Redis不可擴充套件。
Redis需要象MySQL一樣預先設計好拆分方案。

小問題

在MySQL中,通過預先建立多表或者庫可以在業務增長時候將這些表或庫一分為二部署到更多伺服器上。
在Redis中,“分庫分表”應當如何實現?有什麼好的設計模式?

相關推薦

Redis, Memcache, Mysql區別

在使用Redis過程中,我們發現了不少Redis不同於Memcached,也不同於MySQL的特徵。 (本文主要討論Redis未啟用VM支援情況) 1. Schema MySQL: 需事先設計 Memcached: 無需設計 Redis: 小型系統可以不用,但是如果要合理的規劃及使用Redis,需要事先進

redisMySQL區別(轉載)

redis是一個記憶體資料結構的服務,它將資料儲存在記憶體中,從而實現了非常好的吞吐量和效能。它有提供了很豐富的資料結構,特別適合社交類業務的系統。但是記憶體資料庫要求伺服器的記憶體足夠才行,儲存的資料量越大消耗的記憶體也就越大,如果記憶體不夠就會導致作業系統進行記憶體到磁碟

redis,mysql,memcache區別與比較,redis兩種資料儲存持久化方式

redis與mysql比較 區別:mysql中一箇中小型的網路資料庫,比oracle和sqlserver小, 但是併發能力遠超過acess這樣的桌面資料庫;redis是一個記憶體鍵值資料庫,支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫

RedisMemcache區別總結

font 自己 持久性 類型 面具 最大的 利用 eight con 數據類型 redis數據類型豐富,支持set liset等類型 memcache支持簡單數據類型,需要客戶端自己處理復雜對象 持久性 redis支持數據落地持久化存儲 memcac

mysqlredis的一些區別

數據復制 cto http 一般來說 內存 string存儲 功能 數據持久化 target 轉載自:https://m.2cto.com/database/201701/587157.html mysql和redis的一些區別。我們知道,mysql是持久化存儲,存放在磁盤

redismysql區別和理論解釋

我們首先先說一下mysql, mysql是可以持久化儲存的關係型資料庫,功能強大,既然涉及到儲存那肯定要涉及到i/o操作(i/o操作就是輸入(Input)和輸出(Output)的意思) 訪問速度相較於非關係型資料會慢很多,為了解決這個問題,於是就出現了快取機制,把一些訪問頻次高的資料快取一部

RedisMySQL中事務的區別

1、mysql中只有使用了InnoDB引擎的資料庫或表才支援事務; 2、使用“事務”的目的是:統一管理insert,update,delete這些寫操作,以此來維護資料的完整性。 事務命令 mysql: begin #顯式地開啟一個事務 commit #提交

MySQLRedis、MongoDB區別

MySQL 關係型資料庫 mysql資料和索引都存放在硬碟中。到要使用的時候才交換到記憶體中,能夠處理遠超過記憶體總量的資料。 關係型資料庫 在不同的引擎上有不同的儲存方式 查詢語句是使用傳統的SQL語句,擁有較為成熟的體系,成熟度高 開源資料庫的份額在不斷

Redis之坑:RedisMySQL中事務的區別

Note: 該篇討論的只是Redis與MySQL中事務的區別,並不能統一代表NO-SQL與關係型SQL; 在 MySQL 中只有使用了 Innodb 資料庫引擎的資料庫或表才支援事務; 事務使用

Redis:入門篇——從儲存結構看redismysql區別

mysql:一種RDBMS(Relational Database Management System),關係型資料庫。 Redis:remote dictionary server,遠端字典伺服器,以字典結構儲存資料。 案例對比: 將一篇文章儲存到資料庫中,包括標題,內容,瀏覽量,

RedisMySQL區別

  MySQL是關係型資料庫,是持久化儲存的,查詢檢索的話,會涉及到磁碟IO操作,為了提高效能,可以使用快取技術,而memcached就是記憶體資料庫,資料儲存在記憶體中(當然也可以進行持久化儲存),可以用作快取資料庫。使用者首先去memcached查詢資料,如

如何用redis/memcacheMysql快取層?

1.首先明確是不是一定要上快取,當前架構的瓶頸在哪裡,若瓶頸真是資料庫操作上,再繼續往下看。 2.明確memcached和redis的區別,到底要使用哪個。前者終究是個快取,不可能永久儲存資料(LRU機制),支援分散式,後者除了快取的同時也支援把資料持久化到磁碟等,red

redis 優缺點 使用場景 及與Memcache區別

1. 使用redis有哪些好處? (1) 速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1) (2) 支援豐富資料型別,支援string,list,set,sorted set,hash (3)

Redis使用場景以及與memcache區別

1、Redis使用場景 (1)、會話快取(Session Cache) (2)、全頁快取(FPC) (3)、佇列 (4)、排行榜、計數器 (5)、釋出、訂閱 2、Memcache與Redis的區別有哪些? (1)、儲存方式不同,memcache把所有資料存在記憶

redismemcache區別(總結)

1、Redis和Memcache都是將資料存放在記憶體中,都是記憶體資料庫。不過memcache還可用於快取其他東西,例如圖片、視訊等等; 2、Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,hash等資料結構的儲存; 3、虛擬記憶體--Redis當實體記憶體用完時,可以將一些很久

redismysql區別

我們都知道,mysql是持久化儲存,存放在磁盤裡,檢索的話,會涉及到一定的I/O,為了解決這個問題,就出現了快取,首先,使用者訪問網站,如果未命中,就去訪問mysql,之後像記憶體和磁碟一樣,把資料複製到快取中 記憶體與磁碟的關係,磁碟放置主體資料用於持久化儲存,而記憶體則

RedisMemcache區別

總結一: 1.資料型別 redis資料型別豐富,支援set list等型別 memcache支援簡單資料型別,需要客戶端自己處理複雜物件 2.永續性 redis支援資料落地持久化儲存 memcache不支援資料持久儲存 3.分散式儲存 redis支援master-slav

Ehcache、memcacheredis三大快取區別

快取前言 簡單講就是,如果某些資源或者資料會被頻繁的使用,而這些資源或資料儲存在系統外部,比如資料庫、硬碟檔案等,那麼每次操作這些資料的時候都從資料庫或者硬碟上去獲取,速度會很慢,會造成效能問題。   一個簡單的解決方法就是:把這些資料快取到記憶體裡面,每次操

RedisMySQL的結合方案

term eid south http b2c sdn rac tro stub 方案由從易到難的順序,但不管哪種方法。都須要保證的是Reids和MySQL的數據一致性。 方案一: 程序同一時候寫Redis和MySQL 讀Redis 方案二: 程序寫MySQ

golang 操作 Redis & Mysql & RabbitMQ

requests now() ++ routing ont connect ner red lang golang 操作 Redis & Mysql & RabbitMQ Reids 安裝導入 go get github.com/garyburd/redi