Redis常见命令和使用示例

news2024/10/5 15:32:45

目录

1.使用官方文档学习redis

2.核心命令

SET

GET

3.全局/通用命令

KEYS

EXISTS

DEL

EXPIRE

TTL

TYPE


1.使用官方文档学习redis

redis官网

 点击搜索,输入,比如输入ping,会显示Commands,是一个命令,点击ping,跳转到用法页面

有详细的解释

 左侧有非常多的命令可供学习,也有中文文档

2.核心命令

注意:redis的命令不区分大小写  

先进入redis-cli,才能输入redis命令

[root@localhost redis]# redis-cli
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> 

此时进入了redis-cli

get/set  这是redis最核心的两个命令。

SET

功能:存储K-V 。set可以填写两个参数(key-value),参数类型必须是字符串

127.0.0.1:6379> set 提示:key value [expiration EX seconds|PX milliseconds] [NX|XX]

127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> 

对于上述key-value,不需要加“”就是表示字符串的类型,给他们加上双引号或单引号都可以

[root@localhost redis]# redis-cli
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set "key3" "value3"
OK

GET

功能:根据K获取V。get 后跟key,就可以得到value,并且是带双引号,是字符串类型的。如果不存在key,就会返回nil,和null一个意思

127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> get key3
"value3"
127.0.0.1:6379> get key100
(nil)

3.全局/通用命令

redis支持很多数据结构,整体上来说是键值对结构,k固定是字符串,v可以有多种类型,最常见的:字符串,哈希表,列表,集合,有序集合。都是value上的变化

操作不同的数据结构,都会有不同的命令

还有一些命令,在这些数据结构上都能使用,称作全局命令

KEYS

功能:用来查询当前服务器上匹配的key,通过一些特殊符号(通配符),用来描述key的模样,匹配上述摸样的key就能被查询出来

命令语法: :KEYS pattern(样式、模式,描述字符串的模样)

示例:

*:匹配任意字符序列(包括空字符序列)。KEYS * 匹配所有的键。

127.0.0.1:6379> KEYS *
1) "key3"
2) "key1"
3) "key2"
127.0.0.1:6379> 

?:匹配单个字符。KEYS key? 匹配以 "key" 开头,并且后面跟着一个字符的键,如 "key1"、"keyA"。

127.0.0.1:6379> KEYS key?
1) "key3"
2) "key1"
3) "key2"

[character]:匹配在括号内的任一字符。KEYS key[123] 匹配以 "key" 开头,并且后面跟着 "1"、"2" 或 "3" 的键,如 "key1"、"key2"、"key3"。

127.0.0.1:6379> KEYS key[123]
1) "key3"
2) "key1"
3) "key2"

[range]:匹配在范围内的任一字符。KEYS key[1-5] 匹配以 "key" 开头,并且后面跟着小写字母的键,如 "key1"、"key2"、"key3"。

127.0.0.1:6379> KEYS key[1-5]
1) "key3"
2) "key1"
3) "key2"

[^characters]:匹配不在括号内的任一字符。KEYS key[^abc] 匹配以 "key" 开头,并且后面跟着一个非 "a"、"b" 或 "c" 的字符的键。

127.0.0.1:6379> KEYS key[^123]
(empty list or set)
127.0.0.1:6379> KEYS key[^abc]
1) "key3"
2) "key1"
3) "key2"

\<prefix>*:匹配以指定前缀开头的键。KEYS prefix* 匹配以 "prefix" 开头的键,如 "prefix123"、"prefixabc"。

127.0.0.1:6379> KEYS key1
1) "key1"
127.0.0.1:6379> KEYS key*
1) "key3"
2) "key1"
3) "key2"

*\<suffix>:匹配以指定后缀结尾的键。KEYS *suffix 匹配以 "suffix" 结尾的键,如 "abcsuffix"、"defsuffix"。

127.0.0.1:6379> KEYS *3
1) "key3"

注意事项:keys 的时间复杂度是O(N),需要遍历所有的键,然后匹配出符合要求的键。因此再生产环境(线上环境,用户可以访问到的)下一般禁止使用keys,尤其是keys*,keys*是匹配redis中以keys开头的所有键,由于生产环境中key非常多,redis是一个单线程的服务器,就会导致执行keys*时间非常长,那么redis服务器就被阻塞,无法为其它客户端提供服了!会给用户体验造成影响

