Redis键(Keys)

前言

在 Redis 中,键(Keys)是非常重要的概念,它们代表了存储在数据库中的数据的标识符。对键的有效管理和操作是使用 Redis 数据库的关键一环,它直接影响到数据的存取效率、系统的稳定性和开发的便利性。

本文将深入探讨 Redis 中键的管理和操作,包括键的命名规范、常用的键操作命令以及一些最佳实践。我们将详细介绍如何合理命名键、如何使用键的过期和持久化特性、如何批量删除键等技巧,旨在帮助读者更好地理解并灵活运用 Redis 中的键,从而提高数据管理和操作的效率和可靠性。

Redis键是二进制安全的,这意味着你可以使用任何二进制序列作为键,从像”foo” 这样的字符串到一个 JPEG文件的内容。空字符串也是合法的键。

一、键的一些设计规则

  • 不要使用太长的键。例如,不要使用一个1024字节的键,不仅是因为占用内存,而且在数据集中查找key时需要多次耗时的key比较。

  • 不要使用太短的key。例如,user:1001比u1001更具有实际意义,相对于key本身以及value对象来说,增加的空间微乎其微。当然,短的键会消耗少的内存,需要找到平衡点。

  • 规范一种模式 (schema)。用冒号或者下横线来连接多单词字段,例如:”user:1001”或者"user_1001"。

二、Key的常用API

1、KEYS 返回指定pattern的所有key
语法:keys pattern

MSET user:1001 user1 user:1002 user2 addr:1001 guangzhou addr:1002 zhuhai

这条命令将会把以下键值对设置到 Redis 中:

  1. 键 "user:1001" 对应的值为 "user1"
  2. 键 "user:1002" 对应的值为 "user2"
  3. 键 "addr:1001" 对应的值为 "guangzhou"
  4. 键 "addr:1002" 对应的值为 "zhuhai"

通过这样的方式,你可以一次性地设置多个键值对,这在某些场景下可以提高效率。

"KEYS" 命令用于搜索并返回与给定模式匹配的键名列表。在你的例子中,你使用了以下命令:

  1. "KEYS user*":返回所有以 "user" 开头的键名列表。
  2. "KEYS addr*":返回所有以 "addr" 开头的键名列表。
  3. "KEYS *":返回所有键名的列表。

需要注意的是,"KEYS" 命令在 Redis 中是一个相对较慢的操作,特别是当 Redis 有大量键时。它会遍历整个键空间来匹配模式,并返回匹配的键名列表。因此,在生产环境中使用 "KEYS" 命令要谨慎,以免对 Redis 性能造成影响。

2、EXISTS 判断一个key是否存在。存在返回后1,否则返回0。
语法:exists key

"EXISTS user:1001" 命令用于检查键名为 "user:1001" 的键是否存在。

执行该命令后,如果键 "user:1001" 存在,命令将返回 1;如果键不存在,命令将返回 0。

这个命令通常用于检查某个键是否存在,以便进行相应的处理或判断条件。

 

3、RENAME 重命名key
语法:rename key newkey

"RENAME user:1001 user_1001" 命令的作用是将键名为 "user:1001" 的键重命名为 "user_1001"。

执行该命令后,原来的键名 "user:1001" 将被修改为 "user_1001",但是键的值不会发生变化。这样可以通过修改键名来更好地组织和管理键的集合。

需要注意的是,如果在执行重命名操作时,新的键名已经存在,则新的键名对应的值将被覆盖。所以请确保新的键名不会与其他键名冲突。

4、TYPE  根据key返回value的类型。
语法:type key

"TYPE user:1002" 命令用于获取键名为 "user:1002" 的键存储的值的数据类型。

该命令返回的结果可能是以下几种数据类型之一:

  • "string":表示存储的值是字符串类型。
  • "list":表示存储的值是列表类型。
  • "set":表示存储的值是集合类型。
  • "zset":表示存储的值是有序集合类型。
  • "hash":表示存储的值是哈希类型。
  • "none":表示键不存在。

执行 "TYPE user:1002" 命令后,返回的结果将是上述数据类型之一,指示键存储值的类型。如果键不存在,则返回 "none"。

 

5、EXPIRE
语法:expire key seconds

设置key的生存时间。Redis的数据是缓存在内存中的,然后很多时候数据一般都会设置一个过期时间(即到期后销毁数据,从而释放更多的内存)。过期时间默认以秒为单位,默认值为-1,表示永不过期。

"EXPIRE user:1002 3600" 命令的意思是将键名为 "user:1002" 的键设置为具有过期时间。该键将在 3600 秒(即 1 小时)后自动过期并被删除。

这条命令用于设置键的过期时间,让键在一定时间后自动失效。在上述例子中,执行命令后,键 "user:1002" 将在 1 小时后自动过期。

当键过期时,它将从 Redis 中自动删除,这可以用于在缓存数据或临时数据中设置一个固定的有效期。

