Redis常用命令——String篇

news2024/11/17 11:25:32

  前面我们讲解了一些 Redis 的全局命令(Redis常用基本全局命令)。所谓全局命令,就是可以匹配任意一个数据结构进行使用。但是不同的数据结构,也有自己的操作命令。本篇文章主要讲解的是 String 的操作命令,希望会对你有所帮助。

文章目录

一、简单介绍

二、常用命令

2、1 常见命令

set

get

MGET 和 MSET

SETNX、SETEX

2、2 计数命令

INCR 和 INCRBY

DECR 和 DECRBY

INCRBYFLOAT

2、3 其他命令

APPEND

 GETRANGE

SETRANGE

STRLEN

三、小结


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Redis 👀

💥 标题: Redis命令——String篇 💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

一、简单介绍

  我们再次强调:redis 所有的key都是字符串(String)类型,value的类型是存在差异的!而我们本篇文章讲解的 String 的命令操作,也是针对 value 的。

  Redis 中的字符串,直接就是按照字节数组(二进制数据)的方式存储的!不会做任何的编码转换,存的是啥,取出来就还是啥!不仅仅可以存储文本数据,还支持存储整数、文本、JSON、二进制数据等。

  字符串类型是Redis最基础的数据类型,关于字符串需要特别注意:

  • 首先Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类似基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他4种数据结构的学习奠定基础。
  • 其次,如下图所示,字符串类型的值实际可以是字符串,包含一般格式的字符串或者类似JSON、XML格式的字符串;数字,可以是整型或者浮点型;甚至是二进制流数据,例如图片、音频、视频等。不过一个字符串的最大值不能超过512 MB。

  由于Redis内部存储字符串完全是按照二进制流的形式保存的,所以Redis是不处理字符集编码问题的,客户端传入的命令中使用的是什么字符集编码,就存储什么字符集编码。

  下面我们就来看一下String的操作命令。

二、常用命令

2、1 常见命令

set

  前面文章中我们讲解过set命令的使用。在此我们再次详细解释一下 set 命令的使用。首先,get、set都是针对 String 的命令,也是最为重要和基础的两个命令!set 语法格式:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

  下面是对 set 命令参数的详细解释:

  • key:指定要设置值的键。
  • value: 要存储的值。
  • [expiration EX seconds | PX milliseconds]: 可选参数,用于设置键的过期时间。可以使用EX参数和以秒为单位的时间来设置过期时间,或者使用PX参数和以毫秒为单位的时间来设置过期时间。过期后会自动删除!具体实例如下:
  • [NX|XX]: 可选参数,用于指定设置操作的行为。NX——只在key不存在时才进行设置,即如果key之前已经存在,设置不执行。XX——只在key存在时才进行设置,即如果key之前不存在,设置不执行。具体实例如下:

  注意,redis文档给出的语法格式说明:

  • [ ] 相当于一个独立的单元,表示可选项(可有可无的);
  • 其中 | 表示 "或者" 的意思,多个只能出现一个;
  • [ ] 和 [ ] 之间,是可以同时存在的。

get

  get命令没什么好解释的,也是只支持字符串(String)类型的value。如果不匹配,则直接会报错提示。具体如下:

  语法也很简单:

get key

  直接使用即可,这里不再做过多解释!需要学习的可以参看此篇文章:Redis常用基本全局命令。

MGET 和 MSET

  在Redis中,MGET和MSET是用于批量获取和设置多个键值对的命令。之前我们也说明了Redis是一个基于网络的客户端/服务器的中间件。为了减少网络IO的次数,那么就出现了MGET 和 MSET 指令。类似的Redis都有很多命令都是可以支持一次操作多个键值对的。其目的就是为了提高效率。

  我们先来看一下MGET 命令语法:

