【redis】redix在Linux下的环境配置和redis的全局命令

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶​
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客

系列专栏:​ xiaoxie的redis学习系列专栏——CSDN博客●'ᴗ'σσணღ ​
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)!

目录

​编辑 一.redix在Linux下的环境配置

1.基于Centos下的环境配置

1.使用yum安装

 2.构建符号链接

 3.针对配置⽂件设置符号链接

4.修改配置文件

1.打开配置文件

2.设置 IP 地址

 3.关闭保护模式

4.启动守护进程

​编辑

5.设置工作目录和日志目录

 5.启动 redis

1.启动redis服务器

2.打开redis的客服端

6.停⽌ redis服务器

2.基于Ubuntu下的环境配置

二.redis的全局命令

1.get 和 set

2.keys

1.? 匹配任意一个字符

2. * 匹配任意多个字符包括0个

​编辑 

 3.[a,b,c]只能匹配括号里面的字符

4.[^e] 排除括号里的字符

5.[a-d]匹配字符a到字符d之间的字符,前闭后闭

 ​编辑

 6.注意事项

 3.exists

4.del

5.expire

1.应用场景

 2.注意事项

6. TTL

7.key的过期策略的实现(面试经典问题)

1.惰性删除

2.定期删除

3.内存淘汰机制

8.type

 9.info

1.注意事项

 


 一.redix在Linux下的环境配置

1.基于Centos下的环境配置

1.使用yum安装

1.如果你的Centos是Centos8的话,直接使用yum安装即可

yum install redis

但如果你的Centos是Centos7的话,就需要安装额外的软件源了,我们这边就需要先安装 scl 软件源

yum install centos-release-scl-rh
yum install rh-redis5-redis

注意这些操作都是要在root身份下进行的 

 2.构建符号链接

默认情况下,Redis 可能会被安装在一个比较深的目录中,例如 /opt/rh/rhredis5/root/usr/bin/。这样的路径不仅难记,而且在日常使用或编写脚本时输入起来也很不方便。

构建符号链接可以创建一个简短且易于记忆的访问路径,通常指向 Redis 的二进制文件(如 redis-serverredis-cli 等)。这样,你就可以在系统的任何地方轻松地调用这些工具,而无需指定完整的路径。例如,你可以将 redis-server 链接到 /usr/local/bin/redis-server,这是一个通常在系统 $PATH 环境变量中的目录,使得系统可以在任何路径下识别并执行该命令

1.首先进入 /usr/bin目录

cd /usr/bin

2. 构建符号链接

ln -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-sentinel ./redis-sentinel
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-cli ./redis-cli

构建完成后可以查看是否构建成功 

ll ./redis-server
ll ./redis-cli
ll ./redis-sentinel

如果出现上图这个样子就说明构建成功 

 3.针对配置⽂件设置符号链接

cd /etc/
ln -s /etc/opt/rh/rh-redis5/ ./redis

同理也可以查看是否构建成功

ll ./redis

4.修改配置文件

由于redis默认的配置文件,像只能在自己的主机上通信,保护模式不允许从任何主机访问 Redis 等等方面的原因,就需要我们手动的去修改

1.打开配置文件
vim /etc/redis/redis.conf
2.设置 IP 地址

使得 Redis 监听所有可用的网络接口

 找到下图的 bind

改成

bind 0.0.0.0
 3.关闭保护模式

 关闭保护模式允许从任何主机访问 Redis

找到 protected-mode

修改成

protected-mode no
4.启动守护进程

使得 Redis 以后台守护进程的方式运行。这对于生产环境是必要的,因为它允许 Redis 在用户退出 SSH 会话或关闭终端后继续运行 

找到daemonize

修改成

daemonize yes
5.设置工作目录和日志目录

先退出配置文件

创建工作目录和日志目录

mkdir -p /var/lib/redis
mkdir -p /var/log/redis

再次进入配置文件

找到 dir

修改成

dir /var/lib/redis

找到 logfile

修改成

logfile /var/log/redis/redis-server.log

 后续如果你还需要修改那些命令可以自行去修改,这里就介绍一些目前学习要用到的

 5.启动 redis

1.启动redis服务器
redis-server /etc/redis/redis.conf
2.打开redis的客服端
redis-cli

 出现下图就说明启动成功了

你可以创建一些值看一下是否可以使用 

