[Redis]基本全局命令

Redis存储方式介绍

在 Redis 中数据是以键值对的凡事存储的,键(Key)和值(Value)是基本的数据存储单元。以下是对 Redis 键值对的详细讲解:

键(Key):

类型:键是字符串类型,可以包含任何二进制数据。

长度限制:键的最大长度为 512 MB。

命名规范:虽然 Redis 对键的命名没有严格的要求,但为了提高可读性和管理性,通常使用有意义的命名规范。例如: session:abc123

值(Value):

值可以是多种数据类型之一,Redis 提供了丰富的数据结构来存储不同类型的数据:

比如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set,ZSet)、位图(Bitmap)、HyperLogLog、地理空间索引(Geospatial)、流(Stream)

这里以字符串类型举例,其他数据类型后面会介绍

基础全局命令介绍

设置和获取键值对(string)

这里操作就是这是一个key1 value1的键值对,key1为键,value1为值

设置好后,再用get命令获取到key1对应的值

获取到value1

检查键是否存在

exists key



因为有key1,所以使用key1可以查询到,返回了1

(这里也可以一次性查询多个key,返回就是有几个查到了,就返回几)

没有key2,查询不到,返回0

查找键

keys [pattern]

返回所有满足样式(pattern)的 key。支持如下统配样式。

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

 keys * 返回数据库中所有key

使用 keys 命令在 Redis 中有很大的风险,特别是在生产环境中。这是因为 keys 命令会扫描整个数据库并返回匹配指定模式的所有键。这种操作可能会对 Redis 服务器的性能产生严重影响,特别是在键数量较多的情况下。

keys命令的风险
  1. 性能问题

    • KEYS 命令是阻塞操作,会遍历整个数据库来查找匹配的键。
    • 在键数量较多时,执行 KEYS 命令可能会导致 Redis 服务卡顿,影响其他操作的响应时间。
    • 这种操作的时间复杂度为 O(N),其中 N 是数据库中的键数量。
  2. 阻塞客户端

    • 如果一个客户端执行 KEYS 命令,其他客户端的请求可能会被阻塞,直到 KEYS 命令执行完毕。
    • 在高并发场景下,这种阻塞可能导致大量请求堆积,造成 Redis 服务不可用。
  3. 内存消耗

    • KEYS 命令返回的结果集可能非常大,导致返回的数据量超出客户端的处理能力。
    • 结果集需要在内存中存储,可能导致 Redis 服务器的内存压力增大。

当然,也有其他命令可以代替keys,比如scan命令,后面会讲到。

在数据量很小的情况下,使用keys命令问题不大。

 删除键

del key

这里因为存在key1,所以使用del删除返回1,表示删除成功1个

但是key2不存在,没有删除任何key,返回0

设置过期时间

expire key seconds        (单位是秒)

pexpire key millisecond        (单位是毫秒)

设置key1,然后设置key1的过期时间为10秒

10秒后用exists查询,返回0,说明key1已经过期被删除了

查询键的剩余生存时间

TTL:获取键的剩余生存时间(单位是秒)

PTTL:获取键的剩余生存时间(单位是毫秒)

设置键值对并设置过期时间

用ttl和pttl查询剩余过期时间

过期后,key1被删除,返回-2

如果返回-1,说明key是永久存在的,没有设置过期时间

redis过期策略

Redis 通过多种策略来管理键的过期和内存回收

可以在redis系统文件的配置,也就是redis.conf里修改过期策略

1. 惰性删除(Lazy Deletion)

惰性删除策略意味着当客户端访问某个键时,Redis 会检查该键是否已经过期。如果该键已经过期,Redis 将立即删除它,并返回一个不存在的结果。

  • 实现方式
    • 每次读取或写入一个键时,Redis 都会检查该键的过期时间。
    • 如果过期时间已到,Redis 会删除该键,然后返回不存在的结果或进行相应的写操作。
  • 优点
    • 不会额外占用 CPU 资源,因为只在访问键时进行检查。
  • 缺点
    • 过期键在没有被访问时仍会占用内存。

2. 定期删除(Periodic Deletion)

定期删除策略是指 Redis 以固定的时间间隔对带有过期时间的键进行扫描和删除。

  • 实现方式
    • Redis 内部会运行一个后台任务,以每秒 10 次的频率随机抽取一部分带有过期时间的键进行检查。
    • 如果发现这些键已经过期,Redis 会删除它们。
  • 优点
    • 相对平衡了性能和内存回收的需求。
    • 可以在一定程度上避免大量过期键长时间占用内存。
  • 缺点
    • 由于是定期抽样检查,仍有可能存在一些过期键在被检查到之前长时间占用内存。

