Redis:初识Redis
- Redis 介绍
- 分布式架构
- Redis特性
- 安装Redis
Redis 介绍
在官网中,是如下介绍Redis
的:
in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and message broker.
in-memory data store
:在内存中存储数据
这就有点疑问了,为什么要在内存中存储数据?直接定义一个变量不就是在内存中存储数据吗?
是的,在单主机单进程的程序中,只需要通过变量就可以存储数据,供整个进程使用。但是在分布式系统中,多台计算机同时工作,此时一个变量就无法完成多个计算机之间的数据传递了。因为进程之间具有隔离性,最常见的进程间通信方式,是通过网络。而Redis
就是基于网络,将内存中的数据给别的计算机上的进程使用的组件!
后续还提到,Redis
还可以作为数据库使用,现在市面上的数据库很多,比如MySQL
,postgreSQL
等等。但是Redis
与它们不一样,这些数据库都在硬盘中存储数据,读写的速度很慢,而Redis
在内存中读写,速度非常高。
既然这样了,为什么Redis
没有完全取代这些数据库?因为内存是非常贵的,因此Redis
的存储空间并不大,不能存储大量数据。
最常见的情况下,其实Redis
是配合其他数据库使用的,比如用MySQL
作为数据库,用Redis
做缓存。将访问频率最高的数据放到Redis
中,每次用户访问时先查找Redis
,如果没找到再去MySQL
找。
分布式架构
想让Redis
发挥出自身优势,就离不开分布式三个字,接下来介绍一下什么是分布式。
- 单机架构
对于一些简单的服务端应用,在服务器上一般都会运行一个服务端进程,使用数据库存储数据。服务进程通过网络接收用户的请求,进行业务处理,并对数据库进行读写。
但是如果用户人数多起来了,那么一台主机就无法应付,比如内存、网络、硬盘、CPU等资源都可能不足,一台主机的能力有限,此时就有两种解决思路:
- 对软件进行优化,提高软件的效率
- 引入更多的服务器,让多个服务器共同完成一个服务
一旦引入了多台服务器完成一个服务,那么整个系统就称为一个分布式系统了。要注意的是,并不是直接再买一台服务器就可以解决问题的,还要考虑如何部署服务,多个主机上的服务如何完成数据的同步等等复杂的问题,最后问题又回归到了软件层面。
- 应用数据分离架构
当有了多台主机,为了提高服务器的效率,会让一个服务器尽可能只干一种活,此时就把应用服务和数据库分离开,服务器只专门负责其中一个任务。
- 应用服务集群架构
当业务量再大起来,就要由多台服务器来处理业务逻辑,此时多个服务器共同完成一个任务,称为一个集群
。这种架构叫做应用服务集群架构。那么当用户向服务器发起请求,到底要发往哪一台主机?也就是说此时需要有一个进程来决策用户的请求给哪一个应用服务完成,此时就引入了负载均衡
,保证每个应用服务承担差不多的任务。
- 读写分离架构
当应用服务多了起来,那么整个服务要存储的数据也就多了,此时数据库系统不可能只用一台服务器处理,所以就要用多个服务器来共同完成数据存储。
之前说过,尽可能让一个服务器完成相同的任务,而数据库的任务无非就是读取与写入,此时把读写分开,就称为读写分离架构
。一个服务器负责写入数据库,另一个数据库负责读取数据,此时被写入的数据库还要实时进行数据同步,将数据传给被读的数据库。
对于多个数据库的情况,往往会选出一个头儿,称为主数据库
,其余数据库称为从数据库
,这种架构称为主从架构
。
- 冷热分离架构
在实际上,数据库中的数据只少量被访问,计算机界常说二八原则
,即20%
的数据可以处理80%
的访问量。那么就可以把这小部分数据拿到缓存中,以更快的速度访问到。
此时读取数据的逻辑就是,先读取缓存中的数据,如果缓存中有那么直接返回,如果缓存没有,再去数据库查找。而此处的缓存
,就是Redis
的应用场景之一。
- 分库架构
当业务再庞大些,就可能出现一个数据库的表就存不下一张表了,此时就要对表进行再拆分,一个数据库只存一个表,根据具体的种类去查询某一个数据库。此处每个表都用一个数据库集群来存储,遵顼之前的主从,读写分离架构。
- 微服务架构
当应用服务再复杂些,此时业务逻辑就很难维护,此时就可以把整个服务拆分为多个服务。每个服务只负责一个模块的业务开发,一个个小的服务称为微服务
,一群微服务共同完成一个大服务,这种架构称为微服务架构
。
Redis特性
市面上有很多NoSQL
类型的数据库,而Redis
可以脱颖而出,这离不开它的很多特性。
- 速度快
Redis
在内存中存储数据,访问效率非常高,官方给出的读写性能可以达到10 w/s
。另外的,Redis
使用单线程处理数据,避免了多线程的竞争问题。
- 使用非关系型数据库
Redis
使用键值对来存储数据,这与常规的数据库不同,比如MySQL
使用表来存储数据,这称为关系型数据库
,而使用键值对的形式称为非关系型数据库
。
其内部提供了大量的数据结构,比如哈希,字符串,集合等等。
- 支持脚本
Redis
支持使用编程语言Lua
处理一些逻辑,甚至通过Lua
自定义命令。
- 简单稳定
Redis
的源码非常少,在3.0
版本加入集群后,也就5w
行,相比于其它数据库,这算很少的了。而且Redis
的代码非常优雅,普通的开发人员也可以搞懂Redis
的运行机制。
- 可拓展性高
如果不满足于Redis
原生支持的几大数据类型,程序员甚至可以自己写一个数据结构在Redis
使用。
- 持久化
Redis
也不完全只能在内存中存储数据,也可以通过RDB
或者AOF
方式将数据存储到硬盘中。
如果计算机崩溃,此时内存的数据全都会丢失,这对Redis
非常不利,因此会把数据放到硬盘中进行备份。
安装Redis
本博客以Redis 5
为版本讲解,在Linux
服务器上,一般直接下载就可以获取redis 5
Ubuntu
:
sudo apt install -y redis
安装完成后,服务会自动启动,此时通过netstat
查看:
可以发现,Redis
的默认IP是127.0.0.1:6379
,也就是只能本地访问,所以还要修改一下配置文件,让其可以接收外部的网络请求。
Redis
的配置文件在/etc/redis/redis.conf
内,在文件中可以看到bind
和protected-mode
,如下:
bind 127.0.0.1 -::1
protected-mode yes
第二个参数是1保护模式,这个直接关掉就好。
修改IP地址:
bind 0.0.0.0 -::1
protected-mode no
最后重启服务:
service redis-server restart
此时可以通过redis-cli
命令进入Redis
客户端:
如果进入客户端后,输入ping
返回一个PONG
,那么就算安装成功了。