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

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

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

相关文章

02 APP 自动化-Appium 运行原理详解

环境搭建见 01 APP 自动化-环境搭建 文章目录 一、Appium及Appium自动化测试原理二、Appium 自动化配置项三、常见 ADB 命令四、第一个 app 自动化脚本 一、Appium及Appium自动化测试原理 Appium 跨平台、开源的 app 自动化测试框架,用来测试 app 应用程序&#x…

UDP/TCP协议全解

目录 一. UDP协议 1.UDP协议概念 2.UDP数据报格式 3.UDP协议差错控制 二. TCP协议 1.TCP协议概念 2.三次握手与四次挥手 3.TCP报文段格式(重点) 4.流量控制 5.拥塞控制 一. UDP协议 1.UDP协议概念 当应用层的进程1要向进程2传输报文&#xff…

AWS之数据分析

目录 数据分析产品对比 1. Amazon Athena 3. AWS Lake Formation 4. AWS Glue 5. Amazon OpenSearch Service 6. Amazon Kinesis Data Analytics 7. Amazon Redshift 8.Amazon Redshift Spectrum 搜索服务对比 核心功能与定位对比 适用场景 关键差异总结 注意事项 …

第13讲、Odoo 18 配置文件(odoo.conf)详细解读

1. 概述 Odoo 配置文件(odoo.conf)是管理 Odoo 服务器行为的核心工具,涵盖了网络、安全、数据库、性能等多方面的关键参数。本文档系统梳理 Odoo 18 配置文件的主要参数,结合实际应用场景,提供权威的配置建议与最佳实…

Python详细实现Dash仪表盘:从零构建数据可视化界面

目录 Python详细实现Dash仪表盘:从零构建数据可视化界面一、引言:为什么选择 Dash?二、Dash 的核心组成与工作流程三、项目目标使用数据: 四、数学模型与聚合公式五、仪表盘结构设计页面设计结构如下: 六、完整代码实现…

ubuntu磁盘挂载

在 Ubuntu 系统中,挂载额外的磁盘或分区是一项常见操作,无论是为了扩展存储空间还是组织数据。本文将详细介绍如何使用mount命令挂载文件系统,并处理可能遇到的问题。 1、挂载文件系统的基本步骤 1.1、 查找磁盘设备名称 首先需要确定要挂载…

[9-2] USART串口外设 江协科技学习笔记(9个知识点)

1 2 3 智能卡、IrDA和LIN是三种不同的通信技术,它们在电子和汽车领域中有着广泛的应用: • 智能卡(Smart Card): • 是什么:智能卡是一种带有嵌入式微处理器和存储器的塑料卡片,可以存储和处理数…

【js逆向_AES】全国二手房指数数据爬取

目标:请求参数signcode,请求结果data。 网址:aHR0cDovL3d3dy5jY2hpbmRleC5jb20vSG9tZS9pbmRleA 查看载荷 查看响应数据 点击xhr,发现所有请求参数都是一个signCode,还是加密后的结果,对应结果中数据data也…

模块化设计,static和extern(面试题常见)

文章目录 一、函数的声明和定义1.1 单个文件1.2 多个文件1.3 static和extern1.3.1 static修饰局部变量1.3.2 static修饰全局变量1.3.3 static修饰函数 总结 一、函数的声明和定义 1.1 单个文件 一般我们在使用函数的时候,直接将函数写出来就使用了 题目:写一个函数…

PySide6 GUI 学习笔记——常用类及控件使用方法(地址类QUrl)

文章目录 地址类QUrl主要功能URL 格式介绍常见 scheme(协议)类型QUrl 类常用方法常用方法示例典型应用场景 地址类QUrl QUrl 是 PySide6.QtCore 模块中的一个类,用于处理和操作 URL(统一资源定位符)。它可以解析、构建…

GEE:获取研究区的DEM数据

最近有粉丝追更 GEE 系列,说上次看完 DEM 代码解析后,自己试着改了一版。今天咱们就来拆解他的优化版代码 ——基于 SRTM 数据获取研究区 DEM 并导出,顺便聊聊怎么把 GEE 代码写得更专业! 先下结论:代码逻辑完整,3 处细节值得新手抄作业! 这版代码在数据加载→裁剪→可…

汽车安全 2030 预测 (功能安全FuSa、预期功能安全SOTIF、网络安全CyberSecurity):成本、效益与行业影响

汽车安全 2030 预测 (功能安全FuSa、预期功能安全SOTIF、网络安全CyberSecurity):成本、效益与行业影响 到 2030 年,汽车行业将迎来一场安全技术的深度变革,其中 “三重安全防护”(功能安全 FuSa、预期功能安全 SOTIF、网络安全&…

深入理解设计模式之状态模式

深入理解设计模式之:状态模式(State Pattern) 一、什么是状态模式? 状态模式(State Pattern)是一种行为型设计模式。它允许一个对象在其内部状态发生改变时,改变其行为(即表现出不…

Redis的大Key问题如何解决?

大家好,我是锋哥。今天分享关于【Redis的大Key问题如何解决?】面试题。希望对大家有帮助; Redis的大Key问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis中的“大Key”问题是指某个键的值占用了过多…

【STM32开发板】接口部分

一、USB接口 可以看到USBP和USBN与PA12,PA11引脚相接,根据协议,需要添加上拉电阻 二、ADC和DAC 根据原理图找到可以作为ADC和DAC的引脚 ADC和DAC属于模拟部分的,所以要接模拟地 三、指示灯电路 找几个通用的引脚,因为单片机的灌电流比拉电流…

[Hackers and Painters] 读书笔记 | 设计模式思想 | LISP

目录 黑客与艺术的关系 “如果你有两个选择,就选择较难的那个“ 金钱不等于财富。创造有价值的东西就是创造财富 项目公式 探讨关于优秀程序员的话题 摘抄 保罗格雷厄姆其人其事 人物经历 图书介绍 个人作品编辑 译者序 为什么书呆子不受欢迎 黑客与画…

Linux基本指令/下

目录 1.echo、cat与printf 2. > 操作符 与 >> 操作符 3. < 操作符 4.消息传送 linux文件深入 5.文件类型 6.mv命令 7.时间相关指令 8.查找命令 9.grep命令 10.zip/unzip/tar命令 11.scp命令 12.bc命令 13.uname 指令 14.快捷键大全 15.关机/重启/睡…

Apptrace:APP安全加速解决方案

2021 年&#xff0c;某知名电商平台在 “618” 大促期间遭遇 DDoS 攻击&#xff0c;支付系统瘫痪近 2 小时&#xff1b;2022 年&#xff0c;一款热门手游在新版本上线时因 CC 攻击导致服务器崩溃。观察发现&#xff0c;电商大促、暑期流量高峰和年末结算期等关键商业周期&#…

NodeJS全栈开发面试题讲解——P1Node.js 基础与核心机制

✅ 1.1 Node.js 的事件循环原理&#xff1f;如何处理异步操作&#xff1f; 面试官您好&#xff0c;我理解事件循环是 Node.js 的异步非阻塞编程核心。 Node.js 构建在 V8 引擎与 libuv 库之上。虽然 Node.js 是单线程模型&#xff0c;但它通过事件循环&#xff08;event loop&a…

【深度学习】sglang 的部署参数详解

SGLang 的部署参数详解 SGLang(Structured Generation Language)是一个高性能的大语言模型推理框架,专为结构化生成和多模态应用设计。本文将全面介绍SGLang的部署参数,帮助你充分发挥其性能潜力。 🚀 SGLang 项目概览 SGLang是由UC Berkeley开发的新一代LLM推理引擎,…