redis的一个经典用途就是作为数据冷热分离的热点数据缓存,热点数据首先是去查redis的,如果redis被阻塞了,此时其它的查询redis操作就超时了,此时这些请求只能去查数据库了,大量的数据同时请求数据库的查询,可能会导致过载,数据库也无法正常提供服务了,整个系统基本就处于瘫痪状态。

EXISTS

功能:用于检查给定键是否存在于数据库中。接受一个或多个键作为参数,并返回存在的键的数量。时间复杂度:O(1)

命令语法: :EXISTS key [key ...]

示例: 

EXISTS  key1:检查单个键key1是否存在,存在返回1

127.0.0.1:6379> EXISTS key1
(integer) 1
127.0.0.1:6379> EXISTS key2
(integer) 1
127.0.0.1:6379> EXISTS key3
(integer) 1

EXTIST key1 key2 ley3:同时检查多个键是否存在.返回存在的键的数量

127.0.0.1:6379> EXISTS key1 key2 key3
(integer) 3

注意:redis是一个基于客户端-服务器,通过网络通信的中间件。因此上述分开查询key是否存在和同时检查多个键是否存在是有区别的

同时检查多个键是否存在:

 单独检查多个键是否存在:

可以看出,分开的写法,会产生更多轮次的请求响应,也即网络通信。和直接操作内存来说,网络通信成本比较高,效率比较低

所以redis支持一个命令能操作多个key,减少网络通信。还提供了其它的机制来提高网络通信的效率

DEL

功能:删除指定的key

和EXISTS命令相同,也可以支持操作多个key

时间复杂度:O(1). 返回删除key的个数

命令语法: DEL key [key......]   

示例: 

 删除key4,key5

127.0.0.1:6379> set key4 1
OK
127.0.0.1:6379> set key5 1
OK
127.0.0.1:6379> del key4 key5
(integer) 2

这里的删除,和mysql中的删库删表来说危险性比较低, 作为缓存,如果丢失少量的数据,问题不大,但是如果丢失大批的数据,musql就会过载,导致系统瘫痪。mysql不能丢失数据,丢失了数据就查不到了。

EXPIRE

功能:用于为键设置过期时间。接受两个参数:键和以为单位的过期时间

设置键的过期时间  过期时间到达后,该键将自动被删除。

key必须已经存在,设置成功返回1,失败返回0.  时间复杂度:O(1)

命令语法: EXPIRE  key  seconds   

127.0.0.1:6379> set key6 1
OK
127.0.0.1:6379> expire key6 5
(integer) 1
127.0.0.1:6379> get key5
(nil)

基于redis实现的分布式锁,为了避免 出现不能正确解锁的情况,加锁时通常会设置一个过期时间,自动解锁。

TTL

功能:检查键的过期时间 

返回名为"key"的键的剩余过期时间,以秒为单位。如果键不存在或者没有设置过期时间,则返回-1。如果键已经过期,则返回-2。时间复杂度:O(1)

命令语法: TTL key 

示例: 

127.0.0.1:6379> set key7 1
OK
127.0.0.1:6379> expire key7 15
(integer) 1
127.0.0.1:6379> ttl key7
(integer) 10
127.0.0.1:6379> ttl key7
(integer) 1
127.0.0.1:6379> ttl key7
(integer) -2
127.0.0.1:6379> ttl key1
(integer) -1

redis的过期策略是如何实现的?

不能直接整体便利key,效率非常低,redis整体策略是:定期删除和惰性删除
定期删除:每次抽取一部分进行验证过期时间。保证抽取检查过程足够快。为了避免一次性删除大量过期键导致服务器阻塞,Redis将每次执行的删除数量限制在一个较小的范围内。

惰性删除:当客户端尝试访问一个键时,Redis会检查该键是否已过期。如果键已过期,则会立即删除该键并返回空结果。

通过惰性过期和定期过期策略的结合,Redis可以高效地管理键的过期,并保持内存的合理使

TYPE

功能:用于获取指定键的数据类型