MGET key [key ...]

  理解并不难,我们直接看实例:

   我们再来看一下MSET 的语法:

 MSET key value [key value ...]

  我们直接看实例:

  两者的时间复杂度均为O(n),这里的 n 并不是指的redis中所有的key,而是我们所设置的key的个数。即使mset 和 mget 指令可以一次操作多个键值对,但是并不会一次设置或者获取 太对的键值对。因为我一次设置假设10w个键值对,有可能把redis 给阻塞住了!导致其他的命令不能够被执行,引起连锁反应!

SETNX、SETEX

  SETNX、SETEX其实就是把set 中的nx 和 ex选项结合成为一个命令了。这里再简单解释一下。

  SETNX 命令用于在 Redis 中设置一个 key 的值,如果这个 key 不存在的话。如果设置成功,返回 1;如果 key 已经存在,则不做任何操作,返回 0。具体实例如下:

  SETEX 命令用于在 Redis 中设置一个 key 的值,并指定该 key 在指定的秒数后过期。如果设置成功,返回 OK。这里要说明一下其语法:

SETEX key seconds value

  我们直接看一个实例:

2、2 计数命令

INCR 和 INCRBY

  在 Redis 中,INCR 和 INCRBY 命令都用于对存储在指定 key 中的值进行增量操作。

  1. INCR 命令用于将存储在指定 key 的值递增 1。如果 key 不存在,则先将其设置为 0,然后再执行递增操作。语法:INCR key。
  2. INCRBY 命令用于将存储在指定 key 的值递增指定的增量值。如果 key 不存在,则先将其设置为 0,然后再执行递增操作。语法:INCRBY key increment。

  注意:如果INCR 和 INCRBY key对应的string 不是一个整型或者范围超过了64位有符号整型,则报错。我们来看一下实例:

DECR 和 DECRBY

  在 Redis 中,DECR 和 DECRBY 命令与 INCR 和 INCRBY 命令相反,用于对存储在指定 key 中的值进行减量操作。

  1. DECR 命令用于将存储在指定 key 的值递减 1。如果 key 不存在,则先将其设置为 0,然后再执行递减操作。语法:DECR key。
  2. DECRBY 命令用于将存储在指定 key 的值递减指定的减量值。如果 key 不存在,则先将其设置为 0,然后再执行递减操作。语法:DECRBY key decrement。

  注意:如果DECR 和 DECRBY key对应的string 不是一个整型或者范围超过了64位有符号整型,则报错

INCRBYFLOAT

  INCRBYFLOAT是 Redis 中用于对存储在指定键中的浮点数值进行增加或减少操作的命令。下面是关于 INCRBYFLOAT 命令语法:

INCRBYFLOAT key increment

功能描述:

  • INCRBYFLOAT 命令用于在指定键存储的值为浮点数时,将这个值增加(或减少)指定的浮点数增量。
  • 如果键不存在,那么在执行命令前,会先将键的值设置为 0,再执行增加操作。
  • 如果键包含的值不是浮点数,命令将返回错误。
  • 增量参数可以是正数也可以是负数,用来增加或减少存储在键中的浮点数值。

  注意:并没有DECRBYFLOAT,我们可以通过INCRBYFLOAT key 负数 来实现对 key 的减法操作。这里就不再举例了,大家可以自己操作一下。

2、3 其他命令

APPEND

  append 顾名思义就是追加嘛!如果key已经存在并且是一个string,命令会将value追加到原有string的后边。如果key不存在,会先将键的值设置为空字符串再进行追加操作,则效果等同于SET命令。最终返回值为追加后字符串的长度。其语法如下:

 APPEND KEY VALUE

  具体实例如下:

  可不可以追加汉字呢?是可以的。具体如下:

  append返回值,长度的单位是字节。但是为什么会是6个字节呢?redis的字符串不会对字符编码做任何处理(redis 不认识字符,只认识字节)。当前咱们的xshell终端,默认的字符编码是utf8,在终端中输入汉字之后,也就是按照utf8编码的。一个汉字在utf8字符集中通常是3个字节的。

  我们通过get 获取value时,发现并不是我们所想的到的汉字,而是一堆二进制。因为存储进去时,并没有指定编码格式,那么存储的就是二进制,并且是以utf8所对应的编码方式的二进制存储进去的。所以我们得到的就是一堆二进制。

  在启动redis客户端的时候,加上一个--raw这样的选项。就可以使redis客户端能够自动的把二进制数据尝试翻译。具体如下:

 GETRANGE

  GETRANGE 命令用于获取指定键对应值的子字符串(根据指定的起始位置和结束位置)。语法:

