【Redis】String字符串类型-常用命令

文章目录

  • String字符串类型
    • 常用命令
      • set
      • get
      • MGET
      • MSET
    • 计数命令
      • INCR
      • INCRBY
      • DECR
      • DECRBY
      • INCRBYFLOAT
    • 其它命令
      • APPEND
      • GETRANGE
      • SETRANGE
      • STRLEN
  • 命令总结

String字符串类型

1)⾸先Redis中所有的键的类型都是字符串类型

2)字符串类型的值(value)实际可以是字符串,包含⼀般格式的字符串或者类似JSON、XML格式的字符串,数字(整型或者浮点型);甚⾄是⼆进制流数据,例如图⽚、⾳频、视频等。不过⼀个字符串的最⼤值不能超过512MB

image-20231020215253353

注意:由于Redis内部存储字符串完全是按照⼆进制流的形式保存的,所以Redis是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码


常用命令

set

将string类型的value设置到key中。如果key之前存在,则覆盖,⽆论原来的数据类型是什么。之前关于此key的TTL也全部失效

语法:SET key value [expire EX seconds|PX milliseconds] [NX|XX]

选项含义:

  • EX seconds⸺使⽤秒作为单位设置key的过期时间
  • PX milliseconds ⸺使⽤毫秒作为单位设置key的过期时间
  • NX ⸺只在key不存在时才进⾏设置,即如果key已经存在,设置不执行
  • XX ⸺只在key存在时才进⾏设置,即如果key如果不存在,设置不执行

返回值:

  • 如果设置成功,返回OK

  • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)

时间复杂度: O ( 1 ) O(1) O(1)

image-20231023110504258


注意:由于带选项的SET命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替

setnx

key-value不存在才能设置,如果存在则设置失败

语法:SETNX key value 

返回值:1表⽰设置成功。0表⽰没有设置

image-20231021100802760

image-20231023110559798


setex

设置key的过期时间,单位是秒

语法:SETEX key seconds value

image-20231025210135043

psetex

设置key的过期时间,单位是毫秒

语法:PSETEX key milliseconds value

image-20231025210154703


get

获取key对应的value。如果key不存在,返回nil。如果value的数据类型不是string,会报错。

语法:GET key 	

返回值:key对应的value,或者nil当key不存在

image-20231023111010299


MGET

⼀次性获取多个key的值。如果对应的key不存在或者对应的数据类型不是string,返回nil

语法:MGET key [key ...]

时间复杂度: O ( N ) O(N) O(N),其中 N N N为key的数量

返回值:对应value的列表

image-20231023110634111

MSET

⼀次性设置多个key的值

语法:MSET key value [key value ...]

时间复杂度: O ( N ) O(N) O(N),其中 N N N为key的数量

返回值:永远是OK

image-20231023110723323


多次get和单词mget的区别:

image-20231021100431215

使⽤mget/mset由于可以有效地减少了⽹络时间,所以性能相较更⾼。使⽤批量操作,可以有效提⾼业务处理效率,但是要注意,每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞


计数命令

很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏

INCR

将key对应的string表⽰的数字加⼀。如果key不存在,则视为key对应的value是0,然后对应+1。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:INCR KEY

返回值:integer类型的加完后的数值

image-20231023111307194


INCRBY

将key对应的string表⽰的数字加上对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:INCRBY key decrement  #decrement可以是正数,负数,0  但不可能是浮点数

返回值:integer类型的加完后的数值

image-20231023111613183


DECR

将key对应的string表⽰的数字减⼀。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:DECR key 

返回值:integer类型的减完后的数值


DECRBY

将key对应的string表⽰的数字减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

语法:DECRBY key decrement  #decrement可以是正数,负数,0  但不可能是浮点数

返回值:integer类型的减完后的数值


INCRBYFLOAT

将key对应的string表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果key不存在,则视为key对应的value是0。如果key对应的不是string,或者不是⼀个浮点数,则报错。允许采⽤科学计数法表⽰浮点数

语法:INCRBYFLOAT key increment

返回值:加/减完后的数值

image-20231023112239477


注意:上述操作的时间复杂度都是 O ( 1 ) O(1) O(1),因为redis处理命令的时候是单线程模型,多个客户端同时对同一个key进行计数命令操作不会引起线程安全问题


