Redis常用数据类型--String

String

  • 常用命令
    • SET
    • GET
    • MGET
    • MSET
    • SETNX
    • INCR/DECR
    • INCRBY/DECRBY
    • INCRBYFLOAT
    • APPEND
    • GETRANGE
    • SETRANGE
    • STRLEN
  • 内部编码
  • 典型应用场景

常用命令

SET

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

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

时间复杂度:O(1)
SET 命令⽀持多种选项来影响它的⾏为:
• EX seconds⸺使⽤秒作为单位设置 key 的过期时间。
• PX milliseconds⸺使⽤毫秒作为单位设置 key 的过期时间。
• NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
• XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
注意:带选项的 SET 命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替

GET

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

GET key

时间复杂度:O(1)

MGET

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

MGET key [key ...]

时间复杂度:O(N) N 是 key 数量

MSET

⼀次性设置多个 key 的值。

 MSET key value [key value...]

时间复杂度:O(N) N 是 key 数量
使⽤ mget / mset 由于可以有效地减少了⽹络时间,所以性能相较更⾼

SETNX

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

SETNX key value

时间复杂度:O(1)

INCR/DECR

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

 INCR key/DECR key

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

INCRBY/DECRBY

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

INCRBY key decrement/DECRBY key decrement

时间复杂度:O(1)

INCRBYFLOAT

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

INCRBYFLOAT key increment

时间复杂度:O(1)

APPEND

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

APPEND KEY VALUE

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

GETRANGE

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

GETRANGE key start end

时间复杂度:O(N). N 为 [start, end] 区间的⻓度. 由于 string 通常⽐较短, 可以视为是 O(1)

SETRANGE

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

SETRANGE key offset value

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

STRLEN

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

STRLEN key

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

内部编码

字符串类型的内部编码有 3 种:
• int:8 个字节的⻓整型。
• embstr:⼩于等于 39 个字节的字符串。
• raw:⼤于 39 个字节的字符串。
Redis 会根据当前值的类型和⻓度动态决定使⽤哪种内部编码实现

典型应用场景

  1. 缓存
  2. 计数
  3. 集中管理 session
  4. 手机验证码

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

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

相关文章

mysql8安装基础操作(一)

一、下载mysql8.0 1.查看系统glibc版本 这里可以看到glibc版本为2.17,所以下载mysql8.0的版本时候尽量和glibc版本对应 [rootnode2 ~]# rpm -qa |grep -w glibc glibc-2.17-222.el7.x86_64 glibc-devel-2.17-222.el7.x86_64 glibc-common-2.17-222.el7.x86_64 gl…

.NET高级面试指南专题三【线程和进程】

在C#中,线程(Thread)和进程(Process)是多任务编程中的重要概念,它们用于实现并发执行和多任务处理。 进程(Process): 定义: 进程是正在运行的程序的实例&…

C#,数据检索算法之插值搜索(Interpolation Search)的源代码

数据检索算法是指从数据集合(数组、表、哈希表等)中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供插值搜索(Interpolation Search)的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.…

CSS color探索

CSS 颜色探索 在 CSS 的世界里,颜色为网页元素赋予了丰富的视觉效果。通过预定义的颜色名称、RGB、HEX、HSL,以及支持透明度的 RGBA 和 HSLA,我们可以创造出各种吸引人的设计。接下来,我们将通过示例代码来深入了解这些颜色应用。…

kafka-顺序消息实现

kafka-顺序消息实现 场景 在购物付款的时候,订单会有不同的订单状态,对应不同的状态事件,比如:待支付,支付成功,支付失败等等,我们会将这些消息推送给消息队列 ,后续的服务会根据订…

CSS基础细节学习