GETRANGE key start end

  返回key对应的string的子串,由start和 end确定(左闭右闭),并且起始位置为0。可以使用负数表示倒数。-1代表倒数第一个字符(len - 1),-2代表倒数第二个(len - 2),其他的与此类似。超过范围的偏移量会根据string的长度调整成正确的值。具体实例如下:

  

  如果字符串中保存的是汉字,此时进行子串切分,很可能切出来的就不是完整的汉字了!如下:

  上述的代码,是强行切出了中间的四个字节。随便这么一切,切出的结果在utf8码表上不知道能查出啥了。

SETRANGE

  SETRANGE 命令用于替换指定键对应值的字符串中的部分内容。语法:

SETRANGE key offset value

  offset 为偏移量,表示从哪个位置开始替换字符串内容(以 0 表示)。value就是覆盖指定位置的值。注意:setrange 是用来覆盖替换的,并不是插入!具体实例如下:

  setrange针对不存在的key也是可以操作的.不过会把 offset之前的内容填充成0x00.具体如下:

STRLEN

  STRLEN 命令用于获取存储在指定键中的字符串值的长度。当key存储的value不是string时,直接报错。或者当 key 不存在时,返回 0。语法:

STRLEN key

  具体实例如下:

三、小结

  上述命令总结出如下表格,根据不同场景可以做出不同选择。具体如下:

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

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

相关文章

2024电工杯B题:大学生平衡膳食食谱的优化设计及评价

大学时代是学知识长身体的重要阶段,同时也是良好饮食习惯形成的重要时期。这一特 定年龄段的年轻人,不仅身体发育需要有充足的能量和各种营养素,而且繁重的脑力劳动和 较大量的体育锻炼也需要消耗大量的能源物质。大学生中饮食结构不合理以及…

在抖音怎么开店?抖音小店开店步骤详解!建议收藏!

大家好,我是电商小V 想在抖音上面开一家属于自己的抖音店铺去卖点商品赚取个商品的差价,那么开通抖音小店的步骤是什么呢?主要分为几步呢?关于这个问题咱们就来详细的说一下: 开店之前的准备工作,首先需要准…

核心四:线程的一生

4、核心四:线程的一生💟 4.1 New 已创建但还未启动的新线程。 我们new Thread之后,线程已经实现了一些准备工作。但没有运行run方法,因为没有使用start来开启线程。此时,线程处于New状态。 4.2 Runnable&#xff08…

Python模块、包和异常处理

大家好,在当今软件开发领域,Python作为一种简洁、易读且功能强大的编程语言,被广泛应用于各种领域。作为一名测试开发工程师,熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…

Linux —— 信号量

Linux —— 信号量 什么是信号量P操作(Wait操作)V操作(Signal操作)信号量的类型 一些接口POSIX 信号量接口:其他相关命令: 基于循环队列的生产者和消费者模型同步关系 多生产多消费 我们今天接着来学习信号…

5.22R语言初步学习-1

今天上课讲R语言,要干什么没讲,分析什么,目的是什么没讲。助教基本上就是让我们打开窗口,按要求抄代码指令,代码原理也没讲......再加上最近正好在学概率论与数理统计,肯定是有用的,所以还是学习…

(全面)Nginx格式化插件,Nginx生产工具,Nginx常用命令

