Redis常见数据类型(2)

String字符串

字符串是Redis最基础的数据类型, 关于字符串需要特别注意: (1)首先Redis中所有的键的类型都是字符串类型, 而且其它几种数据结构也是在字符串类型的基础上构建的, 例如列表和集合的元素都是字符串类型, 所以字符串类型能为其它4种数据结构的学习奠定基础. (2)其次, 如图, 字符串类型的值实际可以是字符串, 包含一般格式的字符串类似JSON, XML格式的字符串; 数字, 可以是整型或者浮点型; 甚至是二进制数据, 例如图片, 音频等. 不过一个字符串的最大值不能超过512MB.

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

常见命令

SET

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

语法:

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

命令有效版本: 1.0.0之后.    时间复杂度:O(1) 

选项:

EX seconds: 使用秒为单位设置key的过期时间.

PX milliseconds: 使用毫秒为单位设置key的过期时间.

NX: 只在key不存在时才进行设置, 即如果key之前已经存在, 设置不执行.

XX: 旨在key存在时才进行设置, 即如果key之前不存在, 设置不执行.

注: 由于带选项的SET命令可以被SETNX, SETEX, PSETEX等命令代替, 所以之后版本中, Redis可能进行合并.

返回值:

如果设置成功, 则返回OK.

如果由于SET制定了NX或XX但条件不满足, SET不会执行, 并返回(nil).

示例:

 

GET

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

语法:

GET key 

命令有效版本: 1.0.0之后.  时间复杂度: O(1).

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

MGET

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

语法:

MGET key [key...] 

命令有效版本: 1.0.0之后. 时间复杂度: O(N) N是key的数量.

返回值: 对应value的列表.

示例:

 

MSET

一次性设置多个key的值.

语法:

MSET key value [key value...] 

命令有效版本: 1.0.1之后.  时间复杂度: O(N) N是key的数量.

返回值: 永远是OK.

 

SETNX

设置key-value但只允许在key之前不存在的情况下.

语法:

SETEX key value

命令有效版本: 1.0.0之后 时间复杂度: O(1)

返回值: 1表示设置成功. 0表示没有设置.

示例:

 

计数命令 

INCR

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

语法:

INCR key

命令有效版本: 1.0.0之后  时间复杂度:O(1)

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

示例:

 

INCRBY

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

语法:

INCRBY key decrement

命令有效版本: 1.0.0之后. 时间复杂度: O(1)

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

示例:

 

DECR

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

语法:

DECR key 

命令有效版本: 1.0.0之后  时间复杂度: O(1)

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

DECRBY

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

语法:

DECRBY key decrement

命令有效版本: 1.0.0之后. 时间复杂度: O(1)

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

INCRFLOAT

将key对应的string表示的浮点数加上对应的值.  如果对应的值是负数, 则视为减去对应的值(因此没有DECRFLOAT). 如果key不存在, 则视为key对应的value是0. 如果key对应的不是string, 或者不是一个浮点数, 则报错. 允许采用科学计数法表示浮点数.

语法:

INCRBYFLOAT key increment

命令有效版本: 2.6.0之后   时间复杂度: O(1)

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

示例:

 

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

其它命令

 APPEND

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

语法:

APPEND KEY VALUE

命令有效版本: 2.0.0之后.  时间复杂度:O(1). 追加的字符串长度比较短, 可以视为O(1).

返回值: 追加完成之后string的长度.

示例:

 

GETRANGE

返回key对应的string的字串, 由start和end确定(左闭右闭) . 可以使用负数表示倒数. -1代表倒数第一个字符, -2表示倒数第二个. 0是正数开始. 超过范围的偏移量会根据string的长度调整成正确的值.

语法:

GETRANGE key start end

命令有效版本: 2.4.0之后.  时间复杂度: O(N) N为[start,end]长度. 由于string通常较短, 可视为O(1)

返回值: string类型的字串.

SETRANGE

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

语法:

  SETRANGE key offset value 

命令有效版本: 2.2.0之后. 时间复杂度: O(N), N为value的长度. 由于value一般较短, 可视为O(1)

返回值: 替换后string的长度.

示例:

 

STRLEN

获取key对应的string长度. 当key存放的类型不是string时, 报错.

语法:

STRLEN key 

命令有效版本: 2.2.0之后. 时间复杂度:O(1)

返回值: string的长度. 或者当key不存在时, 返回0.

 

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

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

相关文章

基于Unet的BraTS 3d 脑肿瘤医学图像分割,从nii.gz文件中切分出2D图片数据

1、前言 3D图像分割一直是医疗领域的难题,在这方面nnunet已经成为了标杆,不过nnunet教程较少,本人之前跑了好久,一直目录报错、格式报错,反正哪里都是报错等等。并且,nnunet对于硬件的要求很高&#xff0c…

Java23种设计模式