set key 1 #创建键值对
get key   #获得key的Value值

6.停⽌ redis服务器

这里博主就不建议停止redis服务器,以免再次使用redis时还得打开服务器

1.先查看到redis-server的pid(进程ID)

ps aux | grep redis

2.关闭 redis服务器

kill 进程ID

 关闭后,执行第五步即可.

2.基于Ubuntu下的环境配置

 基于Ubuntu环境下其实步骤和基于Centos的步骤更简单,因为它不需要创建符号链接,其他的步骤都和Centos的步骤上的一样,除了使用安装的运营商不同.可以参考Centos的步骤

1.安装

apt install redis -y

不需要创建符号链接修改配置文件参考Centos的步骤,修改的内容是一样的没有差别

二.redis的全局命令

我们都知道redis支持多种数据结构,并且redis 是以键值对的形式来组织数据的,通过网络来传输数据,可以看成是一个联网的哈希表,其中 key 固定就是字符串的形式,Value 是可以以多种数据结构的形式存在的

既然可以以这么多数据结构来表示,就说明每个数据结构都有不同的redis命令,这些命令,博主后续会为大家介绍,而全局命令就是无论 Value是以什么样的数据结构所表示都可以使用的命令,全局命令其实还挺多的,博主这里就介绍一些日常工作学习比较常用的命令,其他的命令大家需要用到的时候可以去翻阅redis的官方文档来具体使用 Understand Redis data types | Docs

以上就是 Value目前可以以这些数据结构的形式来表示

1.get 和 set

属于Redis中最基础且广泛使用的命令,可以说只要你用redis就必须会到这两个命令

1.set

set key value

把key 和 value 存储到 redis 中,这个默认是字符串的形式的,value 以其他数据结构表示的有其他的更高效和精确的命令.

注意:redis是不区分大小写的,并且这里你加不加单引号或者双引号都可以.都是默认你存储的数据位字符串的形式

2.get

根据 key 来返回 value的值

如果 key不存在

如果key不存在就返回 nil 和 Java 的 null 与c++的NULL 一个意思,表示键不存在.

2.keys

用来查询当前服务器符合给定模式的 key 

语法为

keys patten

patten 主要是一些选项,支持一些通配符

解释之前我们先存储几个 key value 进去好做实验

set hello 1
set hallo 2
set hllo 3
set heeello 4
set hhllo 5
set hbllo 6

1.? 匹配任意一个字符

keys h?llo

可以看到 ? 可以只能匹配任意一个字符,所以就列出以下这些符合条件的 key

2. * 匹配任意多个字符包括0个

keys h*llo

 3.[a,b,c]只能匹配括号里面的字符

keys h[a,b,c]llo

 

4.[^e] 排除括号里的字符

keys h[^e]llo

 

5.[a-d]匹配字符a到字符d之间的字符,前闭后闭

keys h[a-d]llo

 

 6.注意事项

  1. 性能影响KEYS pattern 命令会遍历整个数据库来查找匹配给定模式的所有键,其时间复杂度为 O(N),其中 N 是数据库中的键的数量。这意味着,当数据库中包含大量键时,此命令可能会执行很长时间,严重阻塞其他操作,影响Redis服务器的响应速度和性能。

  2. 生产环境风险:由于 KEYS 命令可能引起服务器阻塞,因此强烈不建议在生产环境中使用。特别是在高负载或大数据量的场景下,使用 KEYS 可能会导致严重的服务中断或延迟问题。最主要是因为,redis引起服务器阻塞之后,那么大量的客服端请求就会访问MySQL数据库,导致数据库挂了,这将引起很大的损失

  3. 推荐在生产环境中使用 SCAN 命令作为 KEYS 的替代品。SCAN cursor [MATCH pattern] [COUNT count] 命令提供了更安全的方式来迭代键,它不会阻塞服务器,而是逐步返回匹配的键。通过使用 SCAN,你可以控制每次迭代返回的键的数量,降低对服务器的影响。

      4.无论是 KEYS 还是 SCAN,返回的键都是无序的,不能保证按照任何特定顺序排列。 

    5.谨慎使用模式匹配:在使用模式匹配时,应尽量避免使用过于宽泛的模式,比如 "*",这可能         导致返回大量键,即使使用 SCAN 也会消耗较多资源

 3.exists

   检查一个或多个key是否存在。返回存在的键的数量

