【Redis】string数据类型

文章目录

  • 常用命令
    • set
      • setnx & NX
      • XX
      • setex & EX
      • psetex & PX
    • mset
    • get & mget
    • incr & decr
    • incrby & decrby
    • incrbyfloat
    • append
    • getrange
    • setrange
    • strlen
  • 内部编码

字符串类型是 Redis 最基础的数据类型。

在redis中所有的键都是 string 类型,其他的数据类型也都是在 string 的基础上构建的

string 类型可以是实际上的字符串,也可以是 JSON XML 格式的字符串

常用命令

set

SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

将 string 类型的 value 设置到 key 中,时间复杂度为 O(1),设置成功返回 OK,失败返回 nil

img

可以看到 set 有很多的参数,正因为这些参数又可以分出几种不同的设置键值的命令

setnx & NX

如果在 set 命令的时候加上 NX 就代表着:只在 key 不存在时才进⾏设置,也就是说当 key 存在就不执行

想实现这个效果也可以使用 setnx 命令,这个命令就是代表着 set 加上了 NX,但是使用这个命令就不能结合 set 中的其他参数使用了。

img

XX

如果在 set 时加上 XX 就代表着:只有 key 存在的时候才能设置,将新的 Value 覆盖原先的,即 key 不存在则不执行。

这个参数并没有对应的命令

img

setex & EX

如果在 set 时加上 EX seconds 就代表着: 使用 seconds 秒设置 key 的过期时间

想实现这个效果也可以使用 setex 命令,这个命令就是代表着 set 加上了 EX。注意 setex 命令的 key 后面跟着的是 seconds 而不是 value,并且 setex 是可以覆盖已存在的 key 的值的。

SETEX key seconds value

img

psetex & PX

如果在 set 时加上 PX millseconds 就代表着: 使用 millseconds 毫秒设置 key 的过期时间

psetex 用法和 setex 一样。

img

mset

set 是单次设置一个 key,而 mset 是单次设置多个 key。

MSET key value [key value ...]

单次设置多个 key 也就意味着可以少点向 redis 发送网络请求,大大提升性能。

需要注意的是:如果单次设置太多个 key 可能会导致 redis 因为这条指令执行的时间太长而阻塞住,所以要根据实际情况衡量。

img

get & mget

get 用来获取单个 key 的 value ,需要注意如果这个 key 的 value 不是 string 类型则会报错

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

img

incr & decr

INCR key
DECR key

incr:将 key 对应的 string 表⽰的数字加⼀。

decr:将 key 对应的 string 表⽰的数字减⼀。

二者都是如果 key 对应的 string 表示的不是⼀个整型或者范围超过了 64 位有符号整型则报错。

img

incrby & decrby

INCRBY key decrement
DECR key decrement

incrby:将 key 对应的 string 表⽰的数字加上 decrement 对应的值。

decrby:将 key 对应的 string 表⽰的数字减去 decrement 对应的值。

二者都是如果 key 对应的 string 表示的不是⼀个整型或者范围超过了 64 位有符号整型则报错。

img

incrbyfloat

INCRBYFLOAT key increment

incrbyfloat:将 key 对应的 string 表⽰的数字加上 increment 对应的浮点数值,increment 既可以是正数也可以是负数。

img

append

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

img

getrange

 GETRANGE key start end

返回 key 对应的 value 的⼦串,由 start 和 end 确定(左闭右闭)。负数表示右往左数的位置,-1表示倒数第一个,0表示正数第一个。如果超过了长度则会根据长度自动调整。

img

setrange

SETRANGE key offset value

从指定的 offset 偏移量开始覆盖字符串

img

strlen

获取 key 对应的 value 的长度,如果 value 不为 string 则报错。

内部编码

字符串类型的内部编码有 3 种:

  • 当 value 表示整型并且表示的整型不超过8个字节时,内部编码就为 int 对应 C++ 中的(long long)
  • 当 value 表示不为 int 并且字符串的长度没有超过边界值(默认值为39)个字节时,为 embstr 类型
  • 除去以上两种都为 raw

redis 会根据当前的类型和长度去决定使用哪一种内部编码实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle操作系统OS认证和密码文件认证

1 说明 1.1 常见认证方式 Oracle登录认证方式主要涉及到如何验证用户身份以访问数据库。Oracle数据库提供了多种认证机制来确保数据的安全性和访问控制,每种方式都有其特定的使用场景和安全性考虑。以下是Oracle中常见的登录认证方式: 1、基于操作系统…

Vue-鼠标悬浮在缩略图图片上,弹出原图

使用Popover 弹出框实现 <template><div><el-popoverplacement"right"width"400"trigger"hover"><img src"https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x36…

三维天地低代码平台实现客户需求的快速交付与灵活定制

— 款合格的低代码平台应具备架构稳定、 产品质量高、 交付速度快、 运维简便的特点, 能快速实现业务需求到系统功能落地。 二十余年来, 北京三维天地科技股份有限公司一直专注于实验室信息化管理 领域, 旗下 SW- LIMS 已在化工、 环保、 食品、 科研等二十余个行业广泛应用,服…

PyTorch and Stable Diffusion on FreeBSD

Stable Diffusion在图像生成领域具有广泛的应用和显著的优势。它利用深度学习和扩散模型的原理&#xff0c;能够从随机噪声中生成高质量的图像。 官网&#xff1a;GitHub - verm/freebsd-stable-diffusion: Stable Diffusion on FreeBSD with CUDA support FreeBSD下难度主要…

docker安装并跑通QQ机器人实践(4)-bs-cqhttp搭建

