【Redis】不知彼阶段Redis认知

发布时间 2024-01-03 10:51:15作者: 陆陆无为而治者

最近看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似乎有很多内容。我想到的只是冰山一角。先把我想到的学一学,再把我没想到的学一学。