开头说明:作为自己学习笔记,在这里简单记一下
大纲:
一、区别汇总
二、针对每个点,分别说明
一、区别点对比图如下:
二、针对以上每个点,展开说明
1、关系型数据库和非关系型数据库
2、Redis为什么会比MySQL快?
①Redis是基于内存存储的,MySQL是基于磁盘存储的
②Redis存储的是key-value格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶。Redis会比MySQL快一点点。
③MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。
④Redis是单线程的多路复用IO,单线程避免了线程切换的开销,而多路复用IO避免了IO等待的开销,在多核处理器下提高处理器的使用效率可以对数据进行分区,然后每个处理器处理不同的数据。
3、mysql底层数据结构选型
3-1、B 树和 B+树区别
4、Mysql的运行机制
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
5、Redis:key-value示例
key部分永远都是字符串
常用的五种value的数据类型
string:简单动态字符串
hash:哈希表
list:列表
set:无序集合
sorted_set/zset:有序集合
6、Redis为什么是单线程的?
Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。
7、Redis常见的使用场景
限时业务的运用(限时的优惠活动信息、手机验证码,限流等业务场景)
计数器
排行榜
分布式锁
队列(秒杀活动)
8、Redis默认过期时间
默认永久不过期。
但是一般情况是当你配置中开启了超出最大内存限制就写磁盘的话,那么这些没有设置过期时间的key可能会被写到磁盘上。
假如没设置。那么redis将使用LRU机制(最近最久未使用法),即将内存中的老数据删除,并写入新数据。