其它命令

APPEND

如果key已经存在并且是⼀个string,命令会将value追加到原有string的后边。如果key不存在,则效果等同于SET命令

语法:APPEND KEY VALUE

时间复杂度: O ( 1 ) O(1) O(1) 追加的字符串⼀般⻓度较短,可以视为 O ( 1 ) O(1) O(1)

返回值:追加完成之后string的⻓度,单位是字节

image-20231023112528941


image-20231025210626806

redis不会对字符编码做任何处理,redis不认识字符,只认识字节,xshell默认的字符编码是utf8,所以汉字也是按照utf8进行编码的,在utf8当中,一个汉字占用3个字节,因为append返回的是追加之后string的⻓度,单位是字节,所以为6。通过get命令进行获取的时候,是按照原始的utf-8编码,以16进制的方式进行展示 :\x表示16进制

注意:在启动redis的时候,可以加上--raw选项,可以使redis客户端自动将二进制数据尝试翻译

image-20231025210920354


GETRANGE

返回key对应的string的⼦串,由start和end确定(左闭右闭)。可以使⽤负数表⽰倒数。-1代表倒数第⼀个字符,-2代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据string的⻓度调整成正确的值

作用:截取子串

语法:GETRANGE key start end

时间复杂度:O(N),N为 [ s t a r t , e n d ] [start,end] [start,end]区间的⻓度.由于string通常⽐较短,可以视为是O(1) 返回值:string类型的⼦串

image-20231023112735582

正常下标都是从0开始的整数,但是redis的下标是可以支持负数的,其中-1代表的是最后一个元素


注意:如果字符串当中保存的是汉字,此时进行子串切分,很有可能切出来的是不完整的汉字,此结果在utf8码表当中不知道能查出什么


SETRANGE

覆盖字符串的⼀部分,从指定的偏移开始

语法:SETRANGE key offset value
  • offset:偏移量 ,从第几个字节开始进行替换
  • value:要替换后的结果,替换多长具体是看value的长度

时间复杂度:O(N),N为value的⻓度.由于⼀般给的value⽐较短,通常视为O(1).

返回值:替换后的string的⻓度

image-20231023113031066

注意:setrange针对不存在的key也是可以操作的,但是会把offset之前的内容都填充为0x00

image-20231025212337169


STRLEN

获取key对应的string的⻓度。当key存放的类似不是string时,报错

语法:STRLEN key 

时间复杂度:O(1) 返回值:string的⻓度,单位是字节,当key不存在时,返回0

image-20231025212602814

utf-8编码当中,一个汉字占用3字节


命令总结

image-20231021102710257

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

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

相关文章

2.2整式的加减(第1课时)——合并同类项教学及作业设计

【学习目标】 1.理解同类项的概念,并能正确辨别同类项. 2.理解合并同类项的依据是乘法分配律,掌握合并同类项的方法. 知识点归纳: ★合并同类项后,所得的项的系数是___________…

Linux学习第28天:Platform设备驱动开发(二): 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、硬件原理图分析 四、驱动开发 1、platform设备与驱动程序开发 53 /* 54 * 设备资源信息,也就是 LED0 所使用的所有寄存器 55 */ 56 static str…

堆叠注入 [GYCTF2020]Blacklist1

打开题目 判断注入点 输入1,页面回显 输入1 页面报错 输入 1 # 页面正常,说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库 1; show tables; # 说明有三个表 我们直接查看FlagHere的表结构 1;desc FlagHere;# 发…

【Hadoop】Apache Hadoop YARN

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 感谢点赞和关注 ,每天进步一点点!加油! 目录 一、YARN概述 二、YARN基础架构 2.1 ResourceManager&#x…