语法

exists key ....

注意:这个操作的时间复杂度为 0(N) 这里N为要查询的 Key的数量,这是官方文档说明的,同时要注意能够写多个就写多个,尽量不要一个一个的去查询,因为exists 每次查询都需要访问到redis服务器,它们之间的通信是网络通信,所以性能会降低,并且还会消耗更多的系统资源

4.del

删除一个或多个键及其对应的值

 语法

del key...

注意:这个操作的时间复杂度为 0(N) 这里N为要删除的 Key的数量,这是官方文档说明的,同时要注意能够写多个就写多个,尽量不要一个一个的去删除,因为del 每次访问都需要访问到redis服务器,它们之间的通信是网络通信,所以性能会降低,并且还会消耗更多的系统资源  

5.expire

为键设置一个过期时间(单位为秒),超过此时间键将自动删除。

语法 

expire key seconds#单位为秒

1.应用场景

像手机收到的验证码,就是可以运用这个命令,规定在多少秒之后,就不生效了,还有像那些购物网站的优惠价也可以这样设置,超过多少时间就失效了,等等总之这个命令还是比较常用实用的. 通过合理使用 EXPIRE,开发者能够设计出更加高效、自动化的数据管理策略,提升系统的灵活性和健壮性。

 2.注意事项

该过期时间的时间单位为秒,如果你要想更精细的话,可以使用

pexpire key 毫秒

6. TTL

一般和expire搭配使用,查看 当前 key 的过期时间还剩多少

语法 

ttl key

注意:如果键不存在或没有设置过期时间,返回 -1 或 -2 分别表示。 

7.key的过期策略的实现(面试经典问题)

在实际开发中 一个 redis 中可能同时存在很多很多 key,这些 key 中可能有很大一部分都有过期时间.此时,redis 服务器如何知道哪些key 已经过期要被删除, 哪些 key 还没过期??

1.惰性删除

假设这个 key 已经到过期时间了,但是暂时还没删它,key 还存在.紧接着,后面又一次访问,正好用到了这个 key,于是这次访问就会让 redis 服务器触发删除 key 的操作,同时再返回一个 nil,这种方式虽然降低了性能开销,但可能造成过期键占用内存较长时间,比较不一定会去访问过期的键.

2.定期删除

为了弥补惰性删除可能带来的内存占用问题,Redis还会周期性地执行一个称为“过期键检查”的操作。在这个操作中,Redis会遍历数据库中的部分键,检查并删除已过期的键。这个过程不是一次性检查所有键,而是分批进行,以避免对服务器造成太大压力。定期删除的频率和每次检查的键的数量可以通过配置参数调整,以达到内存使用和性能之间的最佳平衡。

3.内存淘汰机制

虽然有了上述两种策略结合,整体的效果一般仍然可能会有很多过期的 key 被残留了,没有及时删除掉,redis 为了对上述进行补充,还提供了一系列的内存淘汰策略.例如,如果数据访问具有明显的热点,使用LRU或LFU淘汰机制;如果数据大部分都设置了过期时间,使用volatile相关的策略可以更针对性地管理内存。正确配置淘汰策略对保持Redis服务的稳定性和性能至关重要。 

8.type

返回key所存储的value的类型。

redis的 value 是可以以多种数据结构形式来表示的,每个数据结构的 redis 命令 都会有所不同,所以我们知道相应的 value 的数据类型是很重要的 特殊是当数据量特别大的时候,知道value 的数据类型是个很重要的事

语法 

type key

为了实验这个命令我们要设置不同类型value

set key1 1 #字符串
rpush key2 1 2 3 #列表
sadd key3 1 2 3 #集合
hset key4 field 1 #哈希表

type key1
type key2
type key3
type key4

 9.info

提供关于Redis服务器的各种信息,包括服务器状态、客户端连接、内存使用情况、持久化、复制等。

info + 选项

 

