当前位置: 首页 > 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.lryc.cn/news/609109.html

相关文章:

  • [Oracle] DUAL数据表
  • CAP 理论笔记
  • 推荐系统学习笔记(九)曝光过滤 Bloom Filter
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 自动驾驶中的传感器技术18——Camera(9)
  • Connection refused: no further information: localhost/127.0.0.1:2375
  • docker 可用镜像列表(长期免费)
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • Docker环境离线安卓安装指南
  • centos9 安装docker engine
  • C++ : 反向迭代器的模拟实现
  • Java基本技术讲解
  • 深入解析C++函数重载:从原理到实践
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • B+树索引结构原理解析与最佳实践
  • 创建型设计模式:对象诞生的艺术与智慧
  • 设计模式学习[17]---组合模式
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器
  • STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-55,(知识点:STM32,外设及其特点)
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • 08【C++ 初阶】类和对象(下篇) --- 类知识的额外补充
  • MySQL 事务原理 + ACID笔记
  • 计算机网络(TCP篇)
  • Python3 中使用zipfile进行文件(夹)的压缩、解压缩
  • Qt-vs加载exe图标
  • 【机器人】VLN-R1 微调 | 增强训练 | 连续导航