当前位置: 首页 > 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.dtcms.com/a/312470.html

相关文章:

  • Android 之 常用布局
  • OpenWrt | 如何在 ucode 脚本中打印日志
  • 评测PHOCR中文文本识别模型
  • MySQL半同步复制机制详解:AFTER_SYNC vs AFTER_COMMIT 的优劣与选择
  • Python 程序设计讲义(57):Python 的函数——可变参数的使用
  • 专网内网IP攻击防御:从应急响应到架构加固
  • 老电脑PE下无法读取硬盘的原因
  • 【LeetCode刷题指南】--二叉树的后序遍历,二叉树遍历
  • 7.14.散列表的基本概念(散列表又名哈希表,Hash Table)
  • 01.Redis 概述
  • 嵌入式通信协议解析(基于红外NEC通信协议)
  • 旧笔记本电脑如何安装飞牛OS
  • 前端工程化:npmvite
  • 解剖 .NET 经典:从 Component 到 BackgroundWorker
  • python基础语法6,简单文件操作(简单易上手的python语法教学)(课后习题)
  • Jetpack Compose for XR:构建下一代空间UI的完整指南
  • Hyper-V + Centos stream 9 搭建K8s集群(二)
  • MySQL 索引失效的场景与原因
  • k8s+isulad 国产化技术栈云原生技术栈搭建2-crictl
  • Linux进程启动后,监听端口几分钟后消失之问题分析
  • MySQL 事务原理 + ACID笔记
  • HiveMQ核心架构思维导图2024.9(Community Edition)
  • Educational Codeforces Round 171 (Rated for Div. 2)
  • 06.Redis 配置文件说明
  • 【openlayers框架学习】十一:openlayers实战功能介绍与前端设计
  • Azure DevOps 中的代理
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(七级)
  • Mongo索引
  • 0基礎網站開發技術教學(二) --(前端篇 2)--