本文主要是对Java中一些常用的设计模式进行讲解 后期会进行不断的更新,欢迎浏览 23种设计模式 创建型模式,共五种:工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。结构型模式,共七种:适配器模式、桥接…

Allavsoft for Mac v3.27.0.8852注册激活版 优秀的视频下载工具

Allavsoft for Mac是一款功能强大的多媒体下载和转换工具,支持从各种在线视频网站和流媒体服务下载视频、音频和图片。它具备批量下载和转换功能,可将文件转换为多种格式,以适应不同设备的播放需求。此外,Allavsoft还提供视频编辑…

彩虹易支付接口配置

支付通道配置 基本概念 彩虹易支付系统有强大的支付接口扩展能力,首先需要明白以下几个概念。 支付方式: 支付方式用于定义发起支付的调用值(在前台开发文档里面显示)与支付方式名称。目前系统自带6种支付方式,它们的…

【C++】map set 底层刨析

文章目录 1. 红黑树的迭代器2. 改造红黑树3. map 的模拟实现4. set 的模拟实现 在 C STL 库中,map 与 set 的底层为红黑树,那么在不写冗余代码的情况下使用红黑树同时实现 map 与 set 便是本文的重点。 1. 红黑树的迭代器 迭代器的好处是可以方便遍历&…

openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警

文章目录 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 openGauss学习笔记-255 openGauss性能调优-使用Plan Hint进行调优-Hint的错误、冲突及告警 Plan Hint的结果会体现在计划的变化上,可以通过explain来查看变化。 …

Flutter Don‘t use ‘BuildContext‘s across async gaps.

Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性

JAVAEE之Spring Boot日志

1. 日志概述 1.1 学习日志的原因 ⽇志对我们来说并不陌生, 从JavaSE部分, 我们就在使用 System.out.print 来打印日志了. 通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程. 在Spring的学习中, 也经常根据控制台的日志来分析和定位问题. 随着项⽬的复杂…

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 …

Python 基于列表实现的通讯录管理系统(有完整源码)

目录 通讯录管理系统 PersonInformation类 ContactList类 menu函数 main函数 程序的运行流程 完整代码 运行示例 通讯录管理系统 这是一个基于文本的界面程序,用户可以通过命令行与之交互,它使用了CSV文件来存储和读取联系人信息,这…

Docker实战教程 第1章 Linux快速入门

2-1 Linux介绍 为什么要学Linux 三个不得不学习 课程需要:Docker开发最好在Linux环境下。 开发需要:作为一个后端程序员,是必须要掌握Linux的,这是找工作的基础门槛。 运维需要:在服务器端,主流的大型服…

Java栈和队列的实现

目录 一.栈(Stack) 1.1栈的概念 1.2栈的实现及模拟 二.队列(Queue) 2.1队列的概念 2.2队列的实现及模拟 2.3循环队列 2.4双端队列(Deque) 一.栈(Stack) 1.1栈的概念 栈:一种特殊的线性表,其 只允许在固定的一端进行插入和删除元素操作…

element-ui result 组件源码分享

今日简单分享 result 组件的源码实现,主要从以下三个方面: 1、result 组件页面结构 2、result 组件属性 3、result 组件 slot 一、result 组件页面结构 二、result 组件属性 2.1 title 属性,标题,类型 string,无默…

11-1(2)-CSS 背景+CSS 精灵图

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 一、CSS 背景1 背景颜色2 背景色半透明3 背景图片4 背景平铺5 背景图片位置6 …

linux操作系统安装及命令初识,上岸蚂蚁金服

310 包) desktop 1800个包左右 内容必须大于 768M 系统设置 分区设置 挂载点 /boot / swap 交换分区–占用磁盘容量 网络配置 网卡配置 设置为ON 主机名配置 Begin installation 设置 root 用户密码 命令初识 命令 选项 参数: 命令选项参数…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

iOS开发进阶(十三):脚手架创建iOS项目

文章目录 一、前言二、xcode-select 命令三、拓展阅读 一、前言 项目初期,需要搭建项目基本框架,为此离不开辅助工具,即脚手架。当然,IDE也可以实现新建空白项目,但是其新建后的项目结构可能不符合预期设计&#xff0…

AWS-EKS 给其他IAM赋予集群管理权限

AWS EKS 设计了权限管理系统,A用户创建的集群 B用户是看不到并且不能管理和使用kubectl的,所以我们需要共同管理集群时就需要操场共享集群访问给其他IAM用户。 两种方式添加集群控制权限(前提:使用有管理权限的用户操作&#xff…

顺序表相关习题

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

Java笔试题总结

HashSet子类依靠()方法区分重复元素。 A toString(),equals() B clone(),equals() C hashCode(),equals() D getClass(),clone() 答案:C 解析: 先调用对象的hashcode方法将对象映射为数组下标,再通过equals来判断元素内容是否相同 以下程序执行的结果是: class X{…