有了innodb buffer pool為什么要有redis?
一、有了innodb buffer pool還要有redis的原因
1、redis數據結構更豐富
Redis支持多種復雜的數據結構(如哈希、鏈表等),并且它支持復雜的操作和查詢,比如可以對哈希對象進行增刪改查操作,而InnoDB buffer pool只能緩存表數據和索引,不支持多種不同的數據結構和操作。
2、redis支持更多的數據類型
除了表數據之外,InnoDB buffer pool無法緩存許多其他類型的數據,而Redis可以緩存多種類型的數據,比如完整的數據結構,甚至包括文件和任何二進制數據。
3、redis有更高的性能
因為Redis是一個容納在內存中的數據結構服務器,所以它比InnoDB buffer pool更快。Redis能夠執行復雜的操作,并且在處理大型數據集時表現得更加出色。
4、redis有更大的內存容量
Redis需要的內存大小遠高于InnoDB buffer pool,但它的內存控制更靈活而且容量也更大。如果要緩存的數據量很大,Redis需要的內存超過物理內存的話,還可以采用分布式架構的方式來進行橫向擴展。
二、innodb buffer pool介紹
1、簡介
innodb buffer pool是MySQL的內存緩存技術之一,用于緩存熱數據;它可以幫助減少磁盤I/O并提高查詢性能。InnoDB buffer pool不僅緩存了表數據,還緩存了索引、鎖、MVCC和插入緩沖等數據;它主要適用于事務性較高的場景,如交易系統、OLTP等。
2、緩沖池Buffer Pool的作用
InnoDB 存儲引擎是基于磁盤存儲的。以頁為單位存儲數據。我們進行的增刪改查操作本質上都是在操作數據頁(包括讀頁、寫頁、創建新頁)。由于CPU速度和磁盤速度之間的鴻溝,基于磁盤的數據庫通常使用緩沖池來提高數據庫的整體性能。Buffer Pool 就是把磁盤上的頁,緩存到內存中,用于降低與磁盤直接進行IO的成本。
InnoDB 引擎在處理客戶端請求時,當需要訪問某個頁的數據時,就會把完整的頁的數據全部加載到內存中。之后就可以對頁進行讀寫訪問了。操作完頁之后并不會立即釋放掉其內存空間,而是將其緩存起來,將來有請求再次訪問該頁數據時,就可以省去磁盤IO的開銷了。
3、Buffer Pool緩存什么
MySQL啟動時, InnoDB 引擎向操作系統申請一塊連續的內存空間,然后按照頁的大小(默認16KB)劃分出一個個空頁,當磁盤上的頁緩存到內存的 Buffer Pool 中會對空頁進行填充。
緩沖池中的數據頁類型有:數據頁、索引頁、插入緩沖(insert buffer)、自適應哈希索引、鎖信息、數據字典信息等。數據頁和索引頁是緩沖池中的主要內容。
4、查看設置緩沖池大小
InnoDB 引擎通過?innodb_buffer_pool_size?變量查看緩沖池的大小。一般建議設置成可用物理內存的60%~80%。下面是代碼示例:
mysql > show variables like 'innodb_buffer_pool_size'
通過?set global innodb_buffer_pool_size?可以修改緩沖池大小。
三、redis介紹
1、定義
redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
redis的官網地址,非常好記,是redis.io。(域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領地),Vmware在資助著redis項目的開發和維護。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。
2、作者
redis的作者,叫Salvatore Sanfilippo,來自意大利的西西里島,居住在卡塔尼亞。目前供職于Pivotal公司。他使用的網名是antirez。
3、常用命令
就DB來說,Redis成績已經很驚人了,且不說memcachedb和Tokyo Cabinet之流,就說原版的memcached,速度似乎也只能達到這個級別。Redis根本是使用內存存儲,持久化的關鍵是這三條指令:SAVE BGSAVE LASTSAVE …… 當接收到SAVE指令的時候,Redis就會dump數據到一個文件里面。值得一說的是它的少數功能:存儲列表和集合,這是它與mc之流相比更有競爭力的地方。不介紹mc里面已經有的內容,只列出特殊的:
TYPE key:用來獲取某key的類型KEYS pattern:匹配所有符合模式的key,比如KEYS * 就列出所有的key了,當然,復雜度O(n)RANDOMKEY:返回隨機的一個keyRENAME oldkeynewkey:key也可以改名RPUSH key string:將某個值加入到一個key列表末尾LPUSH key string:將某個值加入到一個key列表頭部LLEN key:列表長度LRANGE key start end:返回列表中某個范圍的值,相當于mysql里面的分頁查詢那樣LTRIM key start end:只保留列表中某個范圍的值LINDEX key index:獲取列表中特定索引號的值,要注意是O(n)復雜度LSET key index value:設置列表中某個位置的值延伸閱讀1:redis的文件格式
redis使用了兩種文件格式:全量數據和增量請求。全量數據格式是把內存中的數據寫入磁盤,便于下次讀取文件進行加載;增量請求文件則是把內存中的數據序列化為操作請求,用于讀取文件進行replay得到數據,序列化的操作包括SET、RPUSH、SADD、ZADD。

猜你喜歡LIKE
相關推薦HOT
更多>>
mysql怎么查看連接池是否已滿?
一、mysql怎么查看連接池是否已滿1.查看連接數配置(MySQL服務器允許的最大連接數16384)show variables like ‘%max_connections%’2.查看當前...詳情>>
2023-10-17 21:20:19
什么是職場情商,如何提高?
什么是情商?情商是一個 20 世紀 90 年代作為學術話題出現的概念,并迅速成為商業心理學和職場動態研究的重要組成部分。它通常被稱為 EQ(情商...詳情>>
2023-10-17 20:16:30
vector, list, map等容器使用場合是什么?
一、vector, list, map等容器使用場合vector適用于對象簡單,變化較小,并且頻繁隨機訪問的場景。list適用經常進行插入和刪除并且不經常隨機訪...詳情>>
2023-10-17 19:45:03
數據挖掘中涉及的關聯規則在實際生活中的應用有哪些?
一、數據挖掘中涉及的關聯規則在實際生活中的應用關于關聯規則分析,這篇文章可以認真學習一下,講的比較全面,關聯規則分析還在零售、快消、電...詳情>>
2023-10-17 18:40:06熱門推薦
sql server2012r2所在服務器做端口限制,需要開放什么端口才能繼續訪問數據庫?
沸Oracle有什么優勢和劣勢?
熱數據庫聚集索引非聚集索引實現上有哪些區別?
熱數據庫(如oracle、mysql)及編程語言(php、python、perl、lisp)的區別?
新CSS 隱藏頁面元素有哪些方法?
除了cx_Oracle,python還可以通過什么方式訪問Oracle數據庫?
SQL開啟事務處理的語句 START TRANSACTION 和BEGIN TRAN的區別?
Android適配你需要學習哪些?
開發web應用,好的開發流程是怎么樣的?
為什么說Gradle是Android進階繞不去的坎?
mysql怎么查看連接池是否已滿?
WHERE中有很多IN判斷怎么提速?
軟件開發要遵循哪些事項?
有了innodb buffer pool為什么要有redis?
技術干貨