1.注意事项
  1. 性能影响:尽管 INFO 命令是非常有用的诊断工具,但它需要Redis服务器收集并返回大量信息,这可能会对服务器性能产生短暂影响,尤其是在高负载情况下。频繁调用 INFO 可能会增加服务器负担,尤其是在生产环境中。

  2. 敏感信息泄露

    • INFO 命令提供了详细的服务器状态信息,包括配置、统计、内存使用情况等。在某些配置下,它还可能暴露密码(如 replication password)、服务器地址等敏感信息。因此,在公开或不可信的环境中使用时要格外小心,考虑使用 INFO 命令的子命令来限制输出的信息范围,如 INFO replication 只查看复制相关信息。
  3. 命令变体

    • Redis 提供了 INFO 命令的几个变体,如 INFO memoryINFO clients 等,它们分别提供特定领域的详细信息。使用这些变体而不是全量的 INFO 可以减少数据传输量,减轻服务器压力。
  4. 输出格式

    • INFO 命令的输出默认为文本格式,但可以通过在命令后加上 json 参数(如 INFO json)来获取JSON格式的输出,便于程序解析和自动化处理。
  5. 安全模式

    • 在Redis 5.0及以后版本中,引入了 INFO 命令的安全模式。使用 INFO 时加上 --section 参数(例如 INFO --section server),可以限制输出内容,避免敏感信息泄露。
  6. 日志和监控

    • 定期使用 INFO 收集的统计数据对于性能监控和故障排查非常重要。但应该通过脚本或工具自动化这一过程,并合理安排执行频率,避免对生产环境造成不必要的干扰。

总之,INFO 是一个强大的命令,使用时应权衡获取信息的需求与对系统性能的影响,特别是在生产环境中要谨慎处理,确保信息安全。

以上就是一些常用的全局命令,还是那句话,博主只深入介绍几个比较常用的全局命令,可能还有一些遗漏的命令,博主在后续的文章里也会继续讲解说明.如果遇到了不懂或者是需要用到其他的全局命令的时候,那就是去看官方文档.文档上的一定是正确的,并且是最新的.好了就介绍到这了,如果在配置环境上有什么不懂的可以私聊博主,或者加文末的微信,后续的内容,博主也在持续更新中,如果感兴趣的话可以关注一手,谢谢你的阅读,祝你一天愉快.

 

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

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

相关文章

学习Rust的第25天:Rust中的mkdir

为了实现重建 GNU 核心实用程序的崇高目标,今天的工具是 mkdir 我们用来在 Linux 上创建目录的工具。让我们开始吧。 Pseudo Code 伪代码 args command_line_arguments remove the first element of the args vector if args.length 0 {print error_message } els…

STM32学习和实践笔记(24):PWM输出实验:呼吸灯

本实验所要实现的功能是:通过TIM3的CH1输出一个PWM信号,控制D7指示 灯由暗变亮,再由亮变暗,类似于人的呼吸。程序框架如下: (1)初始化PC6管脚为PWM输出功能 (2)PWM输出…

RAG应用全流程

RAG全流程 前提训练一个语义模型(高精度,低精度)训练一个大模型一个知识库一个精度高知识向量库(知识分割后输入高精度语义模型得到)一个精度低知识向量库(知识分割后输入低精度语义模型得到) 应…

基于寄存器的STM32操作流程

寄存器点灯 寄存器操作STM32的好处是不需要依靠外部文件,自由度更高,更为底层,但也更加繁杂。 通过寄存器点灯,需要按照电路结构与手册配置寄存器: 电路结构如下:可知需配置的GPIO为GPIOB5与GPIOE5。 在…

TLV61070A具有0.5V超低输入电压的2.5A同步整流升压转换器适合超级电容供电

前言 最大特点是输入电压可低至0.5V(启动时的最小输入电压为 1.3V),适合作为超级电容的升压转换 特性 输入电压范围:0.5V 至 5.5V 启动时的最小输入电压为 1.3V 输出电压设置范围:2.2V 至 5.5V 两个 69mΩ (LS)/89m…

gitlab设置保护分支

gitlab设置保护分支方法 进入代码仓库首页,找到settings下的repository并点击进入 找到Protected Branches 下的Exoand按钮,并点击展开 可以看到已经存在默认的保护分支,通常是master/main分支,也可以添加新的保护分支 新建保护分…

Debian操作系统的常用指令介绍

Debian是一个流行的Linux操作系统,以其稳定性和安全性而闻名。对于Debian用户来说,掌握一些基本的命令行指令是非常重要的,因为它们可以帮助你更高效地管理系统。在这篇博客中,我们将介绍一些在Debian系统中常用的指令及其功能。 …

13.1 QQ邮箱

1. 邮箱发送 2. 准备工作 3. 整合SpringBoot 3.1 配置 依赖引入 <!-- 邮件服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>application.…