目录 🎫 前言 🎉 开篇福利 🎁 开篇福利 x2 Double happiness # 介绍 # 地址 # 下载 💻 命令及解析 # 整个文件系统中搜索名为nginx.conf的文件 # 编辑nginx.conf文件 # 重新加载配置文件 # 快速查找nginx.conf文件并使…

HTTP协议请求报头(header)

目录 目录 User-Agent与Referer User-Agent Referer Cookie HTTP报头(header)的结构是“键值对”结构,每个键值对占一行,键和值之间使用分号分隔。 报头的种类有很多,本次介绍几个重要的。 Host:表示请…

中电金信:从系统升级入手 看这些银行如何激活信贷业务

近期,我国金融机构围绕科技金融、绿色金融、普惠金融、养老金融、数字金融五篇大文章,持续优化信贷结构,不断增强金融服务实体经济作用。金融业认真落实国家经济发展目标,不断优化资金投向结构,持续加大重大战略、重点…

robosuite导入自定义机器人

目录 目的:案例一:成果展示具体步骤:URDF文件准备xml文件生成xml修改机器人构建 目的: 实现其他标准/非标准机器人的构建 案例一: 成果展示 添加机器人JAKA ZU 7 这个模型 具体步骤: URDF文件准备 从…

解决小皮面版搭建php网站数据库连接不了

首先进入mysql bin目录下 并执行cmd mysql -u root -pCREATE USER userlocalhost IDENTIFIED BY pass;GRANT ALL PRIVILEGES ON *.* TO userlocalhost;GRANT SELECT, INSERT, UPDATE ON database_name.* TO xxwlocalhost;FLUSH PRIVILEGES;select host ,user from mysql.user…

数据防泄漏系统哪个好用,给文件加密的软件

数据防泄露(Data Leakage Prevention,DLP)是指通过一定的技术手段,防止组织指定(重要或敏感的)数据或信息资产以违反安全策略规定的形式流出组织的一种策略。 信息防泄露以文档加密技术为核心,…

urllib_post请求_百度翻译

打开百度翻译,并打开控制台,输入spider,然后在网络中找到对应的接口,可以看出,该url是post请求 在此案例中找到的接口为sug,依据为: 可以看到,传递的数据为kw : XXX, 所…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

内脏油脂是什么?如何减掉?

真想减的人,减胖是很容易的,但想要形体美又健康,还是得从减内脏油脂开始,那么,问题来了,什么是内脏油脂? 油脂它分部于身体的各个角落,四肢、腹部、腰、臀部、脸、脖子...等&#xf…

Nginx实现负载均衡与故障检查自动切换

创作灵感来源于个人项目的一个稳定性规划,单节点的项目稳定性方面可能有很大的缺漏,因此需要升级为多节点,保证服务故障后,依然有其他服务可用,不会给前端用户造成影响。 (前面讲选型,想直接看…

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?

传统蓝牙模块BR/EDR与低功耗蓝牙模块有什么区别?下面跟随美迅物联网MesoonRF从多个维度来了解。   概述:低功耗蓝牙采用了高斯频移键控(GFSK)。这里我们先抛开蓝牙的协议,单纯从Radio的角度看收发通信,Ra…

新品 | Forge® 1GigE IP67工业相机助力智能农业、食品和饮料行业

近日,51camera的合作伙伴Teledyne FLIR IIS推出Forge 1GigE IP67,它是Forge系列的最新工业相机,旨在在恶劣的工业环境中运行,同时确保高效的生产能力。Forge 1GigE IP67致力于为工厂自动化提供先进成像系统的最新产品。 Forge 1GigE IP67相机…

【设计模式深度剖析】【3】【创建型】【抽象工厂模式】| 要和【工厂方法模式】对比加深理解

👈️上一篇:工厂方法模式 | 下一篇:建造者模式👉️ 目录 抽象工厂模式前言概览定义英文原话直译什么意思呢?(以运动型车族工厂,生产汽车、摩托产品为例) 类图4个角色抽象工厂(Abstract Fac…