可能返回的结果:none  string  list  hash  set  zset  stream(redis作为消息队列的时候,使用这个各类型的value)  时间复杂度:O(1)

命令语法: TYPE key

示例: 

返回值为"string",表示键"mykey"的数据类型是字符串(String)。
127.0.0.1:6379> type mykey
string

返回值为"list",表示键"mylist"的数据类型是列表(List)。
127.0.0.1:6379> LPUSH mylist "value"
(integer) 1
127.0.0.1:6379> type mylist
list

返回值为"set",表示键"myset"的数据类型是集合(Set)。
127.0.0.1:6379> SADD myset "value"
(integer) 1
127.0.0.1:6379> type myset
set

返回值为"hash",表示键"myhash"的数据类型是哈希(Hash)。
127.0.0.1:6379> HSET myhash field "value"
(integer) 1
127.0.0.1:6379> type myhash
hash

返回值为"zset",表示键"myzset"的数据类型是有序集合(Sorted Set)。
127.0.0.1:6379> ZADD myzset 1 "value"
(integer) 1
127.0.0.1:6379> type myzset
zset

返回值为"nil",表示键"nonexistingkey"不存在。
127.0.0.1:6379> TYPE nonexistingkey
none

 

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

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

相关文章

新版2021等启动unity包管理器本地服务器进程失败解决

1、问题 2、解决办法 最后我发现每个unity版本都有一个包管理器&#xff0c;也就是图中的路径&#xff0c;而且都是相同的路径&#xff0c;只是因为版本不同或多或少存在一些小差异&#xff0c;其他版本可以正常启动&#xff0c;就2021不行会不会是2021的包管理器这个文件夹出…

YOLOv5 实现 10 种热力图可视化方式教程

效果展示 GradCAMEigenCAMEigenGradCAMGradCAMElementWiseGradCAMPlusPlusHiResCAMLayerCAM

前端下载PDF内容空白且大小偏大问题解决

前端使用React框架axios请求后端接口下载文件&#xff0c;请求返回正常但文件大小和内容异常。经排查&#xff0c;其原因是使用了mockjs用作数据模拟&#xff0c;导致了请求异常&#xff0c;将其注释掉后&#xff0c;文件大小与内容恢复正常。 目录 1.文件异常 2.定位问题 3…

【C语言进阶技巧】指针解密:炼金术士的秘密面试题揭秘

【C语言进阶技巧】指针解密&#xff1a;炼金术士的秘密面试题揭秘 1. 主要涉及sizeof与strlen函数的使用的笔试题1.1 笔试题一&#xff08;一维整形数组&#xff09;1.2 笔试题二&#xff08;不带\0的字符数组&#xff09;1.3 笔试题三(带\0的字符数组)1.4 笔试题四 &#xff0…

【C#】默认打开图片、文件下载

系列文章 【C#】编号生成器&#xff08;定义单号规则、固定字符、流水号、业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

Linux(centos7)系统关闭 virbr0

背景&#xff1a; 在使用 VMware 虚拟机安装 centos7 操作系统中&#xff0c;经常出现将 IP 地址分配到虚拟网桥接口virbr0 上&#xff0c;引起虚拟机不能正常访问网络的问题。 我是在学习 docker 网络分析这块遇到的问题&#xff0c;教程上在虚拟机上输入 ip addr 并没有出现 …

linux开发工具:repo

1&#xff1a;repo简单介绍 repo是Google开发的用于管理Android版本库的一个工具&#xff0c;它是由一系列的Python脚本组成&#xff0c;封装了一系列的Git命令&#xff0c;用来统一管理多个Git仓库。repo不是用于取代git&#xff0c;而是简化了对多个Git版本库的管理。 repo…

6 种方式读取 Springboot 的配置(原理+实战)

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式&#xff0c;目的不仅是要让大家学会如何使用&#xff0c;更重要的是弄清配置加载、读取的底层…

搭建Promethues + grafana +alertManager+blakbox 监控springboot 健康和接口情况

一。概述 架构图&#xff1a; 拓扑图&#xff1a; prometheus 是一个开源系统&#xff0c;用于构建监控和报警的工具包。 Prometheus 收集其指标并将其存储为时间序列数据&#xff0c;即指标信息与记录它的时间戳一起存储&#xff0c;以及称为标签的可选键值对。 特点&#…

