自学内容网 自学内容网

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还可以作为数据库使用,现在市面上的数据库很多,比如MySQLpostgreSQL等等。但是Redis与它们不一样,这些数据库都在硬盘中存储数据,读写的速度很慢,而Redis在内存中读写,速度非常高。

既然这样了,为什么Redis没有完全取代这些数据库?因为内存是非常贵的,因此Redis的存储空间并不大,不能存储大量数据。

最常见的情况下,其实Redis是配合其他数据库使用的,比如用MySQL作为数据库,用Redis做缓存。将访问频率最高的数据放到Redis中,每次用户访问时先查找Redis,如果没找到再去MySQL找。


分布式架构

想让Redis发挥出自身优势,就离不开分布式三个字,接下来介绍一下什么是分布式。

  • 单机架构

在这里插入图片描述

对于一些简单的服务端应用,在服务器上一般都会运行一个服务端进程,使用数据库存储数据。服务进程通过网络接收用户的请求,进行业务处理,并对数据库进行读写。

但是如果用户人数多起来了,那么一台主机就无法应付,比如内存、网络、硬盘、CPU等资源都可能不足,一台主机的能力有限,此时就有两种解决思路:

  1. 对软件进行优化,提高软件的效率
  2. 引入更多的服务器,让多个服务器共同完成一个服务

一旦引入了多台服务器完成一个服务,那么整个系统就称为一个分布式系统了。要注意的是,并不是直接再买一台服务器就可以解决问题的,还要考虑如何部署服务,多个主机上的服务如何完成数据的同步等等复杂的问题,最后问题又回归到了软件层面。

  • 应用数据分离架构

在这里插入图片描述

当有了多台主机,为了提高服务器的效率,会让一个服务器尽可能只干一种活,此时就把应用服务和数据库分离开,服务器只专门负责其中一个任务。

  • 应用服务集群架构

在这里插入图片描述

当业务量再大起来,就要由多台服务器来处理业务逻辑,此时多个服务器共同完成一个任务,称为一个集群。这种架构叫做应用服务集群架构。那么当用户向服务器发起请求,到底要发往哪一台主机?也就是说此时需要有一个进程来决策用户的请求给哪一个应用服务完成,此时就引入了负载均衡,保证每个应用服务承担差不多的任务。

  • 读写分离架构

在这里插入图片描述

当应用服务多了起来,那么整个服务要存储的数据也就多了,此时数据库系统不可能只用一台服务器处理,所以就要用多个服务器来共同完成数据存储。

之前说过,尽可能让一个服务器完成相同的任务,而数据库的任务无非就是读取与写入,此时把读写分开,就称为读写分离架构。一个服务器负责写入数据库,另一个数据库负责读取数据,此时被写入的数据库还要实时进行数据同步,将数据传给被读的数据库。

对于多个数据库的情况,往往会选出一个头儿,称为主数据库,其余数据库称为从数据库,这种架构称为主从架构

  • 冷热分离架构

在这里插入图片描述

在实际上,数据库中的数据只少量被访问,计算机界常说二八原则,即20%的数据可以处理80%的访问量。那么就可以把这小部分数据拿到缓存中,以更快的速度访问到。

此时读取数据的逻辑就是,先读取缓存中的数据,如果缓存中有那么直接返回,如果缓存没有,再去数据库查找。而此处的缓存,就是Redis的应用场景之一。

  • 分库架构

在这里插入图片描述

当业务再庞大些,就可能出现一个数据库的表就存不下一张表了,此时就要对表进行再拆分,一个数据库只存一个表,根据具体的种类去查询某一个数据库。此处每个表都用一个数据库集群来存储,遵顼之前的主从,读写分离架构。

  • 微服务架构

在这里插入图片描述

当应用服务再复杂些,此时业务逻辑就很难维护,此时就可以把整个服务拆分为多个服务。每个服务只负责一个模块的业务开发,一个个小的服务称为微服务,一群微服务共同完成一个大服务,这种架构称为微服务架构


Redis特性

市面上有很多NoSQL类型的数据库,而Redis可以脱颖而出,这离不开它的很多特性。

  1. 速度快

Redis在内存中存储数据,访问效率非常高,官方给出的读写性能可以达到10 w/s。另外的,Redis使用单线程处理数据,避免了多线程的竞争问题。

  1. 使用非关系型数据库

Redis使用键值对来存储数据,这与常规的数据库不同,比如MySQL使用表来存储数据,这称为关系型数据库,而使用键值对的形式称为非关系型数据库

其内部提供了大量的数据结构,比如哈希,字符串,集合等等。

  1. 支持脚本

Redis支持使用编程语言Lua处理一些逻辑,甚至通过Lua自定义命令。

  1. 简单稳定

Redis的源码非常少,在3.0版本加入集群后,也就5w行,相比于其它数据库,这算很少的了。而且Redis的代码非常优雅,普通的开发人员也可以搞懂Redis的运行机制。

  1. 可拓展性高

如果不满足于Redis原生支持的几大数据类型,程序员甚至可以自己写一个数据结构在Redis使用。

  1. 持久化

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内,在文件中可以看到bindprotected-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,那么就算安装成功了。



原文地址:https://blog.csdn.net/fsdfafsdsd/article/details/142683442

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!