[Redis][String][上]详细讲解

目录

  • 0.前言
  • 1.常见命令
    • 1.SET
    • 2.GET
    • 3.MSET && MGET
    • 4.SETNX && SETXX
  • 2.计数命令
    • 1.INCR
    • 2.INCRBY
    • 3.DECR
    • 4.DECYBY
    • 5.INCRBYFLOAT
    • 6.注意


0.前言

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

    • Redis中所有的键的类型都是字符串类型,⽽且其他⼏种数据结构也都是在字符串类似基础上构建的
      • 例如:列表和集合的元素类型是字符串类型
    • 字符串类型的值实际可以是字符串,包含⼀般格式的字符串 --> 不仅仅可以存储文本数据
      • 类似JSON、XML格式的字符串
      • 数字,可以是整型或者浮点型
      • 甚⾄是⼆进制流数据,
        • 例如:图⽚、⾳频、视频等
          请添加图片描述
  • ⼀个字符串的最⼤值不能超过512MB

  • Redis内部存储字符串完全是按照⼆进制流的形式保存的

    • Redis是不处理字符集编码问题的,客⼾端传⼊的命令中使⽤的是什么字符集编码,就存储什么字符集编码

1.常见命令

1.SET

  • 功能:将string类型的value设置到key
    • 如果key不存在,则创建新的键值对
    • 如果key之前存在,则覆盖,⽆论原来的数据类型是什么(可能会改变原来的数据类型),之前关于此keyTTL也全部失效
  • 语法SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  • 选项
    • EX seconds:使⽤秒作为单位设置key的过期时间
    • PX milliseconds:使⽤毫秒作为单位设置key的过期时间
    • NX只在key不存在时才进⾏设置,即如果key之前已经存在,设置不执⾏
    • XX只在key存在时才进⾏设置,即如果key之前不存在,设置不执⾏
      • 相当于更新keyvalue
    • 注意:由于带选项的SET命令可以被SETNX, SETEX, PSETEX等命令代替,所以之后的版本中,Redis可能进行合并
  • 返回值
    • 如果设置成功,返回OK
    • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.GET

  • 功能:获取key对应的value
    • 如果key不存在,返回nil
    • 如果value数据类型不是string,会报错
  • 语法GET key
  • 返回值key对应的value,或者当key不存在时返回nil
  • 时间复杂度 O ( 1 ) O(1) O(1)

