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…

PingCode:引领敏捷开发的项目管理新范式

引言: 在快速变化的软件开发行业中,项目管理工具的选择对于团队的协作效率和项目的成功率至关重要。PingCode作为一款集成了敏捷开发理念的项目管理工具,正逐渐成为业界的新宠。本文将深入探讨PingCode的核心功能、使用场景以及如何利用这款工…

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

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

js的编码和解码

在 JavaScript 中,可以使用以下内置函数来进行编码和解码: 编码 encodeURIComponent(): 该函数用于对 URI 组件进行编码,它可以将字符串中的特殊字符转换为对应的编码形式。例如,空格会被编码为 %20。 var originalString &qu…

volatile内存语义

文章目录 volatile写的内存语义volatile读的内存语义:volatile内存语义的实现原理volatile禁止重排序规则volatile禁止重排序场景有序性案例分析案例描述错误代码:如何纠正:纠正后 volatile写的内存语义 当写一个volatile变量时,J…

鸿蒙架构Android架构分析

鸿蒙(HarmonyOS)和Android是两种主要的智能设备操作系统,它们在架构设计、功能特性和开发者支持等方面展现出不同的理念和优势。以下是对鸿蒙架构和Android架构的详细分析: 架构设计 鸿蒙OS架构: 鸿蒙OS采用微内核设…

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 和实现之间被分解,但这样做的主要目的不是允许多个实现,尽管这当然是可能的,而是明确定义在“正常”应用程…

如何高效地利用淘宝API接口获取商品数据

在电商领域,能够快速且准确地获取商品数据是至关重要的。淘宝作为中国领先的电商平台,通过其开放的API接口为商家们提供了强大的数据服务功能。本文将验证如何高效地利用淘宝API接口获取商品数据,并提供一套行之有效的策略和步骤。 预备工作…

应急响应-内存分析

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

常用MQ产品的对比

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

备份数据提示Allowed memory size of 134217728 bytes exhausted的修复方法

今日给一老数据库备份,发现无法备份(有近60万条数据),查看日志,提示报错:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 189263328 bytes) in 解析:…

go语言基础之time时间处理

1.时间类型 Go 语言中使用time.Time类型表示时间。我们可以通过time.Now函数获取当前的时间对象,然后从时间对象中可以获取到年、月、日、时、分、秒等信息。 // timeDemo 时间对象的年月日时分秒 func timeDemo() {now : time.Now() // 获取当前时间fmt.Printf(&…

VitisHLS中读写任意深度的图像文件

一、8bits灰度图像的读写 这里可以使用opencv的库函数&#xff0c;也可以使用赛灵思提供的库函数。实际上&#xff0c;赛灵思的 vision库也是调用opencv的imread和imwrite库函数的&#xff0c;只不过封装了一下而已。 #include <iostream> #include <stdio.h> #in…

python3-cookbook-字典的运算

第一章:数据结构和算法 Python 提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构是很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。 因此,这一章的目的就是讨论这些比较常见的问题和算法。 另外,我们也会…

R语言【taxlist】——clean_strings():清理字符串

Package taxlist version 0.2.4 Description 多个前导的和后随的空格以及错误的编码可能会在处理分类学名称的信息中导致严重的问题。clean_strings() 方法可以清除这些错误。 Usage clean_strings(x, ...)## S4 method for signature character clean_strings(x, from &quo…

Vue的状态管理Vuex

文章目录 一、介绍二、install三、store1、介绍2、创建并全局引入3、单一状态树4、多模块状态树(无命名空间)5、多模块状态树(有命名空间)一、介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库当我们的应用遇到多个组件共享状态(共享状态:多个组件维护1个变…