[100天算法】-有序矩阵中第K小的元素(day 58)

题目描述 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix [[ 1, 5, 9],[10, 11, 13],[12, 13, 15] ], k …

基础知识:位运算

基础知识:位运算 1. 两类表达式 1. 两类表达式

展开一个结构加法等式

4a6 4a8 - - - - - 1 - 1 - - - 1 - 1 - - 1 - - 1 - - 1 - - 1 - - - - 在5-1的方向上具体展开4a64a8 25 19 19 19 19 19 19 19 25 19 19 19 19 19 19 19 1 10 10 10 10 10 10 10 1 10 10 10 10 10 10 10 …

全网最详细的【shell脚本的入门】

🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这…

蓝桥杯每日一题2023.11.5

题目描述 方格分割 - 蓝桥云课 (lanqiao.cn) 题目分析 对于每个图我们可以从中间开始搜索,如果到达边界点就说明找到了一种对称的方法,我们可以直接对此进行答案记录每次进行回溯就会找到不同的图像,如果是一样的图像则算一种情况&#xff…

初识Vue 输出Hello World 及注意事项

在我们还没接触Vue之前,我同学常说我可以直接在元素里输出JS的表达式吗?肯定是不太行。当我们接触vue.js后,这个想法成了现实。 每当我们学习一门新的语言或者框架时,我们都习惯打印一个“hello world”,在我们vue当中…

Docker 安装ELK7.7.1

(注:在安装之前,本方法必须安装jdk1.8以上版本) (注:如果在虚拟机下用可以直接按方法走即可,如果是想进行备份后在别的机器上进行相关操作,必须把所有带有172.17.0.6、192.168.8.166:9200和端口号都改成你自己的方可使…

使用 curator 连接 zookeeper 集群 Invalid config event received

dubbo整合zookeeper 如图,错误日志 2023-11-04 21:16:18.699 ERROR 7459 [main-EventThread] org.apache.curator.framework.imps.EnsembleTracker Caller0 at org.apache.curator.framework.imps.EnsembleTracker.processConfigData(EnsembleTracker.java…

MTK联发科、高通、紫光展锐手机SOC平台型号汇总(含详细参数)

MediaTek联发科手机平台汇总: Qualcomm高通SOC平台汇总: 紫光展锐SOC平台汇总: 新移科技已成功研发手机SOC平台: 联发科平台: MTK6739、MTK6761、MTK6762、MTK6765、MTK8788、MTK6853、MTK6873、MTK6833、MTK6877、…

试试流量回放,不用人工写自动化测试case了

大家好,我是洋子,接触过接口自动化测试的同学都知道,我们一般要基于某种自动化测试框架,编写自动化case,编写自动化case的依据来源于接口文档,对照接口文档里面的请求参数进行人工添加接口自动化case 其实…

DB-GPT介绍

DB-GPT介绍 引言DB-GPT项目简介DB-GPT架构关键特性私域问答&数据处理多数据源&可视化自动化微调Multi-Agents&Plugins多模型支持与管理隐私安全支持数据源 子模块DB-GPT-Hub微调参考文献 引言 随着数据量的不断增长和数据分析的需求日益增多,将自然语言…

Git(七).git 文件夹瘦身,GitLab 永久删除文件

目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1)备份2)还原 3.2 删除方式一:git filter-repo 命令【推荐】1)安装2)删除本地仓库文件3)重新关联…

3款免费又好用的 Docker 可视化管理工具

前言 Docker提供了命令行工具(Docker CLI)来管理Docker容器、镜像、网络和数据卷等Docker组件。我们也可以使用可视化管理工具来更方便地查看和管理Docker容器、镜像、网络和数据卷等Docker组件。今天我们来介绍3款免费且好用的 Docker 可视化管理工具。…

构建mono-repo风格的脚手架库

前段时间阅读了 https://juejin.cn/post/7260144602471776311#heading-25 这篇文章;本文做一个梳理和笔记; 主要聚焦的知识点如下: 如何搭建脚手架工程如何开发调试如何处理命令行参数如何实现用户交互如何拷贝文件夹或文件如何动态生成文件…

贰[2],OpenCV函数解析

1,imread:图片读取 CV_EXPORTS_W Mat imread( const String& filename, int flags IMREAD_COLOR );//参数1(filename):文件地址 //参数2(flags):读取标志 注:ImreadModes,参数2(flags)枚举定义 enum ImreadModes { IMREAD…

分享68个工作总结PPT,总有一款适合您

分享68个工作总结PPT,总有一款适合您 PPT下载链接:https://pan.baidu.com/s/1juus0gmesBFxJ-5KZgSMdQ?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。知识付…