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

小谢在努力 2024-07-21 17:37:03 阅读 64

˃͈꒵˂͈꒱ 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安装即可

<code>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.针对配置⽂件设置符号链接

<code>cd /etc/

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

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

ll ./redis

4.修改配置文件

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

1.打开配置文件

<code>vim /etc/redis/redis.conf

2.设置 IP 地址

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

 找到下图的 bind

改成

<code>bind 0.0.0.0

 3.关闭保护模式

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

找到 protected-mode

修改成

<code>protected-mode no

4.启动守护进程

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

找到daemonize

修改成

<code>daemonize yes

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

先退出配置文件

创建工作目录和日志目录

mkdir -p /var/lib/redis

mkdir -p /var/log/redis

再次进入配置文件

找到 dir

修改成

<code>dir /var/lib/redis

找到 logfile

修改成

<code>logfile /var/log/redis/redis-server.log

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

 5.启动 redis

1.启动redis服务器

redis-server /etc/redis/redis.conf

2.打开redis的客服端

redis-cli

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

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

<code>set key 1 #创建键值对

get key #获得key的Value值

6.停⽌ redis服务器

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

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

<code>ps aux | grep redis

2.关闭 redis服务器

<code>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

<code>set key value

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

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

2.get

根据 key 来返回 value的值

如果 key不存在

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

2.keys

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

语法为

<code>keys patten

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

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

set hello 1

set hallo 2

set hllo 3

set heeello 4

set hhllo 5

set hbllo 6

1.? 匹配任意一个字符

<code>keys h?llo

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

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

<code>keys h*llo

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

<code>keys h[a,b,c]llo

 

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

<code>keys h[^e]llo

 

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

<code>keys h[a-d]llo

 

 6.注意事项

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

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

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

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

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

 3.exists

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

语法

<code>exists key ....

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

4.del

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

 语法

<code>del key...

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

5.expire

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

语法 

<code>expire key seconds#单位为秒

1.应用场景

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

 2.注意事项

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

pexpire key 毫秒

6. TTL

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

语法 

<code>ttl key

注意:如果键不存在或没有设置过期时间,返回 <code>-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 的数据类型是个很重要的事

语法 

<code>type key

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

set key1 1 #字符串

rpush key2 1 2 3 #列表

sadd key3 1 2 3 #集合

hset key4 field 1 #哈希表

<code>type key1

type key2

type key3

type key4

 9.info

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

<code>info + 选项

 

1.注意事项

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

敏感信息泄露

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

命令变体

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

输出格式

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

安全模式

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

日志和监控

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

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

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

 



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。