[Redis]基本全局命令

news2024/11/15 13:00:47

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.coloradmin.cn/o/1685608.html

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

相关文章

论文精读--InstructGPT

模型效果取决于数据效果,但在精细度上控制不够,只是大力出奇迹,这样有很大的问题: (1)数据量太多或者没有这方面的数据,模型学不会怎么办 (2)安全性问题,模…

c语言:利用随机函数产生20个[120, 834] 之间互不相等的随机数, 并利用选择排序法将其从小到大排序后输出(每行输出5个)

利用随机函数产生20个[120, 834] 之间互不相等的随机数&#xff0c; 并利用选择排序法将其从小到大排序后输出&#xff08;每行输出5个&#xff09; 代码如下&#xff1a; #include <stdio.h> #include <time.h> #include <stdlib.h> int shenchen(int a[…

信息系统项目管理师0126:输入(8项目整合管理—8.6管理项目知识—8.6.1输入)

点击查看专栏目录 文章目录 8.6 管理项目知识8.6.1 输入8.6 管理项目知识 管理项目知识是使用现有知识并生成新知识,以实现项目目标并且帮助组织学习的过程。管理项目过程的主要作用: 利用已有的组织知识来创造或改进项目成果;使当前项目创造的知识可用于支持组织运营和未来…

解决Vscode打开新文件会覆盖旧文件

现象&原因 现象&#xff1a;Vscode左侧点击新文件&#xff0c;右侧重用预览编辑器&#xff0c;新文件会替换旧文件原因&#xff1a; 默认单击是预览编辑器显示&#xff0c;双击是保持打开状态 解决方案 以下两种都可以 设置里搜索 Enable Preview 默认是勾选状态&#x…

京东科技市场与平台运营中心PMO负责人徐雪娇受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 京东集团京东科技市场与平台运营中心PMO负责人徐雪娇女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“AI数字人项目全过程管理实践分享”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&…

springboot vue 开源 会员收银系统 (4) 分类及商品模块开发

前言 完整版演示 前面我们对会员系统 门店模块开发的开发 完成了门店的基础管理 并与会员相关联 下面我们将开发门店的分类及商品管理 我们分析以下几个重点 分类可以随时禁用不用单独下架某个商品便于管理商品添加应该有图片上传商品设置会员价和散客价便于营销商品应该参与…

解决updateByExample时属性值异常的问题(部分属性值没有使用占位符?进行占位,而是变成了属性的名称)

目录 场景简介代码片断实体类 报错信息排查原因解决测试过程解决方案 场景简介 1、程序将mybatis框架升级为3.5.9版本后执行updateByExample方法时报错 代码片断 Condition condition new Condition(MbCcsSessionConfig.class); condition.createCriteria().andEqualTo(&quo…

[STM32-HAL库]Flash库-HAL库-复杂数据读写-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C6T6

目录 一、前言 二、实现步骤 1.STM32CUBEMX配置 2.导入Flash库 3.分析地址范围 4.找到可用的地址 5.写入读取普通数据 6.写入读取字符串 6.1 存储相关信息 6.2 存取多个参数 三、总结及源码 一、前言 在面对需要持久化存储的数据时&#xff0c;除了挂载TF卡&#xff0c;我们…

【线段图案】

描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的线段图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;1~100&#xff09;&#xff0c;表示线段长度&#xff0c;即“*”的数量。 输出描述…

.NET Core Web Api Swagger运行异常

遇到的问题 因为新增了一个控制器方法&#xff0c;从而导致在运行Swagger的时候直接报错&#xff0c;异常如下&#xff1a; SwaggerGeneratorException: Conflicting method/path combination "POST api/UserOperationExample" for actions - WebApi.Controllers.Us…

HCIP-Datacom-ARST自选题库__MPLS简答【4道题】

1.如图所示&#xff0c;R1、R2、R3、R4处于同一个MPLS域&#xff0c;且设备之间采用LDP分配MPLS标签&#xff0c;R4为4.4.4.0/24这条FEC的EgressLSR。若想实现R1访问4.4.4.0/24时&#xff0c;R4不需要查询标签表但能够了解该数据的转发优先级&#xff0c;则R3对于该FEC的出标签…

Linux中vim的基本使用

目录 vim中的三种模式以及基本操作命令模式(默认模式)插入模式底行模式 命令模式下的命令底行模式下的命令 vim是Linux和Unix环境下最基本的文本编辑器&#xff0c;类似于windows上的记事本 vim和Visual studio相比&#xff0c;vim并不集成&#xff0c;vim只能用来写代码 VS把写…

第六节 自动装配源码理解

tips&#xff1a;不同版本代码实现有差异。 前面两章了解的流程&#xff0c;就是 SpringBoot 自动转配的核心。 一、自动装配 1.1 什么是 SpringBoot 自动装配? 自动装配是 Spring 框架用来减少配置的显式需求而引入的一个特性&#xff0c;该特性通过 Autowired或者Resource…

Unity Terrain Adjust插件使用教程

一、Terrain Adjust插件介绍 二、插件下载以及导入 1、官方下载地址&#xff1a;Terrain Adjust 2、积分下载地址&#xff1a;Terrain Adjust 下载好之后&#xff0c;回到Unity当中&#xff0c;导入下载好之后的unitypackage包 三、插件使用 1、在使用之前一定要在场景中新…

KuberSphere 安装kubernates

准备机器 最少3台机器 centos Linux 内核&#xff1a;官方建议 3.10 以上 uname -rcontrol 一台 配置 2c 4g worker 二台 配置 2c 4g 3台设备需要用不同的hostname&#xff0c;需要提前修改 hostnamectl set-hostname <新的主机名> # 修改后执行一下命令刷新一下 su -…

【Android】联系人列表补充

真布局--叠起来垂直管 效果展示 部分代码&#xff08;在activity_main&#xff09;里面 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

自动驾驶决策规划——坐标转换

以下内容来自b站up主忠厚老实的老王&#xff0c;视频链接&#xff1a;自动驾驶决策规划算法序章 总纲与大致目录_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1hP4y1p7es/?spm_id_from333.999.0.0&vd_sourced36e625f376908cfa88ef5ecf2fb0ed8侵删。 决策规划算法…

解除网页禁止选择

控制台输入以下命令 复制&#xff1a;javascript:void(document.body.οncοpy) 可选&#xff1a;javascript:void(document.body.onselectstart) 拖拉&#xff1a;javascript:void(document.body.οnmοuseup)

SecureFX 9.5.2 SecureCRT 9.5.2 官方下载

SecureCRT是一款由VanDyke Software公司开发的终端仿真软件&#xff0c;它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT专门为网络管理员、系统管理员和其他需要保密访问网络设备的用户设计。 SecureCRT具有以下特点&#xff1a; 安全性&#xff1a;SecureCRT支持…

什么是安全左移如何实现安全左移

文章目录 一、传统软件开发面临的安全挑战二、什么是安全左移四、安全左移与安全开发生命周期&#xff08;SDL&#xff09;三、安全左移对开发的挑战五、从DevOps到DevSecOps六、SDL与DevSecOps 一、传统软件开发面临的安全挑战 传统软件开发面临的安全挑战主要包括以下几个方…