【从零开始学习Redis】初识Redis
初识Redis
一句话理解Redis:
Redis是一个基于内存的、支持多种数据结构的高性能键值数据库,常被用于缓存、分布式锁和消息队列。
和 MySQL 的区别:
特点 | Redis | MySQL |
---|---|---|
类型 | 非关系型(NoSQL) | 关系型(SQL) |
存储结构 | 键值对(Key-Value) | 表结构(行、列) |
存储位置 | 主要存储在内存中,可选择持久化到磁盘 | 存储在磁盘中 |
访问速度 | 极快(纳秒级) | 相对较慢(毫秒级) |
使用场景 | 缓存、排行榜、会话存储、限流、队列等 | 持久化数据、复杂查询、事务处理等 |
认识NoSQL
MySQL是类似下图的结构:
而NoSQL没有这种强约束,不仅仅是键值对,同时也可以以json
形式存储,常见的还有Graph,但使用的相对较少,一般用于社交app
。
总结一下区别如下:
SQL | NoSQL | |
---|---|---|
数据结构 | 结构化(Structured) | 非结构化 |
数据关联 | 关联的(Relational) | 无关联的 |
查询方式 | SQL查询 | 非SQL |
事务特性 | ACID | BASE |
存储方式 | 磁盘 | 内存 |
扩展性 | 垂直 | 水平 |
使用场景 | 1)数据结构固定 2)相关业务对数据安全性、一致性要求较高 | 1)数据结构不固定 2)对一致性、安全性要求不高 3)对性能要求 |
认识Redis
特征:
- 键值(key-value)型, value支持多种不同数据结构, 功能丰富
- 单线程, 每个命令具备原子性
- 低延迟, 速度快 (基于内存、IO多路复用、良好的编码)。
- 支持数据持久化
- 支持主从集群、分片集群
- 支持多语言客户端
在这里我有个疑问,为什么读写内存就比读写磁盘快呢?
🚀 1. 硬件本质不同
项目 | 内存(RAM) | 磁盘(HDD/SSD) |
---|---|---|
介质 | 电子 | 磁性 or 闪存 |
访问方式 | 直接随机访问(Random Access) | 顺序访问为主(特别是机械硬盘) |
速度 | 纳秒级(10⁻⁹ 秒) | 毫秒级(10⁻³ 秒,HDD)或微秒级(10⁻⁶ 秒,SSD) |
- 内存是电路层级的操作,访问一个数据大概只需几十纳秒;
- 机械硬盘(HDD)要转磁盘、移动磁头来定位数据,耗时几个毫秒;
- 固态硬盘(SSD)虽然比 HDD 快很多,但依旧是微秒级,远不如内存快。
2.操作系统层面
让我想起了之前操作系统老师说过的关于内存,单片机是没有操作系统的,所以每次写完代码需要借助工具把代码烧录进去,程序才能跑。而且单片机的 CPU
是直接操作内存的物理地址。
这种情况下,不可能在内存中运行两个程序,如果第一个程序在地址为1000的地方写入一个值,那么第二个程序就会覆盖掉当前位置的全部内容,所以程序会立刻崩溃。
操作系统提供了一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。于是,程序所使用的内存地址叫虚拟内存地址,实际在硬件里面的空间地址叫物理内存地址。
使得CPU
直接访问物理内存的数据,无需系统调用,全靠硬件完成,所以速度会很快。而磁盘读写则会涉及用户态与内核态的切换、函数调用、磁头移动、磁盘旋转等,时间不是一个量级的。
知识是网状的,互相关联、相互贯通,很多看似复杂的问题其实都是基础知识的串联,多思考多发问是非常必要的。
安装Redis并熟悉启动方式
安装redis
我是使用的Ubuntu 22.04
,注意当前指令仅适用于Ubuntu,
通过apt
安装稳定版本,
sudo apt update
sudo apt install -y redis
可以通过以下指令检查是否安装成功
# 启动 Redis(如果还未启动)
sudo systemctl start redis# 设置开机自启(可选)
sudo systemctl enable redis# 检查运行状态
sudo systemctl status redis# 测试连接
redis-cli ping
# 返回 PONG 表示 Redis 正常运行
如果要关闭redis
,
ps -ef | grep redis #查出redis进程PID#关闭redis进程
sudo kill 4254 #4254是举例,要替换为自己获取的PID#检查是否关闭成功
ps -ef | grep redis#如果发现redis换了一个PID仍在运行,可能是被某服务器托管自动重启
#如果使用systemd管理redis服务,用以下指令关闭redis
sudo systemctl stop redis
设置后台启动
- 修改监听的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
#一般情况下,redis.conf位置在/etc/redis/redis.conf
#使用root权限打开配置文件,可以用vim或者nano文本编辑器打开,看个人习惯
#不使用sudo,权限不够,无法修改文件内容
sudo nano /etc/redis/redis.conf
或者sudo vim /etc/redis/redis.conf如图
bind 0.0.0.0
- 守护线程,修改为yes后即可后台运行
daemonize yes
- 为保证安全性,设置访问
redis
必须输入密码
requirepass 123321 #可以设置为自己想设置的密码
- 可以打开一下日志功能,便于报错查找问题
像我的是自动打开的,而且日志文件位置如图。
一般来说,使用Ubuntu
,通过apt
一键部署,在这里只需要修改监听IP和设置密码。
修改完成后,使用指定配置文件启动redis
,并检查是否成功设置后台启动。
- 打开开机自启
设置 Redis 开机自启(推荐做法)
在这之前先kill掉redis进程
sudo killall redis-server
- 启用 Redis 服务
sudo systemctl enable redis-server
- 立即启动 Redis 服务
sudo systemctl start redis-server
- 查看 Redis 服务状态
sudo systemctl status redis-server
如果你看到 active (running)
状态,说明 Redis 正常运行且设置为开机自启了。
常用命令总结:
操作 | 命令 |
---|---|
启动 Redis | sudo systemctl start redis-server |
停止 Redis | sudo systemctl stop redis-server |
重启 Redis | sudo systemctl restart redis-server |
查看状态 | sudo systemctl status redis-server |
设置开机启动 | sudo systemctl enable redis-server |
禁用开机启动 | sudo systemctl disable redis-server |
现在对于redis的基本配置就结束了,后面即将开始redis命令行的学习
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力,希望我们共同进步