文章目录
- 1 初识Redis
- 1.1 认识NoSQL
- 1.1.1 结构化与非结构化
- 1.1.2 关联和非关联
- 1.1.3 查询方式
- 1.1.4 事务
- 1.1.5 总结
- 1.2 认识Redis
- 1.2.1 介绍
- 1.2.2 特征
- 1.2.3 优势
- 1.3 安装Redis ★★★
- 1.3.1 Linux安装Redis
- 1.3.1.1 安装Redis依赖
- 1.3.2 Windows安装Redis
- 1.3.2.1 安装步骤
- 1.3.2.2 测试
🙊 前言:本文章为瑞_系列专栏之《Redis》的基础篇的初识Redis章节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系列专栏主要是针对该课程进行笔记总结和拓展,文中的部分原理及图解等也是来源于黑马提供的资料,特此注明。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者必究!
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 ★★★
1.3.1 Linux安装Redis
大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此本系列是基于Linux系统安装Redis
瑞:Redis的原作者根本就没有编写 Windows 版的 Redis ,所以学习的时候还是要以官方版的为准
Linux版本为CentOS 7
瑞:关于 VMware 虚拟机安装 Linux 的教程可以参考:[明天出]
1.3.1.1 安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
(由于Linux教程未完成,等明天出完后继续更新Linux版本的安装)
1.3.2 Windows安装Redis
1.3.2.1 安装步骤
1️⃣ 资源准备。点击链接,直接下载最新版本(注意选择.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
2️⃣ 双击运行.msi的安装包,一直next,直到下面界面,勾选上再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),则表示服务已经启动。
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>
Windows环境下的Redis安装参考博客:https://blog.csdn.net/qq_52253798/article/details/122204459
如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~