也可以在设值的时候指定过期时间(秒)

  1. SET user:1001 user1 EX 1000" 命令的意思是将键名为 "user:1001" 的键设置为值 "user1",并设置其过期时间为 1000 秒。这意味着在 1000 秒后,Redis 将自动删除这个键。

  2. "TTL user:1001" 命令用于获取键名为 "user:1001" 的键的剩余过期时间(Time To Live,以秒为单位)。如果键存在且具有设置的过期时间,命令返回键的剩余过期时间;如果键不存在或者没有设置过期时间,命令返回 -1。如果键已经过期,命令返回 -2。

因此,执行完 "SET user:1001 user1 EX 1000" 后,可以通过 "TTL user:1001" 命令来查询键 "user:1001" 的剩余过期时间,以了解该键距离过期还有多长时间。

这些命令通常用于对某些数据进行临时性存储或缓存,并检查该数据是否已经过期。

6、TTL 查看key剩余的过期时间。
语法:ttl key

 "TTL user:1001" 命令用于获取键名为 "user:1001" 的键的剩余过期时间(Time To Live,以秒为单位)。

如果键存在且具有设置的过期时间,命令返回键的剩余过期时间;如果键不存在或者没有设置过期时间,命令返回 -1。如果键已经过期,命令返回 -2。

这个命令通常用于检查某个键是否还有剩余的过期时间,以及了解数据的实效性。

7、PERSIST 清除key的过期时间。
语法:persist key

 "PERSIST user:1002" 这条命令的意思是将键名为 "user:1002" 的键的过期时间移除,使其永久保存在 Redis 中,不再具有过期时间。

"TTL user:1002" 命令用于获取键名为 "user:1002" 的键的剩余过期时间(Time To Live,以秒为单位),与之前提到的功能相同。

如果键存在且具有设置的过期时间,"TTL user:1002" 命令返回键的剩余过期时间;如果键不存在或者没有设置过期时间,命令返回 -1。如果键已经过期,命令返回 -2。

因此,当你执行 "PERSIST user:1002" 命令后,键 "user:1002" 将不再具有过期时间,成为永久保存的键,除非你手动删除它。

 8、PEXPIRE 以毫秒为单位设置key的过期时间。
语法:pexpire key

设置键名为 "user:1002" 的键在 60 毫秒后过期。换句话说,60 毫秒后 Redis 将自动删除这个键。 

也可以在设值的时候指定过期的时间(毫秒)  

 "SET user:1001 user1 PX 10000" 这条命令的意思是将键名为 "user:1001" 的键设置为值 "user1",并设置其过期时间为 10000 毫秒(即 10 秒)。在 10 秒后,Redis 将自动删除这个键。

"TTL user:1001" 命令用于获取键名为 "user:1001" 的键的剩余过期时间(Time To Live,以秒为单位)。如果键存在且具有设置的过期时间,命令返回键的剩余过期时间;如果键不存在或者没有设置过期时间,命令返回 -1。如果键已经过期,命令返回 -2。

三、使用 redis keys有什么好处

 使用 Redis 的 KEYS 命令有以下几个好处:

  1. 模式匹配:KEYS 命令可以根据指定的模式来搜索并返回与之匹配的键名列表。这对于需要按照特定模式进行键名查询或操作的情况非常有用。例如,你可以使用 KEYS user:* 来获取所有以 "user:" 开头的键。

  2. 批量操作:通过获取符合特定模式的键名列表,你可以方便地对这些键进行批量操作。例如,你可以使用 DEL 命令删除匹配的键,或者使用 GET 命令获取匹配的键的值。

  3. 快速检索:当你需要快速检索某个特定模式的键时,KEYS 命令可以提供一个简单的方式。你可以使用通配符来匹配键名,以获取所需的键列表。

需要注意的是,KEYS 命令在处理大量键时可能会对 Redis 服务器的性能产生影响。因此,在生产环境中,如果只需要获取匹配的键名数量或者进行遍历操作,更好的选择是使用 SCAN 命令,它以游标方式逐步迭代键空间,避免对服务器性能造成负担。

总体而言,KEYS 命令在特定的使用场景下是非常方便的,但需要谨慎使用以避免对 Redis 性能产生不利影响。

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

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

相关文章

腾讯云轻量服务器购买优惠,腾讯云轻量应用服务器优惠购买方法

你是否曾经为如何选择合适的服务器而苦恼?在互联网的海洋中,如何找到一个性价比高,性能稳定,价格合理的服务器供应商,确实是一个让人头疼的问题。今天,我要向你介绍的,是腾讯云轻量应用服务器的…

Visual Studio Code配置c/c++环境

Visual Studio Code配置c/c环境 1.创建项目目录2.vscode打开项目目录3.项目中添加文件4.文件内容5.配置编译器6.配置构建任务7.配置调试设置 1.创建项目目录 d:\>mkdir d:\c语言项目\test012.vscode打开项目目录 3.项目中添加文件 4.文件内容 #include <iostream> u…

