Redis:安装与常用命令

news2025/6/6 14:35:44

🌈 个人主页:Zfox_
🔥 系列专栏:Redis

🔥 安装 Redis

  1. 使⽤apt安装
apt install redis -y
  1. ⽀持远程连接
  • 修改 /etc/redis/redis.conf
    • 修改 bind 127.0.0.1bind 0.0.0.0
    • 修改 protected-mode yesprotected-mode no
  1. 控制Redis启动
  • 启动Redis服务
service redis-server start
  • 停⽌Redis服务
service redis-server stop
  • 重启Redis服务
service redis-server restart
  • 查看Redis服务状态
service redis-server status
  • 持久化⽂件存储⽬录
 /var/lib/redis/

Redis持久化⽣产的RDB和AOF⽂件都默认⽣成于该⽬录下。后边章节我们讲到持久化时会观察这边持久化的⼀些现象。

  • ⽇志⽂件⽬录
/var/log/redis/

/var/log/redis/⽬录下会保存Redis运⾏期间⽣产的⽇志⽂件,默认按照天进⾏分割,并且会将⼀定⽇期的⽇⼦⽂件使⽤gzip格式压缩保存。可以使⽤任意⽂本编辑器打开,后边章节我们会通过⽇志来观察⼀些现象。

🔥 Redis命令⾏客户端

🐳 现在我们已经启动了Redis服务,下⾯将介绍如何使⽤ redis-cli连接、操作Redis服务。

redis-cli 可以使⽤两种⽅式连接Redis服务器。

  • 第⼀种是交互式⽅式:通过redis-cli-h{host}-p{port} 的⽅式连接到Redis服务,后续所有的操作都是通过交互式的⽅式实现,不需要再执⾏redis-cli了,例如:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> get key
"hello"
  • 第⼆种是命令⽅式:⽤ redis-cli-h{host}-p{port}{command}就可以直接得到命令的返回结果,例如:
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 ping
PONG
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 set key hello
OK
[root@host ~]# redis-cli -h 127.0.0.1 -p 6379 get key
"hello"

这⾥有两点要注意:
1)由于我们连接的Redis服务位于127.0.0.1,端⼝也使⽤的是默认的6379端⼝,所以可以省略-h{host}-p{port}
2)Redis是学习Redis的重要⼯具,后续的⼤量章节都是⽤它来做讲解。
有关redis-cli提供的更为强⼤的功能将在后续章节做详细介绍。

Redis客⼾端与服务端的交互过程
在这里插入图片描述

🔥 Redis 常用命令

本篇开始对于 Redis 的命令进行学习,当然只是学习一些常见的

🦋 get 和 set

🦈 Redis 中是使用键值对来进行存储的,所以 get 是根据 key 来取 Value 的,而 set 是来设置键值对的

 set  \colorbox{pink}{ set }  set 

set [key] [value]
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set 'key2' "value2"
OK

 get  \colorbox{pink}{ get }  get 

get [key]
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key2
"value2"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key100
(nil)

🦋 Redis 全局命令

keys

Redis 可以看成是一个网络版本的哈希表,它支持很多的数据结构,key 固定是字符串,但是 Value可以是多种多样的数据结构,下面讲述的就是全局命令,可以搭配各种各样的数据结构

keys [pattern]

该命令可以看到的是每一个 key 的模样,同时也可以允许存在通配符等

时间复杂度:O(N)

pattern 是什么?

表示的意思是,一个包含特殊符号的字符串,存在的意义是来描述,找的字符串是什么样子的

  • h?llo 匹配 hello , hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
  • h[^e]llo 匹配 hallo , hbllo , … 但不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo

先插入几个键值对:

127.0.0.1:6379> set hello 1
OK
127.0.0.1:6379> set hallo 2
OK
127.0.0.1:6379> set hbllo 3
OK
127.0.0.1:6379> set hllo 4
OK
127.0.0.1:6379> set heeeeeeeeeeeeelo 5
OK

?匹配的是任意一个字符

