有了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:30vector, 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?