Redis 过期键处理策略(惰性删除和定期删除)是内置的,不需要特别配置。

但是可以通过以下配置调整定期删除的频率:(在redis.conf配置文件里)

hz 10
这表示 Redis 的事件循环频率,每秒执行 10 次事件循环。这个值会影响定期删除过期键的频率。

3. 主动删除(Active Deletion)

主动删除策略主要是通过内存淘汰策略(Eviction Policy)来实现,当 Redis 内存达到配置的最大使用量时,会主动删除一些键来释放内存。

  • 配置方式

    • 可以通过 maxmemory 配置项设置 Redis 的最大内存使用量。
    • 可以通过 maxmemory-policy 配置项设置内存淘汰策略,包括以下几种:
      • volatile-lru:从设置了过期时间的键中移除最近最少使用的键。
      • allkeys-lru:从所有键中移除最近最少使用的键。
      • volatile-lfu:从设置了过期时间的键中移除最不常使用的键。
      • allkeys-lfu:从所有键中移除最不常使用的键。
      • volatile-ttl:从设置了过期时间的键中移除将要过期的键。
      • noeviction:当内存达到限制时,不再进行删除操作,直接返回错误。
      • volatile-random:从设置了过期时间的键中随机移除键。
      • allkeys-random:从所有键中随机移除键。
  • 优点

    • 可以确保 Redis 在达到内存上限时继续运行。
    • 根据不同的策略,可以优化特定场景下的性能和内存使用。
  • 缺点

    • 可能导致一些热键(高频访问的键)被移除,从而影响性能。

4. 内存淘汰策略

当 Redis 内存使用达到限制时,会根据配置的内存淘汰策略删除一些键,以释放内存。以下是一些常用的内存淘汰策略:

  • LRU(Least Recently Used):删除最近最少使用的键。
  • LFU(Least Frequently Used):删除使用频率最少的键。
  • TTL(Time to Live):删除最早过期的键。
  • 随机删除:随机删除一些键。

可以通过 maxmemory-policy 配置项来设置具体的淘汰策略。

比如:

maxmemory-policy allkeys-lru

这表示当达到最大内存限制时,Redis 将采用 LRU策略在所有键中移除最近最少使用的键。

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

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

相关文章

全局配置路径无法识别的解决——后端

在全局配置路径reggie.path的时候,无法正常启动SpringBoot项目 Value("${reggie.path}")private String basePath; 查看application.yml的配置情况: 发现path没有起作用,推测是格式问题,冒号后面空格后即可

Web API——获取DOM元素

