文章目录
🙊 前言:本文章为瑞_系列专栏之《Redis》的基础篇的初识Redis章节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系列专栏主要是针对该课程进行笔记总结和拓展,文中的部分原理及图解等也是来源于黑马提供的资料,特此注明。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!
关于 VMware 虚拟机安装 Linux 的教程可以参考《瑞_VMware虚拟机安装Linux纯净版(含卸载,图文超详细)》
1 初识Redis
Redis是一种键值型的NoSql数据库,这里有两个关键字:
- 键值型
- NoSql
其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:
NoSql是相对于传统关系型数据库(MySQL)而言,有很大差异的一种数据库。
瑞:NoSQL数据库的代价就是不能处理复杂业务,复杂业务还是得用传统关系型数据库。SQL和NoSQL是互为补充的关系,并不是要取代对方。编程没有对错之分,只有在不同的业务场景下,适合和更适合的区别。
1.1 认识NoSQL
NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
1.1.1 结构化与非结构化
传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束:
瑞:表的结构往往不建议修改,否则在开发过程中很容易导致数据出现不可预测的意外,如锁表、数据不可用等,造成的影响非常大。
而NoSql则对数据库格式没有严格约束,往往形式松散,自由。
瑞:没有严格约束不代表没有约束,如Redis键值型数据库中常见的数据类型有:键值型(Redis)、文档型(MongoDB)、列类型(HBase)、图格式Graph(Neo4j)等。
1.1.2 关联和非关联
传统数据库的表与表之间往往存在关联,例如外键,如下有用户表、商品表、订单表,在订单表中的user_id
和item_id
就通过外键和用户表、商品表建立起了关系
而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合:
{
id: 1,
name: "张三",
orders: [
{
id: 1,
item: {
id: 10, title: "荣耀6", price: 4999
}
},
{
id: 2,
item: {
id: 20, title: "小米11", price: 3999
}
}
]
}
瑞:如上Json文档嵌套的形式记录数据,此处要维护“张三”的订单与商品“荣耀”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。所以还是建议用业务来维护关联关系,即只需要存储相应的主键而不是整个商品信息数据
1.1.3 查询方式
传统关系型数据库会基于Sql语句做查询,语法有统一标准;
关系型:SQL:SELECT id,name FEOM tb_user WHERE id = 1
而不同的非关系数据库查询语法差异极大,五花八门各种各样。
非关系型
Redis:get user:1
MongoDB:db.users.find({_id:1})
elasticsearch:GET http://localhost:9200/users/1
1.1.4 事务
传统关系型数据库能满足事务ACID的原则。
而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。
瑞:
- A:原子性(Atomicity)不可再分割
- C:一致性(Consistency) 要么都成功,要么都失败
- I:持久性(lsolation)事务一旦提交则不可逆,被持久化到数据库中
- D:隔离性(Durability)多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰
1.1.5 总结
SQL | NoSQL | |
---|---|---|
数据结构 | 结构化 | 非结构化 |
数据关联 | 关联的 | 无关联的 |
查询方式 | SQL查询 | 非SQL |
事务特性 | ACID | BASE |
存储方式 | 磁盘 | 内存 |
拓展性 | 垂直 | 水平 |
使用场景 | 1)数据结构固定 2)相关业务对数据安全性、一致性要求较高 | 1)数据结构不固定 2)对一致性、安全性要求不高 3)对性能要求 |
-
存储方式
- 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
- 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能非常高
-
扩展性
- 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。
- 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
- 关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦
瑞:非关系型数据库的查询效率高、天然支持分布式设计。
所以如果数据结果不太稳定,经常变更,业务对安全性、一致性要求不是很高的情况下,就适合使用非关系型数据库。
而如果数据结构相对固定,业务对安全性、一致性要求高,则建议使用关系型数据库。
实际开发中,要根据业务需求灵活选择,当然两者也是可以结合使用的。
1.2 认识Redis
1.2.1 介绍
Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。
瑞:词典服务器,是因为Redis是键值型的非关系型数据库,根据key找value,就类似于词典的用法。
作者:Antirez
Redis的官方网站地址:https://redis.io/
1.2.2 特征
- 键值(key-value)型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)
- 支持数据持久化
- 支持主从集群、分片集群
- 支持多语言客户端
瑞:Redis在6以上的版本中的多线程,指的是对网络请求处理是多线程处理,而核心命令的执行仍然是单线程的。虽然Redis是单线程的,但是效率很高,毕竟Redis是基于内存而MySQL是基于磁盘,这个效率差异实在太大了
1.2.3 优势
- 性能极高:Redis能读的速度是110000次/s,写的速度是81000次/s。
- 丰富的数据类型:Redis支持二进制案例的Strings、Lists、 Hashes、Sets及Ordered Sets数据类型操作。
- 原子性:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性-:Redis还支持 publish/subscribe,通知, key过期等等特性。
1.3 安装Redis ★★★
Redis的官方网站地址:https://redis.io/
1.3.1 Linux安装Redis(.tar.gz)
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包,而是微软编译的Windows版本。因此本系列是基于Linux系统安装Redis
瑞:Redis的原作者根本就没有编写 Windows 版的 Redis ,所以学习的时候还是要以官方版的为准
瑞:关于 VMware 虚拟机安装 Linux 的教程可以参考《瑞_VMware虚拟机安装Linux纯净版(含卸载,图文超详细)》
1.3.1.0 资源准备
redis-7.2.4.tar.gz
的官方下载地址⬇️
https://redis.io/download/
瑞:随着时间的推移,官方最新版可能不是7.2.4。博主使用的是
redis-6.2.6.tar.gz
,某度网盘需要自取
链接:https://pan.baidu.com/s/128hTas10Dc7NxXpfi-hdFw?pwd=8n6a
提取码:8n6a
为了方便操作Linux,建议使用一些远程连接工具,博主使用的是MobaXterm,当然像XShell之类的也行
瑞:MobaXterm的官方下载链接:https://mobaxterm.mobatek.net/download.html
选择免费版(Free)的下载即可,直接下载的就是exe可执行文件,双击就可以直接使用
MobaXterm与虚拟机建立seesion
1️⃣ 在VM中输入ip addr
指令查看虚拟机IP地址(博主为192.168.13.128)
2️⃣ 打开MobaXterm选择Session,新对话框中选择SSH,然后将虚拟机IP输入,最后点击OK即可
1.3.1.1 安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖
将以下命令复制到远程连接工具的命令窗口中(鼠标右键粘贴),回车执行
yum install -y gcc tcl
看到“完毕”则安装成功,如下图所示
1.3.1.2 上传安装包并解压
1️⃣ 将资源准备提供的Redis安装包(redis-6.2.6.tar.gz
)上传到虚拟机的任意目录(建议放在/usr/local/src
目录,这个目录下一般用于存放安装文件)
如果使用MobaXterm,直接在windows将压缩包使用鼠标拖拽过来即可
2️⃣ 在MobaXterm中执行命令cd /usr/local/src/
切换控制台工作路径,然后执行tar -zxvf redis-6.2.6.tar.gz
进行解压
3️⃣ 执行cd redis-6.2.6
命令进入redis目录
4️⃣ 执行make && make install
命令进行运行编译(此过程较长)
5️⃣ 默认的安装路径是在 /usr/local/bin
目录下,执行ll /usr/local/bin/
命令,可以看到如下图所示,则安装成功
该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:
- redis-cli:是redis提供的命令行客户端
- redis-server:是redis的服务端启动脚本
- redis-sentinel:是redis的哨兵启动脚本
1.3.1.4 Linux 启动 Redis
Linux中redis的启动方式有很多种,例如:
1️⃣ 默认启动
2️⃣ 指定配置启动
3️⃣ 开机自启
1.3.1.4.1 默认启动
安装完成后,在任意目录输入redis-server
命令即可启动Redis
瑞:默认启动属于
前台启动
,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C
则Redis停止。所以不推荐使用。
1.3.1.4.2 指定配置启动
如果要让Redis以后台
方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/src/redis-6.2.6
),名字叫redis.conf
瑞:凡是涉及配置文件修改的操作,建议在修改前进行备份,这是一个良好的习惯
执行cp /usr/local/src/redis-6.2.6/redis.conf /usr/local/src/redis-6.2.6/redis.conf.bck
命令将这个配置文件备份
然后修改redis.conf文件中的一些配置
# 监听的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis必须输入密码
requirepass 123456
如果是使用MobaXterm,选择该配置文件,双击即可编辑,支持ctrl + F
查找,修改完之后一定要记得保存(第一次会有弹窗,选择Yes to all即可),如果已经启动了Redis则需要重启Redis服务,配置才能生效
Redis的其它常见配置:
# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .
# 数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名,路径为工作目录路径
logfile "redis.log"
瑞:修改了配置文件后,如果已经启动了Redis,则需要重启Redis服务,配置才能生效
启动Redis
# 进入redis安装目录
cd /usr/local/src/redis-6.2.6
# 启动
redis-server redis.conf
通过ps -ef | grep redis
命名查看Redis进程,判断是否启动成功,如下14408进程的端口号6379是Redis服务的进程,则启动成功
停止Redis服务
方法1️⃣ 使用kill -9 进程ID
命令杀死Redis进程
方法2️⃣ 利用redis-cli来执行 shutdown 命令
# 利用redis-cli来执行 shutdown 命令,即可停止 Redis 服务,
# 因为之前配置了密码,因此需要通过 -a 来指定密码
redis-cli -a 123456 shutdown
1.3.1.4.3 开机自启
通过配置来实现开机自启
新建一个系统服务文件:
vi /etc/systemd/system/redis.service
内容如下⬇️
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
如果使用MobaXterm则可以直接到该目录下直接新建文件redis.service
然后使用右键选择该文件,点击Open with default text editor
将内容复制进去,并保存退出
然后使用下面命令重新加载系统服务
systemctl daemon-reload
现在,我们可以用下面这组命令来操作redis了
# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis
执行下面的命令,可以让redis开机自启
systemctl enable redis
1.3.2 Windows安装Redis(.msi)
1.3.2.0 资源准备
点击链接,直接下载最新版本(注意选择.msi格式的安装版本)
瑞:Windows 环境下的 Redis 的 github 链接:https://github.com/MicrosoftArchive/redis/releases
注意:Redis 原作者并没有编写 Windows 版本的 Redis ,目前开源的 Windows 环境下的 Redis 没有32位
由于该链接是 github 外网链接,如果加载不出来的小伙伴,可以用博主提供的某度网盘链接(版本:Redis-x64-3.0.504.msi)
链接:https://pan.baidu.com/s/1e29fjmLn6ku_jcF-SHxUMw?pwd=foqz
提取码:foqz
1.3.2.1 安装步骤
1️⃣ 双击运行.msi的安装包,点击next,一直next
2️⃣ 直到下面界面,勾选上再next
3️⃣ 到这一步选择端口6379,然后next(不用担心,端口号后续可通过配置文件修改)
4️⃣ 选择最大缓存容量,点击next(后续可通过配置文件修改)
5️⃣ 点击finish,配置结束。接下来点击install进行安装
6️⃣ 安装完毕后,进入redis安装目录找到配置文件,注意配置文件是redis.windows-service.conf
,不是❌redis.windows.conf❌,后者是以非系统服务方式启动程序使用的配置文件(注意区分)
7️⃣ 在配置文件(redis.windows-service.conf)中搜索requirepass foobared
,在其后面追加一行,参考输入requirepass 123456。
瑞:本步骤是设置访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处设置123456为仅用于步骤演示,具体密码请自定义设置(后续仍然可修改),记得保存文件后再退出。
8️⃣ 使用任务管理器找到Redis名称的服务,查看启动情况。如未启动,则手动启动。正常情况下,服务应该正常启动并运行了,但是因为前面修改过配置文件,需要重启服务,切记,否则配置不生效
1.3.2.2 测试
1️⃣ 打开cmd命令窗口,输入redis-cli
注意中间没有空格等其它字符,回车执行。
redis-cli是客户端程序,如下图正常提示(显示配置的端口号6379),则表示服务已经启动。
127.0.0.1:6379>redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>auth 123456
127.0.0.1:6379>ping
127.0.0.1:6379>info server
2️⃣ 使用服务前需要先通过密码验证。输入auth 123456
并回车(注意123456是之前设定的密码)。返回提示OK表示验证通过。后续可以自行验证set和get等命令,如上图,则说明安装成功。
C:\Users\用户名>redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set mytest "ray"
OK
127.0.0.1:6379> get mytest
"ray"
127.0.0.1:6379>
1.3.3.3 附:启动脚本文件
创建一个.bat
的脚本文件,内容如下⬇️
@echo off
title ray_redis_run
redis-cli -h 127.0.0.1 -p 6379 -a 123456
pause;
注意替换为你安装的 Redis 的 ip、端口、密码,双击运行该脚本文件,如下则成功:
1.3.3 Windows安装Redis(.zip)
1.3.3.0 资源准备
点击链接,直接下载最新版本(注意选择.zip格式的安装版本)
瑞:Windows 环境下的 Redis 的 github 链接:https://github.com/MicrosoftArchive/redis/releases
注意:Redis 原作者并没有编写 Windows 版本的 Redis ,目前开源的 Windows 环境下的 Redis 没有32位
由于该链接是 github 外网链接,如果加载不出来的小伙伴,可以用博主提供的某度网盘链接(版本:Redis-x64-3.0.504.zip,大小:5M左右)
链接:https://pan.baidu.com/s/1RVisCZQVT6dfTZmxtERJDg?pwd=rhtr
提取码:rhtr
1.3.3.1 安装步骤
1️⃣ 解压.zip压缩包,在该路径(本例中为"F:\soft\Redis\Redis30504\Redis-x64-3.0.504")下输入cmd打开命令窗口
2️⃣ 输入启动redis-server redis.windows.conf
命令启动Redis服务,如下图表示启动成功
瑞:在执行下面步骤之前,有些小伙伴会因为权限不够失败(无创建文件夹权限之类的原因),这种是不会提示的,可以在"F:\soft\Redis\Redis30504\Redis-x64-3.0.504"目录下新建一个名为
Logs
的文件夹,再执行下面的步骤(如果是用博主提供的某度网盘链接下载的zip则不需要处理)
3️⃣ 把redis注册成windows服务(这样就不需要一直开启Redis服务的cmd窗口)。关闭第2步打开的Redis服务的cmd窗口,再打开该路径下新的cmd窗口(即再执行一次第一步),输入redis-server.exe --service-install redis.windows-service.conf --loglevel verbose
命令进行注册Windows服务。执行命令成功后,在windows服务会出现名为Redis的服务,此时是已停止状态。
瑞:注意要关闭第2步打开的Redis服务,不然可能会出现注册失败的情况
4️⃣ 将该服务状态修改为启动后,进入redis安装目录找到配置文件,注意配置文件是redis.windows-service.conf
,不是❌redis.windows.conf❌,后者是以非系统服务方式启动程序使用的配置文件(注意区分)
5️⃣ 在配置文件(redis.windows-service.conf)中搜索requirepass foobared
,在其后面追加一行,参考输入requirepass 123456。
瑞:本步骤是设置访问Redis时所需的密码,一般测试情况下可以不用设定密码。不过,即使是作为本地访问,也建议设定一个密码。此处设置123456为仅用于步骤演示,具体密码请自定义设置(后续仍然可修改),记得保存文件后再退出。
6️⃣ 使用任务管理器找到Redis名称的服务,查看启动情况。如未启动,则手动启动。正常情况下,服务应该正常启动并运行了,但是因为前面修改过配置文件,需要重启服务,切记,否则配置不生效
下次开机就会自启动Redis服务,使用博主提供的.bat脚本或
redis-cli
即可直接访问本机Redis
1.3.3.2 测试
1️⃣ 打开cmd命令窗口,输入redis-cli
注意中间没有空格等其它字符,回车执行。
redis-cli是客户端程序,如下图正常提示(显示配置的端口号6379),则表示服务已经启动。
127.0.0.1:6379>redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>auth 123456
127.0.0.1:6379>ping
127.0.0.1:6379>info server
2️⃣ 使用服务前需要先通过密码验证。输入auth 123456
并回车(注意123456是之前设定的密码)。返回提示OK表示验证通过。后续可以自行验证set和get等命令,如上图,则说明安装成功。
C:\Users\用户名>redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set mytest "ray"
OK
127.0.0.1:6379> get mytest
"ray"
127.0.0.1:6379>
1.3.3.3 附:启动脚本文件
创建一个.bat
的脚本文件,内容如下⬇️
@echo off
title ray_redis_run
redis-cli -h 127.0.0.1 -p 6379 -a 123456
pause;
注意替换为你安装的 Redis 的 ip、端口、密码,双击运行该脚本文件,如下则成功:
1.3.4 附:Windows卸载Redis
1️⃣ 进入Redis的安装目录(如"F:\soft\Redis\Redis30504\Redis-x64-3.0.504"),输入cmd打开命令窗口
2️⃣ 执行redis-server --service-uninstall
命令卸载redis服务,如下图即卸载Redis服务成功
3️⃣ 最后将redis文件夹直接删除即完成卸载
如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~