【Redis】不知彼阶段Redis认知
最近看Java,看高并发。发现在使用的时候,基本上逃不开一个知识——Redis。
最开始的时候,我对Redis不以为然,觉得只需要稍微学习,即可。但粗看一些学习的PPT,发现它的水很深,我只是在海边没过脚踝的地方走了走。现在,我来总结一下我的认知。
已知
- 数据库分为关系型数据库(SQL)、非关系型数据库(NoSQL)。
- 学编程入门的时候,我们已知的三大数据库SQL Server、MySql 和Oracle就是关系型数据库。具体使用什么数据库,看实际项目,但应用起来大差不差,不必纠结。
- 关系型数据库的存储方式,可以理解为,每条数据存在一个表格中;非关系型数据库,就是一个根据关键字+ 内容存储起来。
我对Redis的认识
先说一说,我对Redis的基本特性的认识。
- Redis是一种非关系型数据库(NoSql).
- Redis使用内存存储,读写效率更高,重启服务器以后,数据消失;关系型数据库存储在磁盘中,读写效率更低,重启服务器后,数据仍然存在。
Redis的使用场景
- 因为高并发。很多时候,一个网站,一个服务,80%以上的操作都是读。如果访问基数足够大,那必然会出现同时多人访问(高并发)的情况,这时候,我们就希望有更高的读取效率。众所周知,内存的读取数据高于磁盘。非关系型数据库的读写速度是高于关系型数据库的(这也是为什么大数据技术都使用非关系型数据库的原因之一)。所以,我们把需要经常访问的数据存放与Redis数据库中,减少数据库服务器(网站对应的关系型数据库中)的压力,也增加了数据的读取效率。
我认为Redis可能需要学习到什么
基于对Redis的基本认识,我可以想到redis需要学习的内容。一些学数据库时都能想到的内容。
- 关系型数据库和非关系型数据库的区别;
- 如何在不同系统(如Linux)系统,安装、配置和运行Redis;
- Redis的基础数据类型;
- Redis的数据操作命令(增删改查命令);
- 在框架中(按目前的知识架构,会以SpringBoot为例)使用Redis;
接着,想到如果数据量足够大,内存也有不够用的时候。
- 所以,一定有保存策略。(如果内存不够了,会把哪个内存踢出?最早建立的,使用频率最近的,最近最久未使用的?)
在分布式服务器上,可能由于某些原因,需要重启服务器。如果不希望每次重启服务器这些缓存的Redis数据都消失了,我们需要怎么做?
- 持久后
有一些特殊情况,会频繁的访问服务器和数据库服务器。我们如果能够减缓这些情况,要怎么做?
- 穿透
- 击穿
- 雪崩
有没有出现缓存的数据和数据库的数据不一致的情况?应该要怎么解决?
- 额……我也不知道专有名词是什么,有什么解决方案。
仔细一想,Redis似乎有很多内容。我想到的只是冰山一角。先把我想到的学一学,再把我没想到的学一学。
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。