127.0.0.1:6379> keys h?llo
1) "hallo"
2) "hello"
3) "hbllo"
  • 匹配的是0个或者任意字符
127.0.0.1:6379> keys h*llo
1) "hllo"
2) "hallo"
3) "hello"
4) "hbllo"

[abcde]表示匹配这里面的某个选项

127.0.0.1:6379> keys h[abc]llo
1) "hallo"
2) "hbllo"

[^e] 表示排除e,除了e都行

127.0.0.1:6379> keys h[^a]llo
1) "hello"
2) "hbllo"

[a-b] 表示的是a-b范围内的字符都行

127.0.0.1:6379> keys h[a-b]llo
1) "hallo"
2) "hbllo"

注意事项

keys 命令的时间复杂度是O(N),所以一般会禁止使用keys,尤其是keys *

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"

Redis 是单线程的,所以当执行 keys 的时候可能会导致阻塞,这是一件不可容忍的事,因此一般禁止

Redis 经常会用于做缓存,挡在 mysql 前面,替 mysql 负重前行的人,万一 Redis 被一个 keys*阻塞住了,此时其他的查询 Redis 操作就超时了此时这些请求就会直接查数据库,突然一大波请求过来了, mysql 措手不及,就容易挂了,整个系统就基本瘫痪了

EXISTS

exists key [key ...]
127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"

127.0.0.1:6379> exists hello hallo
(integer) 2

那为什么要这样进行一次请求多个呢?这是考虑到了网络服务,Redis 和 HTTP 的请求响应机制是一样的,这就意味着如果每次都请求,会消耗一定的网络资源,但是如果采用一次去检查多个的情况(减少网络通信的次数),就不会这样,相当于会节省一部分的网络资源

DEL

删除指定 key

DEL key [key ...]

这个命令相对比较简单,这里就不再进行赘述了,就是一个删除的命令

127.0.0.1:6379> keys *
1) "hllo"
2) "heeeeeeeeeeeeelo"
3) "hallo"
4) "hello"
5) "key1"
6) "key3"
7) "hbllo"
8) "key2"

127.0.0.1:6379> del hllo hallo
(integer) 2

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"

这里值得注意的是,Redis 数据被删除,要看它是否是一个数据库,如果它作为缓存,那问题不算特别大,但是如果是作为数据库,那就相当于在 MySQL 中丢失了数据,这就是一个比较严重的错误了

针对于 Redis 的误删数据的错误,要根据具体情况具体分析

EXPIRE

expire 的作用是给指定的 key 设置过期时间,key 存活时间超过这个指定的值,就会被自动删除

expire key seconds

返回值:1表示设置成功。0表示设置失败

要注意的是,expire 的 key 值,必须得是已经存在的 key 值,如果不是存在的 key 值是不可以被设置过期时间的

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"

127.0.0.1:6379> expire key2 3
(integer) 1

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"
6) "key2"

127.0.0.1:6379> expire key2 3
(integer) 0

127.0.0.1:6379> keys *
1) "heeeeeeeeeeeeelo"
2) "hello"
3) "key1"
4) "key3"
5) "hbllo"

TTL

查询过期时间的命令叫做 ttl,全称是 time to live

TTL key

返回值:剩余过期时间。-1表⽰没有关联过期时间,-2表⽰key不存在。

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10

EXPIRETTL命令都有对应的⽀持毫秒为单位的版本:PEXPIREPTTL,详细⽤法就不再介绍了

键的过期机制

在这里插入图片描述

🦋 Redis 的删除策略

对于删除来说,到底该选用哪种策略呢?下面给出两种策略

  • 先说一下 「惰性删除」:

假设现在这个 key 已经到达过期时间了,但是暂时还没删除它,key 还是存在的,当下一次进行访问的时候,正好用到了这个 key,此时就会让 Redis 触发删除的操作,并且返回一个 nil

  • 下面说一下「定期删除」:

定期删除,就是在一个定期时间内进行检测,但是定期删除是要有一定条件的,原因在于 Redis 是一个单线程的程序,如果扫描 key 的时间太多,就会导致被阻塞,形成的效果和 keys * 差不多