目录 一.CSS--网页的美容师 二.语法规范及选择器的介绍 一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称,有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言,CSS主要用于设置HTML页面中的文本内容(字体、大小…

log4j2 java api 入门介绍

概述 Log4j 2 API 提供了应用程序应该编码的接口,并提供了实现者创建日志实现所需的适配器组件。 虽然 Log4j 2 在 API 和实现之间被分解,但这样做的主要目的不是允许多个实现,尽管这当然是可能的,而是明确定义在“正常”应用程…

应急响应-内存分析

在应急响应过程中,除了上述几个通用的排查项,有时也需要对应响应服务器进行内存的提权,从而分析其中的隐藏进程。 内存的获取 内存的获取方法有如下几种: 基于用户模式程序的内存获取;基于内核模式程序的内存获取&a…

常用MQ产品的对比

常用MQ产品的对比 本文整理了常用MQ之间的对比,旨在帮助大家在实际项目中选择MQ产品。 消息队列对比参照表 注: 对照表来自:消息队列对比参照表 ,对比维度比较全面,结果个人比较认同,强烈建议参考。 Rock…

Docker安装RcoketMQ

1、Docker安装RcoketMQ-4.9.4 在同级文件夹创建目录config,并在里面创建文件broker.conf,文件内容如下: brokerClusterNameDefaultCluster brokerNamebroker-a brokerId0 deleteWhen04 fileReservedTime48 brokerRoleASYNC_MASTER flushDis…

Python网络爬虫实战——实验5:Python爬虫之selenium动态数据采集实战

【实验内容】 本实验主要介绍和使用selenium库在js动态加载网页中数据采集的作用。 【实验目的】 1、理解动态加载网页的概念 2、学习Selenium库基本使用 3、掌握动态加载数据采集流程 【实验步骤】 步骤1理解动态加载网页 步骤2学习使用Selenium库 步骤3 采集河北政府采购…

Python初学者学习记录——python基础综合案例:数据可视化——地图可视化

一、基础地图使用 1、基础地图演示 2、基础地图演示——视觉映射器 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 准备地图对象 map Map() # 准备数据 data [("北京市", 99),("上海市", 199),("湖南省", 2…

1 月 28日算法练习-前缀和

小郑的蓝桥平衡串 思路:把 L 看成 1,Q 看成 -1,利用前缀和来得到输入串的前缀子串中LQ 的和,利用前缀和差的性质得到子串,通过枚举看它是否平衡。 将L看做1,Q看做-1,只有当某个区间…

如何快速上手一个vue框架

安装nvm 下载nvm-setup.zip: https://github.com/coreybutler/nvm-windows/releases 解压安装nvm: 创建两个文件夹,一个是nvm的安装位置,另一个是node.js的下载位置。不需要配置环境变量和修改setting文件了 检查nvm是否安装成功…

不常见知识点汇总

目录 1.关于输入流(cin)1.1 cin.fail()1.2 cin.clear()1.3 cin.ignore() 随时补充!!! 1.关于输入流(cin) 问题描述: int input 0; cin >> input; while (cin.fail()) {cin.…

Linux 增加 SWAP 空间

一、需求 通过阿里云启动项目时,使用Vuepress build编译静态页面时内存需要800MB,导致内存不够,因此考虑使用swap方式,置换一些内存资源存放swap磁盘。 [rootxxx myblog]# npm run docs:dev> myblog1.0.0 docs:dev > vuep…

全角色服务、全场景支撑、全业务应用的新一代智慧教室

新一代智慧教室以“数智化助力高质量人才培养”为核心目标,以AI赋能的智能硬件为基础构建多形态智慧教学环境,以中台为支撑实现数据、设备、系统、业务的互联互通、开放共享,以平台全面覆盖教学应用,采集、汇聚、挖掘、分析课前课…

【解决】IntelliJ IDEA 重命名 Shift + F6 失效

IntelliJ IDEA 重命名 Shift F6 失效 问题解决 问题 Idea 重命名 Shift F6 ,一直没反应 解决 调查发现原因是微软新版的输入法冲突了。需要设置【使用以前版本的微软拼音输入法】解决兼容性。 设置 -> 时间和语言 -> 区域 -> 语言选项 -> 键盘选项…

公众号迁移公证书模板在哪里下载?

公众号迁移有什么作用?只能变更主体吗?公众号迁移的作用可不止变更主体这一个哦,它还可以把个人公众号变成企业公众号,或者把服务号变成订阅号,甚至还能开通留言功能。不过要注意,现在订阅号已经不能变成服…

软考计算题注意事项总结

1、沟通渠道中,N涉及多少人?是有所增加还是增至多少人? 2、在EMV中,关注的是成本还是收益?若是考虑成本和时间,则选择较小的方案;若是关注收益,则选择较大的方案。 3、在PERT中&am…