3.MSET && MGET

  • MSET:

    • 功能:一次性设置多个key的值
    • 语法MSET key value [key value ...]
    • 返回值:永远是OK
    • 时间复杂度 O ( 1 ) O(1) O(1)
  • MGET

    • 功能:⼀次性获取多个key的值
      • 如果对应的key不存在或者对应的数据类型不是string,返回nil
    • 语法:`MGET key [key …]
    • 返回值:对应value的列表
    • 时间复杂度 O ( 1 ) O(1) O(1)
  • 多次GET和单词MGET比较:使用MGET/MSET可有效减少网络时间,性能较高
    请添加图片描述

  • 综上:学会使⽤批量操作,可以有效提⾼业务处理效率

    • 注意:每次批量操作所发送的键的数量也不是⽆节制的,否则可能造成单⼀命令执⾏时间过⻓,导致Redis阻塞

4.SETNX && SETXX

  • SETNX
    • 功能:设置key-value,但只允许在key之前不存在的情况下
    • 语法SETNX key value
    • 时间复杂度 O ( 1 ) O(1) O(1)
    • 返回值:1表⽰设置成功,0表⽰没有设置
  • SETXX
    • 功能:设置key-value,但只允许在key之前存在的情况下
    • 语法SETXX key value
    • 时间复杂度 O ( 1 ) O(1) O(1)
    • 返回值:1表⽰设置成功,0表⽰没有设置
  • SET、SETNX、SETXX执⾏流程
    请添加图片描述

2.计数命令

1.INCR

  • 功能:将key对应的string表⽰的数字加⼀
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法INCR key
  • 返回值integer类型的加完后的数值
  • 时间复杂度 O ( 1 ) O(1) O(1)

2.INCRBY

  • 功能:将key对应的string表⽰的数字加上对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法INCRBY key increment
  • 返回值integer类型的加完后的数值
  • 时间复杂度 O ( 1 ) O(1) O(1)

3.DECR

  • 功能:将key对应的string表⽰的数字减⼀
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法DECR key
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值integer类型的减完后的数值

4.DECYBY

  • 功能:将key对应的string表⽰的数字减去对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错
  • 语法DECRBY key decrement
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值integer类型的减完后的数值

5.INCRBYFLOAT

  • 功能:将key对应的string表⽰的浮点数加上对应的值,允许采⽤科学计数法表⽰浮点数
    • 如果对应的值是负数,则视为减去对应的值
    • 如果key不存在,则视为key对应的value0
    • 如果key对应的不是string,或者不是⼀个浮点数,则报错
  • 语法INCRBYFLOAT key increment
  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 返回值:加/减完后的数值

6.注意

  • Redis存储整数,是直接使用int类型存的,而存储小数,本质上是当作字符串来存储
    • Redis的int比较方便算术运算
    • 小数意味着每次进行算术运算,都需要把字符串转成小数,进行运算,再把结果转回字符串保存
  • 很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销
    • 但在Redis中完全不存在这个问题,因为Redis是单线程架构,任何命令到了Redis服务端都要顺序执⾏
  • 由于Redis处理命令的时候,是单线程模型,多个客户端同时针对同一个key进行INCR等操作,不会引起"线程安全"问题


http://www.niftyadmin.cn/n/5666791.html

相关文章

tasklist命令的应用实例

tasklist命令的应用实例 引言 在系统管理和故障排查过程中,了解当前正在运行的进程信息是至关重要的。Windows操作系统提供了一个强大的命令行工具——tasklist,它可以帮助用户查看当前系统中所有正在运行的进程及其相关信息。掌握这个命令的使用&…

通过npm安装 pnpm

安装pnpm npm install -g pnpm 获取当前配置的镜像地址 pnpm config get registry 设置新的镜像地址 pnpm set registry https://registry.npmmirror.com pnpm和npm的优劣 npm:优势:npm 是 Node.js 官方提供的包管理工具,它是默认的包管理器。具有广泛的…

java配置阿里云存储文件

1.maven导入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency> 如果使用的是Java 9及以上的版本&#xff0c;则还需要添加JAXB相关依赖。…

Unity教程(十六)敌人攻击状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

leetcode刷题day23|回溯算法Part02(39. 组合总和 、40.组合总和II、131.分割回文串)

39. 组合总和 思路&#xff1a;这个题与77. 组合的差异在于元素可以无限制重复被选取&#xff0c;那么只需要更改startIndex即可&#xff0c;每一层递归都可以从头选用元素。 回溯三部曲与77. 组合基本一致。 代码如下&#xff1a; class Solution {List<List<Intege…

自定义复杂AntV/G6案例

一、效果图 二、源码 /** * * Author: me * CreatDate: 2024-08-22 * * Description: 复杂G6案例 * */ <template><div class"moreG6-wapper"><div id"graphContainer" ref"graphRef" class"graph-content"></d…

百度营销转化追踪(网页JS布码)

引言&#xff1a;使用百度营销api配置网站上各个模块组件的转化追踪&#xff0c;统计网站上的各组件模块点击等信息。 一、选择接入方式&#xff08;本文选择的是网页JS布码&#xff09; 参考文档&#xff1a;百度营销-商业开发者中心百度开发者中心是一个面向开发者的知识分享…

python画图|在3D图上画2D直方图(作图平面移动)

前期我们已经学习过2D和3D的直方图绘制&#xff1a; 二维常规直方图绘制&#xff1a;python画图|水平直方图绘制_绘制水平直方图-CSDN博客 二维极坐标直方图绘制&#xff1a;python画图|极坐标中画直方图_ax1.plot()怎么画直方图-CSDN博客 三维直方图绘制&#xff1a;python…