TYPE

返回key对应的 value 数据类型。

TYPE key

返回值: none , string , list , set , zset , hash and stream

redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

本⼩结只是抛砖引⽟,给出⼏个通⽤的命令,为5种数据结构的使⽤做⼀个热⾝,后续章节将对键管理做⼀个更为详细的介绍。

🔥 共勉

😋 以上就是我对 Redis:安装与常用命令 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2398945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac 芯片系列 安装cocoapod 教程

安装声明: 本人是在搭梯子的环境下安装成功,前提是必须安装好安装homebrew环境。 1.检测rudy的源 2.查看源(目的:检测rudy的源) gem sources - l 3.移除源(目的:移除rudy自带的源) gem sources --remove https://rubygems.org/ 4.更换源(目的:替换成国…

智启未来:AI重构制造业供应链的五大革命性突破

一、需求预测:让供应链“未卜先知” 1.1 从经验判断到数据预言 传统供应链依赖人工分析历史数据,但面对市场波动、设备突发故障等不确定性,往往反应滞后。AI通过整合工业物联网(IIoT)传感器数据、生产排程、供应商交…

Linux进程间通信----简易进程池实现

进程池的模拟实现 1.进程池的原理: 是什么 进程池是一种多进程编程模式,核心思想是先创建好一定数量的子进程用作当作资源,这些进程可以帮助完成任务并且重复利用,避免频繁的进程的创建和销毁的开销。 下面我们举例子来帮助理…

解锁Java多级缓存:性能飞升的秘密武器

一、引言 文末有彩蛋 在当今高并发、低延迟的应用场景中,传统的单级缓存策略往往难以满足性能需求。随着系统规模扩大,数据访问的瓶颈逐渐显现,如何高效管理缓存成为开发者面临的重大挑战。多级缓存架构应运而生,通过分层缓存设…

(纳芯微)NCA9548- DTSXR 具有复位功能的八通道 I²C 开关、所有I/O端子均可承受5.5V输入电压

深圳市润泽芯电子有限公司 推荐NOVOSENSE(纳芯微)品牌 NCA9548- DTSXR TSSOP-24封装 NCA9548- DTSXR 具有复位功能的八通道 IC 开关、所有I/O端子均可承受5.5V输入电压 产品描述 NCA9548是通过I2C总线控制的八路双向转换开关。 SCL / SDA上行数据分散到八对下行数据或通道。…

013旅游网站设计技术详解:打造一站式旅游服务平台

旅游网站设计技术详解:打造一站式旅游服务平台 在互联网与旅游业深度融合的时代,旅游网站成为人们规划行程、预订服务的重要工具。一个功能完备的旅游网站,通过用户管理、订单管理等核心模块,实现用户与管理员的高效交互。本文将…

2024 CKA模拟系统制作 | Step-By-Step | 12、题目搭建-创建多容器Pod

目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. 多容器 Pod 的理解 2. YAML 配置规范 3. 镜像版本控制 三、考点详细讲解 1. 多容器 Pod 的工作原理 2. 容器端口冲突处理 3. 资源隔离机制 四、实验环境搭建步骤 总结 免费获取题库配套 CKA_v…

优化 Spring Boot API 性能:利用 GZIP 压缩处理大型有效载荷

引言 在构建需要处理和传输大量数据的API服务时,响应时间是一个关键的性能指标。一个常见的场景是,即使后端逻辑和数据库查询已得到充分优化,当API端点返回大型数据集(例如,数千条记录的列表)时&#xff0…

【C盘瘦身】给DevEco Studio中HarmonyOSEmulator(鸿蒙模拟器)换个地方,一键移动给C盘瘦身

文章目录 一、HarmonyOSEmulator的安装路径二、修改路径 一、HarmonyOSEmulator的安装路径 之前安装了华为的DevEco Studio,当时没注意,后来C盘告急,想着估计是鸿蒙的模拟器占用空间比较大,一检查还真是躺在C盘。路径如下&#x…