YOLOv5项目实战(3)— 如何批量命名数据集中的图片

前言:Hello大家好,我是小哥谈。本节课就教大家如何去批量命名数据集中的图片,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目实战(2࿰

MIB 6.1810实验Xv6 and Unix utilities(2)sleep

难度:easy Implement a user-level sleep program for xv6, along the lines of the UNIX sleep command. Your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between two interrupts f…

【Nginx】使用nginx进行反向代理与负载均衡

使用场景 反向代理&#xff1a;一个网站由许多服务器承载的&#xff0c;网站只暴露一个域名&#xff0c;那么这个域名指向一个代理服务器ip&#xff0c;然后由这台代理服务器转发请求到网站负载的多台服务器中的一台处理。这就需要用到Nginx的反向代理实现了 负载均衡&#xf…

AWD比赛中的一些防护思路技巧

## 思路1&#xff1a; 1、改服务器密码 &#xff08;1&#xff09;linux&#xff1a;passwd &#xff08;2&#xff09;如果是root删除可登录用户&#xff1a;cat /etc/passwd | grep bash userdel -r 用户名 &#xff08;3&#xff09;mysql&#xff1a;update mysql.user set…

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

Golang实现一个一维结构体,根据某个字段排序

package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…

MHA实验和架构

什么是MHA&#xff1f; masterhight availabulity&#xff1a;基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap&#xff0c;Kotlin fun getOriginalBitmap(resId: Int): Bitmap {val options BitmapFactory.Options()options.inJustDecodeBounds true //只解析原始图片的宽高&#xff0c;不decode原始文件装载到内…

​软考-高级-系统架构设计师教程(清华第2版)【第5章 软件工程基础知识(190~233)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第5章 软件工程基础知识&#xff08;190~233&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

如何在聊天记录中实时查找大量的微信群二维码

10-5 如果你有需要从微信里收到的大量信息中实时找到别人发到群里的二维码&#xff0c;那本文非常适合你阅读&#xff0c;因为本文的教程&#xff0c;可以让你在海量的微信消息中&#xff0c;实时地把二维码自动挑出来&#xff0c;并且帮你分类保存。 如果你是做网推的&#…

C++初阶-内存管理

内存管理 一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式new/delete操作内置类型new和delete操作自定义类型 四、operator new与operator delete函数operator new与operator delete函数 五、new和delete的实现原理内置类…

【React】React-Redux基本使用

容器组件和 UI 组件 所有的 UI 组件都需要有一个容器组件包裹 容器组件来负责和 Redux 打交道&#xff0c;可以随意使用 Redux 的API UI 组件无任何 Redux API 容器组件用于处理逻辑&#xff0c;UI 组件只会负责渲染和交互&#xff0c;不处理逻辑 在我们的生产当中&#xff0…

Spring Boot EasyPOI 使用指定模板导出Excel

相信大家都遇到过&#xff0c;用户提出要把界面上的数据导成一个Excel&#xff0c;还得是用户指定的Excel格式&#xff0c;用原生的POI&#xff0c;需要自己去实现&#xff0c;相信是比较麻烦的&#xff0c;所以我们可以使用开源的EasyPOI. 先上个图&#xff0c;看看是不是大家…

GPTS全网刷屏!定制增长速度指数增长

还记的上周OpenAI刚刚举行完开发者大会&#xff0c;在大会上主要公布了三个事情&#xff1a; 新版本的GPT-4 Turbo&#xff1a;更强大、更便宜且支持128K新的助手API&#xff1a;让开发者更轻松地基于GPT构建辅助AI应用平台中新的多模态功能&#xff1a;包括视觉、图像创作&am…

springcloud旅游网站源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;nodejs&#xff0c;vscode springcloud springboot mybatis vue 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索景区&#xff0c;轮播图&#xff0c;旅游攻略列表 点击攻…

ERP管理系统:企业升级的秘密武器

ERP管理系统&#xff1a;企业升级的秘密武器 在当今快速发展的商业环境中&#xff0c;企业要想保持竞争力&#xff0c;就必须不断进行自我升级。而在这个过程中&#xff0c;ERP管理系统以其强大的功能和优化流程的能力&#xff0c;逐渐成为了企业升级的秘密武器。 一、ERP管理…

解决 vue3 element 表格和图片预览样式有冲突

查看表格中的预览出现样式问题冲突 <el-image:src"${realSrc}"fit"cover":style"width:${realWidth};height:${realHeight};":preview-src-list"realSrcList":append-to-body"true"><template #error><div c…

Docker启动SRS流媒体服务器

一、安装Docker 1.1、下载windows桌面版Windows 1.2、配置镜像 镜像加速器镜像加速器地址Docker 中国官方镜像https://registry.docker-cn.comDaoCloud 镜像站http://f1361db2.m.daocloud.ioAzure 中国镜像https://dockerhub.azk8s.cn科大镜像站https://docker.mirrors.ustc…