go-cqhttp&#xff0c;基于 Mirai 以及 MiraiGo 的 OneBot Golang 原生实现&#xff0c;只需简单的配置, 就可以基于 go-cqhttp 使用框架开发&#xff0c;具有轻量, 原生, 高并发, 低占用, 跨平台等特点。 1 go-cqhttp 官网及可执行文件下载链接 go-cqhttp 官网&#xff1a;ht…

项目实践---贪吃蛇游戏的实现

上一章&#xff0c;我们已经分析了贪吃蛇的具体内容&#xff0c;包括它是如何实现的&#xff0c;怎样完成这个项目的&#xff0c;其中就提到了 贪吃蛇有三个代码&#xff1a;一个是测试代码&#xff0c;一个是头文件代码&#xff0c;还有一个是主函数代码。那么今天我们就来讲一…

【大数据】TiDB: A Raft-based HTAP Database

文章目录 数据库知识介绍数据库系统的ACID特性分布式系统和CAP理论关系型数据库与非关系型数据库关系型数据库非关系型数据库 OldSQL、NoSQL、NewSQLOldSQLNoSQLNewSQL OLTP、OLAP、HTAP 前言&#xff1a;为什么选择TiDB学习&#xff1f;pingCAP介绍TiDB介绍TiDB的影响力TiDB概…

什么是大语言模型以及如何构建自己的大型语言模型?

一、关于大语言模型 LLM 对于无数的应用程序非常有用&#xff0c;如果我们自己从头开始构建一个&#xff0c;那我们可以了解底层的ML技术&#xff0c;并可以根据特定需求定制LLM&#xff0c;但是对资源的需求巨大。大型语言模型是一种 ML 模型&#xff0c;可以执行各种自然语言…

《QT实用小工具·二十八》基于qt开发的各种曲线

1、概述 源码放在文章末尾 该项目实现了各种曲线的绘制&#xff0c;下面是项目的demo演示&#xff1a; 项目部分代码如下&#xff1a; #include "frmsmoothcurve.h" #include "ui_frmsmoothcurve.h" #include "smoothcurve.h" #include "…

【ThinkPHP框架教程·Part-01】ThinkPHP6.x框架安装教程

文章目录 一、框架介绍1、框架简介和版本选择2、主要新特性 二、安装步骤1、下载并运行Composer-Setup.exe2、安装TP前切换镜像3、安装稳定版4、测试运行 一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架&#xff0c;是免费开…

Axure设计原型图工具 Windows11安装步骤详解

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 Axure 是一个流行的原型设计工具&#xff0c;它被用来创建交互式原型、线框图和用户界面设计。Axure 可以帮助用户在项目早期阶段快速制作出可交互的原型&#xff0c;以便进行用户测试、验证设计概念和与…

jetcache fastjson 泛型复杂对象JSON序列 ,反序列化

Jetcache fastjson 泛型复杂对象JSON序列 ,反序列化 默认的FastJson2 序列化存在问题增强FastJson 支持Encode 编码器Decode 解码器 默认的FastJson2 序列化存在问题 默认的序列化不能转换List 中的泛型数据类型, 从缓存拿取的list集合对象数据全部都转换成了JSONObject 增强F…

UE5 把蓝图内的变量和事件暴露给序列使用

在蓝图变量内勾选Expose to Cinematics 事件: 在角色内添加自定义事件 在序列内对着角色的号添加Event,选择Trigger 添加关键帧,然后在关键帧右键添加class,在class下绑定事件

fdisk使用的MBR分区

MBR和GPT分区 MBR分区 MBR分区一般在分区的时候 &#xff0c;MBR分区格式只能支持2TB以下的硬盘容量。 分区最多为4个主分区 或 3个主分区和1个扩展分区&#xff0c;而创建扩展分区后可以分无数个逻辑分区&#xff0c;当然跟磁盘容量有关&#xff0c; 逻辑分区在扩展分区上…

K210基础实验——独立按键中断

前言 学习K210开发板的独立按键和中断功能 一、涉及到的外设资源是K210开发板上的BOOT按键和RGB灯 二、BOOT按键按下&#xff0c;MCU上连接BOOT的IO口变为低电平&#xff0c;松开后为高电平 三、引脚对应关系 BOOT : IO16 RGB灯&#xff1a; R:IO6 G:IO7 B:IO8 四、在…

A-1:树状数组

A-1:树状数组 1.介绍Q1:树状数组解决什么问题&#xff1f;Q2:树状数组的使用1.前置知识&#xff1a;lowbit(x)2.单点修改3.求[1,n]的和4.区间查询5.hh Q3:树状数组是否优化了Q4:上图上例子解释上面说的东西(Important) 2.习题练习 1.介绍 树状数组是一个比较难以理解的高级数据…

Oracle体系结构初探:聊聊REDO

上一篇文章写了undo&#xff08;文章链接&#xff1a;聊聊UNDO&#xff09;&#xff0c;这篇和大家一起聊聊redo。redo如果按照我的傻瓜翻译&#xff0c;意为再次去做、重新去做。Oracle官方对于redo的描述是&#xff1a;记录对数据所做的所有更改&#xff0c;包括未提交和已提…

Electron+Vue3整合 - 开发时状态整合

说明 本文介绍一下 Electron Vue3 的整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b;步骤一&#xff1a;创建vue3项目 常规操作&#xff0c;不再赘…

启动 UE4编辑器报 加载 Plugin 失败

启动 UE4编辑器报 加载 Plugin 失败&#xff0c;报如下错误&#xff1a; Plugin ‘SteamVR’ failer to load because module ‘SteamVR’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. …

yolov5-6.0调测记录

直接运行yolov5-6.0/detect.py&#xff0c;输出如下&#xff1a; image 1/2 C:\Users\dun\Downloads\yolov5-6.0\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.216s) image 2/2 C:\Users\dun\Downloads\yolov5-6.0\data\images\zidane.jpg: 384x640 2 persons, 2…