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

Redis:安装与常用命令

🌈 个人主页: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) 2127.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) 1127.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) 0127.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:安装与常用命令 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述

相关文章:

Redis:安装与常用命令

🌈 个人主页:Zfox_ 🔥 系列专栏:Redis 🔥 安装 Redis 使⽤apt安装 apt install redis -y⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0 修改 protected-mode yes 为 protected-mo…...

[原创](Windows使用技巧): Windwos11如何设置局域网共享访问? (多图详解)

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...

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…...

PostgreSQL 修改表结构卡住不动

[] 查找卡住的进程 ID(PID) -- 查看当前所有数据库连接及进程信息 SELECTpid,usename,query,age(clock_timestamp(), query_start) AS query_duration FROMpg_stat_activity WHEREquery LIKE %ALTER TABLE%; -- 过滤出正在执行 ALTER TABLE 的语句今天遇…...

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

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

AutoCompose - 携程自动编排【开源】

AutoCompose - 携程自动编排【开源】 AutoCompose是一款单事件驱动(无状态)的流程引擎。使用本框架,能够轻松实现复杂服务的自动化编排【零配置、零编码】,能够显著提高开发维护效率。支持同步编程、异步编程(已支持Co…...

mybatis和hibernate区别

MyBatis 和 Hibernate 都是 Java 生态中主流的持久层框架,但设计理念和适用场景有显著区别。以下是核心对比: 1. 本质区别 特性HibernateMyBatis框架类型全自动 ORM(对象关系映射)框架半自动 SQL 映射框架核心思想对象优先&#…...

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

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

unix/linux source 命令,其历史争议、兼容性、生态、未来展望

现在把目光投向unix/linux source命令的历史争议、兼容性、生态和未来展望,这能让我们更全面地理解一个技术点在更广阔的图景中所处的位置。 一、历史争议与设计权衡 虽然 source (或 .) 命令功能强大且不可或缺,但在其发展和使用过程中,也存在一些微妙的争议或设计上的权衡…...

day42 简单CNN

目录 一、从图像分类任务谈起 二、CNN架构解剖实验室 2.1 卷积层:空间特征的魔法师 2.2 归一化层:加速收敛的隐形推手 2.3 激活函数:非线性的灵魂 三、工程实践避坑指南 3.1 数据增强工程 3.2 调度器工程实战 四、典型问题排查手册 …...

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…...

终极陷阱:Java序列化漏洞的内爆原理与防御体系重建

引言:被遗忘的后门 2019年Equifax公司因Java反序列化漏洞导致1.43亿用户数据泄露,最终以7亿美元达成和解。令人震惊的是,问题源头竟是一个简单的序列化接口: public class UserSession implements Serializable {private String…...

Git 中移除已追踪的文件

你已经成功提交了部分文件到 Git,但 sqlserver/data/ 目录下的一些日志文件(如 .xel 和 machine-key)仍然被追踪或未被忽略。你想 彻底忽略整个 sqlserver/data/* 目录下的所有内容。 ✅ 目标 让 Git 忽略以下路径: sqlserver/d…...

相机--RGBD相机

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

Flask中secret_key设置解析

app.secret_key os.urandom(24) 在 Flask 中,app.secret_key os.urandom(24) 这行代码用于生成并设置一个安全的随机密钥(Secret Key),这是 Flask 应用中非常重要的配置之一。以下是详细解析: ​1. app.secret_key …...

事件不触发、交互失效?基于 WebDebugX 的移动端事件调试实战总结

在移动端开发中,“点击没反应”“滑动卡住”“长按无效”等事件类问题时常困扰开发者。这类问题不仅和逻辑代码有关,更常见的是出现在浏览器事件模型与设备行为之间的不一致,特别是在 WebView 环境下尤为显著。 本文结合多个真实案例&#x…...

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

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

【Redis】笔记|第7节|大厂生产级Redis高并发分布式锁实战(二)

一、Redis主从架构锁失效问题解析 1. 核心问题背景 在Redis主从架构中,分布式锁失效的核心风险源于主从复制的异步特性和主节点故障后的角色切换。即使客户端仅操作主节点写入,主节点宕机时未同步的锁数据可能导致新主节点允许重复加锁。 2. 主从切换…...

WebRTC中sdp多媒体会话协议报文详细解读

sdp介绍 在WebRTC(Web实时通信)中,SDP(Session Description Protocol)是用来描述和协商多媒体会话的协议。它定义了会话的参数和媒体流的信息,如音视频编码格式、传输方式、网络地址等。SDP是WebRTC中一个…...

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

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

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

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

计算机网络全维度解析:架构协议、关键设备、安全机制与新兴技术深度融合

计算机网络作为当今数字化社会的基石,其复杂性和应用广泛性远超想象。本文将从基础架构、协议体系、关键设备、安全机制到新兴技术,进行全方位、深层次的解析,并辅以实际应用场景和案例分析。 一、网络架构与分类的深度剖析 1.1 网络分类的立…...