初识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.pswp.cn/bicheng/92006.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92006.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92006.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CUDA杂记--nvcc使用介绍

nvcc 是 NVIDIA CUDA 生态的核心编译器,负责将 CUDA C/C 代码(混合了主机代码和设备代码)编译为可在 CPU 和 GPU 上运行的二进制文件。它不仅是一个简单的编译器,更是一个“编译驱动程序”,协调多个工具链(…

Codeforces Round 1040 (Div. 2)(补题)

文章目录前言A.Submission is All You NeedB. PathlessC.Double PerspectiveD.Stay or Mirror前言 又被卡在第二题了,当时脑子跟犯糊涂似的,B题越理越乱,导致比赛结束,还在想着题,彻夜难眠! A.Submission …

Apifox 7 月更新|通过 AI 命名参数及检测接口规范、在线文档支持自定义 CSS 和 JavaScript、鉴权能力升级

Apifox 新版本上线啦! 看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性: AI 助力接口设计 通过 AI 为参数命名 支持让 AI 对接口进行规范性检测 在线文档功能增强 在线文档支持自定义 CSS 和 JavaScript 目录支持设置展示…

Node.js以及异步编程

什么是服务器?我们知道客户端通过访问服务器,然后服务器去操作数据库把我们想要的数据拿过来给客户端。比如服务器就是餐厅的服务员,数据库就是厨房,客户端就是我们的顾客。首先我们点菜,服务器告诉厨师做饭&#xff0…

UniApp 实现顶部固定导航栏 Tab 及滚动变色效果

顶部导航栏是一个非常常见的组件,尤其是固定在顶部的 Tab 导航,既能方便用户快速切换内容,又能保持页面结构的清晰。本文将详细介绍如何在 UniApp Vue3 TypeScript 项目中实现一个固定在顶部、且能根据滚动状态改变样式的 Tab 导航栏。效果…

c++泛型编程

C泛型编程 1. 基本概念 1.1 泛型编程(Generic Programming) 泛型编程是C中一种重要的编程范式,它通过 参数化类型 来实现代码的通用性和复用性。 1.2 模板(Templates) 模板 是泛型编程的基础,允许编写与数据…

Vue.js + Node.js 开发前后台框架

在 Vue.js + Node.js 开发前后台框架时,推荐采用现代化的技术栈组合和最佳实践。以下是一个高效、可扩展的全栈框架方案: 技术栈推荐 层级 技术选型 说明 前端框架 Vue 3 (Composition API) 最新Vue核心库,推荐使用<script setup>语法 UI组件库 Element Plus / Ant D…

Vision Transformer (ViT) 详解:当Transformer“看见”世界,计算机视觉的范式革命

摘要: 长久以来&#xff0c;卷积神经网络&#xff08;CNN&#xff09;凭借其精心设计的归纳偏置&#xff08;inductive biases&#xff09;&#xff0c;无可争议地统治着计算机视觉领域。然而&#xff0c;一篇名为《An Image is Worth 16x16 Words》的论文彻底改变了这一格局&a…

go goroutine chan 用法

方法1 代码 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分别同步发送和接收// 发送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上传安全与敏感数据安全处理

一、文件上传安全1. 文件上传时的核心安全检查点文件上传是 Web 应用的高风险功能&#xff0c;需从多维度验证&#xff0c;防止恶意文件上传&#xff08;如木马、病毒&#xff09;或路径攻击&#xff0c;关键检查点包括&#xff1a;MIME 类型验证检查请求头中的 Content-Type&a…

文法中的间接左递归

&#x1f31f; 第一步&#xff1a;理解基本概念✅ 什么是文法&#xff08;Grammar&#xff09;&#xff1f;在编程语言或语法分析中&#xff0c;文法 是一组规则&#xff0c;用来描述一种语言的结构。例如&#xff1a;S → A a A → B b B → S c 这表示&#xff1a;S 可以…

Anthropic:跨越生产效能拐点的AI增长飞轮

资本竞赛中的战略转折点 人工智能领域的竞争已经从理念之争演变为资本、算力与地缘政治影响力的全面较量。Anthropic传闻中的1700亿美元估值&#xff0c;如果成为现实&#xff0c;将标志着前沿AI发展格局的地震式转变。这不仅仅是构建更智能模型的问题&#xff0c;更是为主导下…

【Unity3D实例-功能-移动】小兵移动-通过鼠标点击进行

在Unity的世界里&#xff0c;当你轻点鼠标&#xff0c;角色仿佛被赋予了新的使命&#xff0c;沿着一条无形的轨迹&#xff0c;向着地图上的目标点进发。每一次移动&#xff0c;不仅是简单的位移&#xff0c;更是对未知的探索。这种交互&#xff0c;让玩家与游戏世界紧密相连&am…

从0到1学PHP(十四):PHP 性能优化:打造高效应用

目录一、PHP 性能评估与分析1.1 性能指标体系1.2 性能分析工具使用1.3 性能瓶颈定位方法与流程二、代码层面优化技巧2.1 高效的循环与条件判断写法2.2 函数与类的优化设计2.3 内存管理与垃圾回收机制优化三、缓存策略与实现3.1 数据缓存3.2 页面缓存与部分缓存技术3.3 OPcache …

移动管家手机控车系统硬件安装与软件绑定设置

移动管家手机控车系统硬件安装与软件绑定配合使用&#xff0c;具体设置步骤如下&#xff1a;一、硬件安装准备 ‌加装智能控制主机‌&#xff1a;需在车辆上加装移动管家专用智能控制模块&#xff0c;该模块需与原车电路系统连接&#xff0c;并将原车钥匙芯片焊接至主控盒内以实…

51单片机入门:数码管原理介绍及C代码实现

本文是江协科技up的课堂笔记&#xff01;大家可以去bilibili配合这位up的51单片机入门教程食用&#xff0c;效果更佳~我这里进行详细介绍&#xff0c;希望你忘记数码管的时候来这里看看&#xff01;&#xff08;你猜我为什么写这个TAT&#xff09;一.基本介绍LED数码管&#xf…

Apache Camel 简介

相关文档地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP离线库 输入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文实现&#xff1a; 1、离线查询IP地址 2、IP地址精确到区域 3、IP地址支持国外IP 此时需要一个创建&#xff0c;比如我输入一个8.8.8.8的IP立马就需要返回给我一个中文地址信息&#xff0c; 类似于百度的IP搜索&#xff1a; 113.111.186.123如果现在离线环境或者在…

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题

删除 MySQL 数据目录 /var/lib/mysql 下的所有文件后&#xff0c;MySQL 将无法启动&#xff0c;因为该目录包含了数据库的所有数据文件、配置文件和系统表。当这些文件被删除时&#xff0c;MySQL 无法找到必要的数据和配置&#xff0c;从而无法正常启动。本文将详细介绍解决这个…

苍穹外卖项目学习——day1(项目概述、环境搭建)

文章目录一、软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境分类二、苍穹外卖项目介绍2.1 定位2.2 功能架构2.3 技术选型三、开发环境搭建3.1 前端环境3.2 后端环境3.3 前后端联调3.4 登录功能优化四、接口文档管理4.1 YApi4.2 Swagger (Knife4j)一、软件开发整体介…