【Redis入门】从Redis的历史和运行聊起...

732 阅读5分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

👉速看

  • 最近跟着B站视频看完了redis的入门,对于redis的纯理论知识有了初步的了解,本专栏会先更新入门篇,之后还会有项目实战篇(应用在小程序上或者其他的项目上边),欢迎大家关注本专栏一起学习!

💫参照课程大纲

image.png

本专栏将结合尚硅谷和狂神说两个课程,基本涵盖了包括但不限于图中的知识点。

NoSQL

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。

  • 不遵循SQL标准。
  • 不支持ACID。
  • 远超于SQL的性能。

适用场景

  • 对数据高并发的读写
  • 海量数据的读写
  • 对数据高可扩展性的

不适用场景

  • 需要事务支持
  • 基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
  • 用不着sql的和用了sql也不行的情况,请考虑用NoSql

概述

Redis(Remote Dictionary Server ),即远程字典服务 ! 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

  • redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

用途

1、内存存储、持久化,内存中是断电即失、所以说持久化很重要(rdb、aof) 2、效率高,可以用于高速缓存 3、发布订阅系统 4、地图信息分析 5、计时器、计数器(浏览量!) image.png

特性

1、多样的数据类型
2、持久化
3、集群
4、事务

历史发展

一开始数据量很少,只需要单表处理读和写

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那个时候,更多的去使用静态网页 Html ~ 服务器根本没有太大的压力!
思考一下,这种情况下:整个网站的瓶颈是什么?
1、数据量如果太大、一个机器放不下了!
2、数据的索引 (B+ Tree),一个机器内存也放不下
3、访问量(读写混合),一个服务器承受不了

Memcached(缓存)+ MySQL + 垂直拆分 (读写分离)

可以一台服务器负责写,如何同步给前台服务器去读?

缓存也解决读的问题

网站80%的情况都是在读,每次都要去查询数据库的话就十分的麻烦!所以说我们希望减轻数据的压力,我们可以使用缓存来保证效率!

发展过程: 优化数据结构和索引--> 文件缓存(IO)---> Memcached(当时最热门的技术!)

分库分表,MySQL集群 + 水平拆分

阅读量也不是实时写到mysql的,是先到缓存,再一定时间统一写进去

早些年MyISAM: 表锁,十分影响效率!高并发下就会出现严重的锁问题
转战Innodb:行锁
慢慢的就开始使用分库分表来解决写的压力! MySQL 在哪个年代推出了表分区!这个并没有多少公司使用!
MySQL 的集群,很好满足那个年代的所有需求!

Linux版安装

1、官网下载安装包!
2、解压Redis的安装包到你要的目录!

tar -zxvf

3、基本环境安装

yum install gcc-c++

4、进入解压后的目录

make

4、进入src目录

make install

  • 此处如果有问题的话可以自行搜索相关安装教程,根据自己需求下载window版或者linux版

Redis运行

先设置daemonize no改成yes,开启后台启动

修改redis.conf(128行)文件将里面的daemonize no 改成yes,让服务在后台启动

protected-mode 设置成no

默认是设置成yes的, 防止了远程访问,在redis3.2.3版本后

找到# requirepass foobared

删除前面的注释符号#,并把foobared修改成自己的密码
或者另起一行 requirepass 自己的密码

  • 一定要设置密码阿,之前被黑客通过redis黑进服务器了,植入了挖抗病毒麻了🙊(详情见沸点)

要注意是在启动server的时候选择conf!!!!!

./redis-server ../redis.conf

此处要选择conf来启动

./redis-cli -p 端口号

服务器连接

进入后 auth 你设置的密码

验证通过后才能成功操作

Redis关闭与退出

SHUTDOWN

  • 然后exit
    image.png

性能分析

redis-benchmark 是一个压力测试工具! 官方自带的性能测试工具! redis-benchmark 命令参数! image.png 我们来简单测试下: image.png 如何查看这些分析呢? image.png

基础知识

默认16个数据库,可以用select切换

image.png Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据 机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!
Redis 是C 语言写的,官方提供的数据为 100000+ 的QPS,完全不比同样是使用 key-vale的Memecache差!

Redis 为什么单线程还这么快?

1、误区1:高性能的服务器一定是多线程的?
2、误区2:多线程(CPU上下文会切换!)一定比单线程效率高!
核心:redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作!!!) 对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

💠下篇预告

  • 下篇我们将介绍redis中的常见数据类型和相关的常用命令,之后还会解析一下redis的配置文件等相关知识。

参考

  • 尚硅谷Redis6视频
  • 狂神说Redis视频