003.PADS VX2.4选项设置及显示颜色设置

文章目录 一、PADS颜色设置及选项设置二、选项设置1.全局2.设计3.栅格和捕获4.显示5.布线选项页6.覆铜平面选项页7.文本和线选项页8.文本和线选项页9.过孔样式选项页 一、PADS颜色设置及选项设置 一、颜色设置 1&#xff0e;点击设置—显示颜色&#xff09;&#xff08;快捷键…

Kkfileview | Docker | 文件预览kkfile配置

文章目录 简介DockerRedis部署 简介 kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 …

SQLSERVER 临时表 和 表变量 有区别吗

一&#xff1a;背景 1. 讲故事 今天和大家聊一套面试中经常被问到的高频题&#xff0c;对&#xff0c;就是 临时表 和 表变量 这俩玩意&#xff0c;如果有朋友在面试中回答的不好&#xff0c;可以尝试看下这篇能不能帮你成功迈过。 二&#xff1a;到底有什么区别 1. 前置思…

十五、flex弹性元素的样式

目录&#xff1a; 1. 基本布局 2. 弹性元素的属性&#xff1a;flex-grow 3. 弹性元素的属性&#xff1a;flex-shrink 4. 弹性元素的属性&#xff1a;flex-basis 5. flex 统一设置这3个属性&#xff08;常用&#xff09; 6. order 一、基本布局 <style>*{margin: 0;paddin…

【Maven】类或者包提示找不到,报红

背景 使用IDEA&#xff0c;类或者包提示找不到&#xff0c;报红 解决方法 1. maven reload 2. 检查profiles是否对 3. 不要选中offline模式 4. 检查本地仓库位置 5. 清掉idea缓存 6. 到本地maven仓库删掉出错的包然后重新maven reload 7. update本地仓库 8. 排查是不是别人没…

智慧用电安全监控管理系统

智慧用电安全监控管理系统是一种基于物联网技术的用电安全管理系统&#xff0c;它通过远程通信技术和云计算平台&#xff0c;实现了对电气设备的实时监控、数据采集、费用计算、远程控制等功能。该系统不仅可以提高用电安全管理的效率&#xff0c;还可以为用户提供更加便捷、可…

Linux(centos 7)将 ens33 改为 eth0

背景&#xff1a; 先说明一下 eth0 与 ens33 的关系&#xff0c;目前的主流网卡为使用以太网络协定所开发出来的以太网卡&#xff08;Ethernet)&#xff0c;因此我们 Linux 就称呼这种网络接口为 ethN (N为数字)。 举个例子&#xff1a;就是说主机上面有一张以太网卡&#xff0…

C++线性表、单链表

概述 在先说链表前&#xff0c;我们先来理清几个概念。 什么是线性表、顺序表和链表&#xff1f;三者有什么关系&#xff1f; 线性表&#xff1a;元素线性排列&#xff0c;在逻辑上具有次序的存储结构。 顺序表&#xff1a;线性表的顺序存储称为线性表。它是用一组地址连续(逻…

抖音短视频seo源码开发部署-技术分享(四)

一、 抖音短视频seo源码开发流程 抖音短视频SEO源码开发流程如下&#xff1a; 1.分析需求&#xff1a;首先需要明确你的SEO目标。分析竞争对手&#xff0c;了解抖音短视频平台的规则&#xff0c;选定目标关键词和主题。 2.编写代码&#xff1a;根据需求编写代码&#xff0c;…

docker 安装向量数据库 Milvus

Miluvs 官网为 www.milvus.io/ Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据&#xff08;图片 / 视频 / 语音 / 文本&#xff09;检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索&#xff08;请参考&#xff1a;在线教程&#xff09;&#xff0c;分布式架构亦…

This application failed to start?

大家好&#xff0c;最近在搞一个定制的图像分割项目&#xff0c;其中需要自己构建数据集。 这里我用到了基于paddle开发高效智能的交互式分割标注软件 EISeg(Efficient Interactive Segmentation)。 它涵盖了通用、人像、遥感、医疗、视频等不同方向的高质量交互式分割模型。另…