不讲武德,能怼哭你的Chatgpt

这几天逛网站的时候突然发现个新玩意儿&#xff0c;叫做Chatgpt Onima&#xff0c;乍一看&#xff0c;哦原来是Chatgpt 但是&#xff0c;Onima是什么东东&#xff1f;它是我见过最狂的AI Onima 我礼貌的问了一句&#xff1a;你在干嘛&#xff1f; 结果它回复 不知这个攻击性…

通义灵码:智能编码的革命性助手

通义灵码是由阿里云推出的一款基于通义大模型的智能编码辅助工具&#xff0c;它通过先进的人工智能技术&#xff0c;为开发者提供了一系列的智能编码功能&#xff0c;极大地提升了编码效率和质量。以下是通义灵码的一些核心功能和应用案例。 核心功能 代码智能生成 通义灵码…

你知道JSON.stringify()实现拷贝有什么问题吗?

在说 JSON.stringify() 深拷贝之前&#xff0c;我们先说一说深拷贝和浅拷贝的事情吧。 目录 1 为什么要做深拷贝&#xff1f; 2 哪些做法算浅拷贝&#xff1f; 2.1 直接变量赋值 2.2 Object.assign 浅拷贝 3 哪些做法算深拷贝 &#xff1f; 3.1 JSON.stringify() 3.2 …

SpringBoot实现图片上传(个人头像的修改)

SpringBootlayui实现个人信息头像的更改 该文章适合对SpringBoot&#xff0c;Thymeleaf&#xff0c;layui入门的小伙伴 废话不多说&#xff0c;直接上干货 Springbootlayui实现头像更换 前端公共部分代码 HTML页面代码 <div class"layui-card-header" style&quo…

20240502解决ARM32编译器编译quectel-CM时for循环出错的解决

20240502解决ARM32编译器编译quectel-CM时for循环出错的解决 2024/5/2 17:17 缘起&#xff1a;QMIThread.c:2100:9: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode 1、修改Makefile为ARM32架构&#xff1a; Z:\quectel-CM\Makefile ifneq ($…

基于SpringBoot+Vue的旅游网站系统

初衷 在后台收到很多私信是咨询毕业设计怎么做的&#xff1f;有没有好的毕业设计参考?能感觉到现在的毕业生和当时的我有着同样的问题&#xff0c;但是当时的我没有被骗&#xff0c;因为现在很多人是被骗的&#xff0c;还没有出学校还是社会经验少&#xff0c;容易相信别人。…

【算法设计与分析】实验报告c++python实现(TSP问题、哈夫曼编码问题、顾客安排问题、最小生成树问题、图着色问题)

一、实验目的 1&#xff0e;加深学生对贪心算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 用贪心算…

Spring基于AspectJ实现验签切点

文章目录 引言I AspectJ 依赖II 验签切点2.1 匹配方法执行的连接点2.2 设置带有CustomAnnotation注解的方法为切点III 案例:验签2.1 用法2.2 定义注解2.3 定义切面和切点引言 需求:验签 实现:基于AspectJ实现验签切点 I AspectJ 依赖 AspectJ 是一个基于 Java 语言的 AOP …

go稀疏数组

稀疏数组 稀疏数组 稀疏数组 package testimport ("encoding/json""fmt""io/ioutil""log""reflect""testing" )type ValNode struct {Row int json:"row"Col int json:"col"Val int json:&qu…

Spring Cloud Kubernetes 实践 服务注册发现、服务动态配置

一、Spring Cloud Kubernetes 随着云计算和微服务架构的不断发展&#xff0c;k8s 和Spring Cloud成为了当今技术领域的两大热门话题。k8s作为一个开源的容器编排平台&#xff0c;已经在自动化部署、扩展和管理方面取得了巨大的成功&#xff0c;而Spring Cloud则以其丰富的生态…

MFC 列表控件修改实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载&#xff09;》 2、程序功能选中列表控件某一项&#xff0c;修改这一项的按钮由禁止变为可用&#xff0c;双击这个按钮弹出对话框可对这一项的记录数据进行修改&#xff0c;点击确定保存修改数…

基于Spring Boot的体质测试数据分析及可视化系统设计与实现

基于Spring Boot的体质测试数据分析及可视化系统的设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台首页界面图&#xff0c;体质测试…