文章目录
🙋♂️ 作者:@Ggggggtm 🙋♂️
👀 专栏:Redis 👀
💥 标题: 一文带你了解Redis是什么和Redis能做什么 💥
❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️
一、初识redis
Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis 中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis 可以满足很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能非常惊人。
1、1 为什么用redis存储数据
在内存中存储数据。我们想到:在内存中存储数据开个变量不就行了吗?为什么还需Redis,然后再用redis在内存中存储数据呢?
Redis是用在分布式系统中。如果只是单机程序,我们肯定是优先选择使用变量在内存中存储数据的。如果不是单机呢?多台机器的数据交换、数据共享怎么做呢?我们知道进程是具有独立性的。不同计算机之间数据肯定是不共享的,那我们只能利用进行通信的方式实现数据交换和通信。常见单机上的进程通信:管道、共享内存、消息队列、信号量等等。常见的多机的进程通信:网络通信。
网络通信的速度是很不理想的。为了解决多机之间的数据交互的速度,Redis就此诞生了。Redis就是基于网络的,但是Redis可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用。
1、2 redis 与 MySQL数据库
提到数据存储,我们第一想到的是数据库(MySQL)。但是MySQL最大的问题在于,数据是存储在磁盘上的,访问速度比较慢。随着互联网发展,在数据爆炸式增长的同时,我们对速度的要求也越来越高。举个很简单的例子:我们在网购时,搜索了一款商品,结果购物软件过了一分钟才把商品数据相应给你,你能接受的了吗?
Redis 也可以作为数据库使用,最主要的是它还很快!但是Redis 与 MySQL 相比,有一个很明显的劣势就是存储的数据量很小,是相当有限的!
Redis的初心,最初就是用来作为一个"消息中间件"的(消息队列)。主要应用于分布式系统下的生产者消费者模型。当前很少会直接使用Redis 作为消息中间件(业界有更多更专业的消息中间件使用),更多的还是用在数据库和缓存。
现在我们需要一个访问速度又快,又要存储数据够多,那么应该怎么半呢?很简单,就是把 Redis 和 MySQL 结合起来使用嘛!其中很关键的一点就是采用了 “二八原则”。所谓二八原则就是20%的热点数据能够满足80%的访问需求。那么把这20%的数据存储在Redis中就可满足了80%的快速访问。说起来很简单,实际上大大提升了系统的复杂程度。而且如果数据发生修改,还涉及到 Redis 和 MySQL 之间的数据同步问题。
二、浅谈分布式系统
2、1 什么是分布式呢
系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别⼯作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活中的例子:为了更好的满足现实需要,⼀个在同⼀个办公场地的⼯作小组被分散到多个城市的不同⼯作场地 中进⾏远程配合⼯作完成⽬标。跨主机之间的模块之间的通信基本要借助⽹络⽀撑完成。
还有一个集群的概念。被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如多个MySQL工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。生活例子类比:为了解决军队攻克防守坚固的大城市的作战目标,指挥部将大批炮兵部队集中起来形成一个炮兵打击集群。
我们发现集群和分布式很相似。分布式和集群又有什么区别呢?通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务目标。
下面我们来看一下分布式系统的演化过程。
2、2 单机架构
初期,我们需要利用我们精干的技术团队,快速将业务系统投入市场进行检验,并且可以迅速响应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。
所谓单机架构,就是应用服务和数据库服务共用一台服务器。出现的原因也很见简单,访问量比较小,单机足以满足需求。具体如下如: