当前位置: 首页 > news >正文

【从零开始学习Redis】初识Redis

初识Redis

一句话理解Redis:

Redis是一个基于内存的、支持多种数据结构的高性能键值数据库,常被用于缓存、分布式锁和消息队列。

和 MySQL 的区别:

特点RedisMySQL
类型非关系型(NoSQL)关系型(SQL)
存储结构键值对(Key-Value)表结构(行、列)
存储位置主要存储在内存中,可选择持久化到磁盘存储在磁盘中
访问速度极快(纳秒级)相对较慢(毫秒级)
使用场景缓存、排行榜、会话存储、限流、队列等持久化数据、复杂查询、事务处理等

认识NoSQL

MySQL是类似下图的结构:

而NoSQL没有这种强约束,不仅仅是键值对,同时也可以以json形式存储,常见的还有Graph,但使用的相对较少,一般用于社交app

总结一下区别如下:

SQLNoSQL
数据结构结构化(Structured)非结构化
数据关联关联的(Relational)无关联的
查询方式SQL查询非SQL
事务特性ACIDBASE
存储方式磁盘内存
扩展性垂直水平
使用场景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
  1. 启用 Redis 服务
sudo systemctl enable redis-server
  1. 立即启动 Redis 服务
sudo systemctl start redis-server
  1. 查看 Redis 服务状态
sudo systemctl status redis-server

如果你看到 active (running) 状态,说明 Redis 正常运行且设置为开机自启了。

常用命令总结:

操作命令
启动 Redissudo systemctl start redis-server
停止 Redissudo systemctl stop redis-server
重启 Redissudo systemctl restart redis-server
查看状态sudo systemctl status redis-server
设置开机启动sudo systemctl enable redis-server
禁用开机启动sudo systemctl disable redis-server

现在对于redis的基本配置就结束了,后面即将开始redis命令行的学习

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力,希望我们共同进步

http://www.xdnf.cn/news/1239175.html

相关文章:

  • 第13章 文件输入/输出
  • 网关与路由器的区别
  • 【MySQL】MySQL中锁有哪些?
  • 常见的框架漏洞(Thinkphp,spring,Shiro)
  • 2025年测绘程序设计比赛--基于统计滤波的点云去噪(已获国特)
  • 波士顿房价预测工具 - XGBoost实现
  • openwrt 23.05编译intel igb5.19.4驱动
  • 在Ansys Mechanical中对磨损进行建模
  • nestjs @Param 从入门到精通
  • Python中的sys.path与PYTHONPATH全解析:模块导入路径的底层机制与最佳实践
  • WebMvc自动配置流程讲解
  • 研报复现|史蒂夫·路佛价值选股法则
  • 控制建模matlab练习07:比例积分控制-③PI控制器的应用
  • Java ++i 与 i++ 底层原理
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • LCL滤波器及其电容电流前馈有源阻尼设计软件【LCLAD_designer】
  • Linux网络编程 --- 多路转接select
  • 07.config 命令实现动态修改配置和慢查询
  • Redis——常用指令汇总指南(三)(哈希类型)
  • Timer实现定时调度的原理是什么?
  • ORA-12514:TNS: 监听程序当前无法识别连接描述符中请求的服务
  • 【2025/08/03】GitHub 今日热门项目
  • 案例介绍|JSON数据格式的转换|pyecharts模块简介
  • 计算机网络(TCP篇)
  • io_setup系统调用及示例
  • C++编译过程与GDB调试段错误和死锁问题
  • 【前端:Html】--1.2.基础语法
  • 源代码本地安装funasr
  • 【Linux网络编程基础--socket地址API】
  • 01数据结构-时间复杂度和空间复杂度