目录 1、根据选择器来获取DOM元素 2.、根据选择器来获取DOM元素伪数组 3、根据id获取一个元素 4、通过标签类型名获取所有该标签的元素 5、通过类名获取元素 目标:能查找/获取DOM对象 1、根据选择器来获取DOM元素 语法: document.querySelector(css选择…

第19讲:自定义类型:结构体

目录 1.结构体类型的声明1.1 结构体回顾1.1.1 结构的声明 特殊的结构声明1.3 结构的⾃引⽤ 2. 结构体内存的对齐2.2 为什么存在内存对⻬?2.3 修改默认对⻬数 3. 结构体传参4. 结构体实现位段4.1 什么是位段4.2 位段的内存分配4.3 位段的跨平台问题4.5 位段使⽤的注意事项 正文…

梳理 JavaScript 中空数组调用 every方法返回true 带来惊讶的问题

前言 人生总是在意外之中. 情况大概是这样的. 前两天版本上线以后, 无意中发现了一个bug, 虽然不是很大, 为了不让用户使用时感觉到问题. 还是对着一个小小的bug进行了修复, 并重新在上线一次, 虽然问题不大, 但带来的时间成本还是存在的. 以及上线后用户体验并不是很好. 问题…

JVM学习-垃圾收集器(二)

Serial回收器:串行回收 Serial收集器是最基本、历史最悠久的收集器JDK1.3之前新生代唯一的选择Hotpot中Client模式下的默认新生代垃圾收集器采用复制算法,串行回收“Stop-the-world”机制的方式执行内存回收除了年轻代之外,Serial收集器还提…

TG-5006CG温补晶振在WiFi6无线路由器模块的应用

WiFi6无线路由器是采用了wiFi6技术的无线网络设备,旨在为家庭、办公室或其他场所提供高速、稳定的无线网络连接。它不仅能实现更高的数据传输速率和更低的延迟,还提供了更先进的加密和安全措施,确保用户数据安全。为了支持这些高级功能&#…

深入 Rust 标准库,Rust标准库源代码系统分析

系列文章目录 送书第一期 《用户画像:平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …

Elasticsearch集群部署以及认证配置

文档地址: 官网文档地址: https://www.elastic.co/guide/index.html rpm包/源码下载地址:https://www.elastic.co/cn/downloads 源码安装-环境准备: node-01 192.168.95.174 node-02 192.168.95.173 node-03 …

【uniapp】CSS实现多行文本展开收起的文字环绕效果

1. 效果图 收起状态 展开状态 2. 代码实现 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

使用docker完整搭建前后端分离项目

1、docker的优势&#xff0c;为啥用docker 2、docker的核心概念 镜像【Image】- 只读模板 容器【Container】- 运行镜像的一个外壳&#xff0c;相当于一个独立的虚拟机 仓库【repository】- 镜像的管理工具&#xff0c;可公开&#xff0c;可私有&#xff1b;类似git仓库 3、c…

操作教程|通过DataEase开源BI工具对接金山多维表格

前言 金山多维表格是企业数据处理分析经常会用到的一款数据表格工具&#xff0c;它能够将企业数据以统一的列格式整齐地汇总至其中。DataEase开源数据可视化分析工具可以与金山多维表格对接&#xff0c;方便企业更加快捷地以金山多维表格为数据源&#xff0c;制作出可以实时更…

包拯断案 | MySQL5.7替换路上踩过的坑 一键get解决办法@还故障一个真相

提问&#xff1a;作为DBA运维的你&#xff0c;是否有过这些烦恼 1、业务系统进行替换投产时&#xff0c;发现数据库回放并行度低 2、虽然2个数据库集群使用同一份数据&#xff0c;却在关闭双一后&#xff0c;二级从库的回放效率依旧缓慢&#xff0c;不知是什么原因&#xff1f…

机器人开源项目分享,助力一户一机器人

最初&#xff0c;因隋炀帝思念心切&#xff0c;命工匠按照柳抃的形象制作了木偶机器人&#xff0c;被认为是历史上最早的机器人之一。这些木偶机器人通过精巧设计的机关&#xff0c;能够执行坐、起、拜、伏等动作。 如今&#xff0c;随着科技的发展&#xff0c;机器人已经广泛…

从ES5迈向ES6:探索 JavaScript 新增声明命令与解构赋值的魅力

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; ES5、ES6介绍 文章目录 &#x1f4af;声明命令 let、const&#x1f35f;1 let声明符&a…

Linux磁盘初始化与fstab文件更新

环境&#xff1a; Redhat 7.9 本文操作&#xff1a; >>给disk设置分区 &#xff08;fdisk&#xff09; >>给disk设置file system格式 (mkfs ) >>创建路径&#xff0c;并将disk mount上(mkdir和mount ) >>修改fstab文件 初始化Disk 初始化前&#xff…

【计算机网络原理】对传输层TCP协议的重点知识的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

桌面文件不见了怎么恢复?五种方法解决文件恢复难题,建议收藏

不小心误删除了桌面文件&#xff0c;导致文件丢失。事实上误删的文件并没有被永久删除&#xff0c;而是被移动到了回收站中&#xff0c;可以恢复这些文件。本文将分享多种方法&#xff0c;具体步骤如下。 方法一&#xff1a;从回收站中恢复 大多数操作系统都有回收站或垃圾桶的…

【C语言】结构体内存对齐:热门面试话题

&#x1f525;引言 书接上文&#xff0c;我们了解关于结构体的基本知识&#xff0c;这篇将深入剖析结构体中一个重要的知识点:内存对齐 关于内存对齐是属于热门面试话题&#xff0c;对此单独放在一篇来分享 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记…

3D工业视觉

前言 本文主要介绍3D视觉技术、工业领域的应用、市场格局等&#xff0c;主要技术包括激光三角测量、结构光、ToF、立体视觉。 一、核心内容 3D视觉技术满足工业领域更高精度、更高速度、更柔性化的需求&#xff0c;扩大工业自动化的场景。 2D视觉技术基于物体平面轮廓&#…

软件无线电学习-第二代移动通信系统过程理解

本文知识内容摘自《软件无线电原理和应用》 无线通信领域让大家感受最深的是民用移动通信的快速发展。民用移动通信在短短的二十年时间里已发展了三代&#xff1a;20世纪80年代的模拟体制(TACS/AMPS)为第一代移动通信(简称1G)&#xff1b;20世纪90年代的数字体制(GSMCDMATDMA)…