Redis工具深入了解
1.引言与感想
2024学习了很多计算机知识,有C、数据结构、C++、Linux系统编程和网络编程、数据库、高阶数据结构、算法,虽然也学习到了很多让自己从计算机小白到掌握一点计算机知识,但是对于一个程序猿来说是远远不够的,我们应该不断学习新的前沿知识不至于让新型技术把自己淘汰,2025新的一年开始,就从Redis开始继续在CSDN记录自己学习到的知识。
2.Redis工具了解
Redis是一个在内存中存储数据的组件。谈到内存中存储数据可能会想到直接在内存定义一个变量不就是在内存中存储数据了吗?那为什么不直接这样而是搞一个Redis绕一个圈才在内存中存数据。这里我们要明确一点Redis是在分布式系统(分布式系统是一个由多个独立的计算机节点或服务器组成的系统,这些节点之间共享资源、数据和任务,并通过通信和协调来完成特定的功能。)中,才能发挥威力,如果只是单机程序,直接通过变量存储数据的方式,是比使用Redis更优的选择。 但是我们现在很多系统都是分布式系统,在分布式系统中我们要想能够让多个服务器都能共享同一份数据,又想让这个数据在内存里,那么此时我们选择Redis是一个可选的选择。
同样是在内存中存数据,存在变量中往往是更快速更方便的选择,但是如果在分布式系统里,直接定义变量是不行的。因为你定义的变量是在你当前服务器的进程中内存一块空间,我们学过系统知道进程具有独立性,让进程之间通信是不太方便的。换句话说进程A没法直接去读进程B内存中的数据,在这样前提之下,如果我们是一个分布式系统必定涉及到多个进程,这多个进程是在不同的主机上的,那么此时你想直接访问其他进程里内存中的变量,这件事就变得不那么简单了。
所以Redis就是针对上述的问题做了一个封装。让进程间互相通信其中最主流的方案就是网络,网络这种绕过进程间通信的方式,既可以让同一个主机上的不同进程间互相通信,而且还能跨主机让不同进程互相通信。因此Redis就是基于网络基础之上可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。
总结一下:Redis是一个在内存中存储数据的组件,这个组件主要是为了给分布式系统使用的,分布式系统势必涉及到多个进程甚至是多个主机的多个进程,此时我们需要让这些进程之间通过网络进行通信,从而让我们任何一个应用程序可以访问到Redis里面的变量,让这个数据在分布式系统中达到共享使用的效果。
Redis使用非常广泛,常被用做于数据库,缓存,流式引擎,消息中间件。
说到数据库,我们常用的是MySQL,虽然MySQL可以在分布式系统中帮我们去存数据,但是它访问数据非常慢!! Redis也可以当作数据库来使用,它相对于MySQL速度就快了很多。为什么快很多呢?Redis它是用内存存数据,而MySQL存数据是在磁盘上。但是Redis和MySQL相比最大的劣势,存储空间是有限的!! 那有没有空间又大速度又快的?典型的方案,可以把Redis和MySQL结合起来使用。就是下面我们说的缓存。
将Redis作为MySQL的cache使用,这个意思就是把我们经常访问的热点数据用Redis存储,然后把我们全量数据都用MySQL存储。当前用户访问的是常用的热点数据直接读Redis这不就快了吗,同时全量数据还用MySQL存这不就大了吗。所以把这个两个东西结合在一起使用我们就可以做到又大又快!此时Redis起到的角色就是cache缓存。如果使用这种方案,系统的复杂程度大大提升,而且如果数据发生修改还涉及到Redis和MySQL之间的数据同步问题。
Redis的初心,最初就是用来作为一个"消息中间件"的(消息队列),消息队列是实现一个分布式系统下的生产者和消费者模型。但是随着发展发现把Redis作为一个数据库和缓存更香。当前很少直接使用Redis作为"消息中间件",因为我们有其他更多更专业消息中间件选择。
上面我们一直在说一个词"分布式",为了更好理解Redis我们必须要认识一下分布式系统。
2.分布式系统了解
在正式引入架构演进之前,为避免对架构中的概念完全不了解导致低效沟通,优先对其中一些比较重要的概念做前置介绍:
应用(Application)/ 系统(System)
为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比:为了完成一项任务,而搭建的由一个人或者一群相互配的人组成的团队。
一个应用/系统,就是一个/组服务器程序