ORACLE 缺失 OracleDBConsoleorcl服务导致https://xxx:port/em 不能访问

这个原因是,操作过一下 ORCL的服务配置变更导致的。 再PATH中添加个环境变量,路径如下 管理员权限运行cmd 等待创建完成 大概3分钟 查看服务 点击第一个访问,下图登录后的截图

VScode自动添加指定内容

在 VS Code 中,可以通过配置 用户代码片段(User Snippets) 或使用 文件模板扩展 来实现新建指定文件类型时自动添加指定内容。以下是具体方法: 方法 1:使用 VS Code 内置的「用户代码片段」 适用场景:适用…

Ubuntu 22.04 安装 Nacos 记录

Ubuntu 22.04 安装 Nacos 记录 本文记录了在 Ubuntu 22.04 系统上安装 Nacos 的完整过程,适用于本地测试或生产部署的基础搭建。 一、官方资源 官网下载地址:https://nacos.io/download/nacos-server/官网文档:https://nacos.io/docs/lates…

相机--RGBD相机

教程 分类原理和标定 原理 视频总结 双目相机和RGBD相机原理 作用 RGBD相机RGB相机深度; RGB-D相机同时获取两种核心数据:RGB彩色图像和深度图像(Depth Image)。 1. RGB彩色图像 数据格式: 标准三通道矩阵&#…

记一次idea中lombok无法使用的解决方案

在注解处理器下,一般 Default 为“启用注解处理”和“从项目类路径获取处理器”,但是我的项目中的为选择“处理器路径”,导致了无法识别lombok,因此,需要改为使用“从项目类路径获取处理器”这个选项。如下图所示&…

贪心算法应用:硬币找零问题详解

贪心算法与硬币找零问题详解 贪心算法(Greedy Algorithm)在解决优化问题时表现出简洁高效的特点,尤其适用于特定结构的组合优化问题。本文将用2万字篇幅,深入探讨贪心算法在硬币找零问题中的应用,覆盖算法原理、正确性…

深入理解 x86 汇编中的重复前缀:REP、REPZ/REPE、REPNZ/REPNE(进阶详解版)

一、重复前缀:串操作的 “循环加速器” 如果你写过汇编代码,一定遇到过需要重复处理大量数据的场景: 复制 1000 字节的内存块比较两个长达 200 字符的字符串在缓冲区中搜索特定的特征值 手动用loop指令编写循环?代码冗长不说&a…

Docker 在 AI 开发中的实践:GPU 支持与深度学习环境的容器化

人工智能(AI)和机器学习(ML),特别是深度学习,正以前所未有的速度发展。然而,AI 模型的开发和部署并非易事。开发者常常面临复杂的依赖管理(如 Python 版本、TensorFlow/PyTorch 版本、CUDA、cuDNN)、异构硬件(CPU 和 GPU)支持以及环境复现困难等痛点。这些挑战严重阻…

学习NuxtLink标签

我第一次接触这个标签,我都不知道是干嘛的,哈哈哈哈,就是他长得有点像routerLink,所以我就去查了一下!哎!!!真是一样的,哈哈哈哈,至少做的事情是一样的&#…

基于PostGIS的GeoTools执行原生SQL查询制图实践-以贵州省行政区划及地级市驻地为例

目录 前言 一、空间相关表简介 1、地市行政区划表 2、地市驻地信息表 3、空间查询检索 二、GeoTools制图实现 1、数据类型绑定 2、WKT转Geometry 3、原生SQL转SimpleFeatureCollection 4、集成调用 5、成果预览 三、总结 前言 在当今这个信息爆炸的时代&#xff0c…

NLP实战(5):基于LSTM的电影评论情感分析模型研究

目录 摘要 1. 引言 2. 相关工作 3. 方法 3.1 数据预处理 3.2 模型架构 3.3 训练策略 3.4 交叉验证 4. 实验与结果 4.1 数据集 4.2 实验结果 4.3训练日志 4.4 示例预测 5. 讨论 6. 结论 附录代码 展示和免费下载 摘要 本文提出了一种基于双向LSTM的深度学习模…