【redis】数据类型之string

字符串类型是Redis最基础的数据结构。首先key都是字符串类型,而且其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习打下基础。

字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。

有关string类型的命令可以通过help @string命令来查看。有关命令的使用可以通过help 命令来查看,例如help set

参考文档:http://redisdoc.com/

字符串操作

GET

get:获取值。

语法:

GET key

使用:

127.0.0.1:6379> get hi
"hello"

SET

set:设置值

语法:

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

SET命令的选项:

  • EX seconds:为键设置过期时间,单位为秒。

  • PX milliseconds:为键设置过期时间,单位为毫秒。

  • EXAT timestamp:为键设置过期的时间戳,单位为秒。

  • PXAT milliseconds-timestamp:为键设置过期的时间戳,单位为毫秒。

  • NX:键必须不存在,才可以设置成功,用于添加。

  • XX:与-NX相反,键必须存在,才可以设置成功,用于更新。

  • GET:返回键中存储的旧字符串,如果键不存在则返回nil值。当使用此选项时,如果键中存储的值不是字符串,将返回错误并中止设置操作。

  • KEEPTTL:保留与键关联的剩余时间。如果键已经设置了过期时间,使用这个选项将不会改变其过期时间。

使用:

# 设置值
127.0.0.1:6379> set k1 v1
OK# 获取值
127.0.0.1:6379> get k1
"v1"# xx 当键不存在时,设置失败
127.0.0.1:6379> set k2 vv1 xx
(nil)# xx 当键存在时,设置成功
127.0.0.1:6379> set k1 vv1 xx
OK
127.0.0.1:6379> get k1
"vv1"# nx 当键不存在时,设置成功
127.0.0.1:6379> set k3 v3 nx
OK# nx 当键存在时,设置失败
127.0.0.1:6379> set k1 v3 nx
(nil)# ex 设置过期时间,单位秒
127.0.0.1:6379> set k4 v4 ex 60
OK
127.0.0.1:6379> ttl k4
(integer) 58# px 设置过期时间,单位毫秒
127.0.0.1:6379> set k5 v5 px 60000
OK
127.0.0.1:6379> ttl k5
(integer) 56# exat 设置过期时间戳,单位秒
127.0.0.1:6379> set k6 v6 exat 1736847643
OK
127.0.0.1:6379> ttl k6
(integer) 340# pxat 设置过期时间戳,单位毫秒
127.0.0.1:6379> set k7 v7 pxat 1736847643000
OK
127.0.0.1:6379> ttl k7
(integer) 281# get 获取到旧的value,相当于getset命令
127.0.0.1:6379> set k1 v1 get
"vv1"# keepttl 保留与键关联的剩余时间
127.0.0.1:6379> set k8 v8 ex 60000
OK
127.0.0.1:6379> ttl k8
(integer) 59997
127.0.0.1:6379> set k8 vv8 keepttl
OK
127.0.0.1:6379> ttl k8
(integer) 59968
# 不带keepttl会覆盖过期时间
127.0.0.1:6379> set k8 vv8
OK
127.0.0.1:6379> ttl k8
(integer) -1

时间戳工具网站:http://shijianchuo.wiicha.com/

SETNX

setnx:键必须不存在,才可以设置成功,类似于set命令的nx选项。

语法:

SETNX key value

使用:

127.0.0.1:6379> setnx k2 v2
(integer) 0127.0.0.1:6379> setnx k9 v9
(integer) 1

由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案,Redis官方给出了使用setnx实现分布式锁的方法:
https://redis.io/docs/latest/develop/use/patterns/distributed-locks/

SETEX

setex:设置一个带过期时间(单位秒)的值。

语法:

SETEX key seconds value

使用:

127.0.0.1:6379> setex k10 60 v10
OK127.0.0.1:6379> ttl k10
(integer) 58

PSETEX

psetex:设置一个带过期时间(单位毫秒)的值

语法:

PSETEX key milliseconds value

使用:

127.0.0.1:6379> psetex k11 60000 v11
OK127.0.0.1:6379> ttl k11
(integer) 56

GETSET

getset:获取存储在指定键中的值,并将其设置为新值。

语法:

GETSET key value

使用:

127.0.0.1:6379> get k1
"v1"127.0.0.1:6379> getset k1 vv1
"v1"127.0.0.1:6379> get k1
"vv1"

GETDEL

getdel:获取存储在指定键中的值,并立即删除该键值对。。

语法:

GETDEL key

使用:

127.0.0.1:6379> getdel k1
"vv1"127.0.0.1:6379> exists k1
(integer) 0

GETEX

getex:获取键的值的同时,还可以选择设置或更新该键的过期时间。

语法:

GETEX key [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|PERSIST]

选项说明:

  • key:要获取值的键。

  • EX seconds:设置键在指定秒数后过期。

  • PX milliseconds:设置键在指定毫秒数后过期。

  • EXAT timestamp-seconds:设置键在指定的 Unix 时间戳(秒)过期。

  • PXAT timestamp-milliseconds:设置键在指定的 Unix 时间戳(毫秒)过期。

  • PERSIST:移除键的过期时间。

使用:

127.0.0.1:6379> set mykey hello
OK127.0.0.1:6379> getex mykey ex 60
"hello"127.0.0.1:6379> ttl mykey

MSET

mset:批量设置值。

语法:

MSET key value [key value ...]

使用:

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK

批量操作命令可以有效提高开发效率,mset还能保证这些key和value一次性设置成功,保证原子性。

MGET

mget:批量获取值。

语法:

MGET key [key ...]

使用:

127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"

MSETNX

msetnx:用于同时设置多个键值对,但仅当这些键都不存在时才会执行设置操作。如果有一个或多个键已经存在,那么MSETNX不会执行任何设置操作,并且会返回一个特定的结果来指示操作是否成功。

语法:

MSETNX key value [key value ...]

使用:

127.0.0.1:6379> mset a 1 b 2 c 3
OK127.0.0.1:6379> msetnx d 4 f 5 a 0
(integer) 0127.0.0.1:6379> msetnx d 4 f 5
(integer) 1

APPEND

append:追加字符串。

语法:

APPEND key value

使用:

127.0.0.1:6379> set k1 hello
OK127.0.0.1:6379> append k1 " word"
(integer) 10127.0.0.1:6379> get k1
"hello word"

SETRANGE

setrange:设置字符串范围的值。

语法:

SETRANGE key offset value

使用:

127.0.0.1:6379> set k1 hello
OK127.0.0.1:6379> setrange k1 3 world
(integer) 8127.0.0.1:6379> get k1
"helworld"

GETRANGE

getrange:获取字符串范围的值。

语法:

GETRANGE key start end

使用:

127.0.0.1:6379> getrange k1 0 3
"helw"

STRLEN

strlen:获取字符串的长度

语法:

STRLEN key

使用:

127.0.0.1:6379> strlen k1
(integer) 8

1653388632305.png

数值操作

INCR

incr:自增1。

语法:

INCR key

使用:

127.0.0.1:6379> incr k1
(error) ERR value is not an integer or out of range127.0.0.1:6379> incr k2
(integer) 1

key不存在,则从0开始递增,key存在且不是整型会报错。

INCRBY

incrby:增加指定整数步长。

语法:

INCRBY key increment

使用:

127.0.0.1:6379> incrby k2 10
(integer) 11

INCRBYFLOAT

incrbyfloat:增加指定浮点数步长。

语法:

INCRBYFLOAT key increment

使用:

127.0.0.1:6379> incrbyfloat k2 0.5
"11.5"

DECR

decr:减1。

语法:

DECR  key

使用:

127.0.0.1:6379> set k3 10
OK127.0.0.1:6379> decr k3
(integer) 9

DECRBY

decrby:减少指定整数步长。

语法:

DECRBY key increment

使用:

127.0.0.1:6379> decrby k3 5
(integer) 4

内部实现

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

  • int:8个字节的长整型。

  • embstr:小于等于39个字节的字符串。

  • raw:大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

127.0.0.1:6379> set kk 100
OK127.0.0.1:6379> object encoding kk
"int"127.0.0.1:6379> set kk 100.5
OK127.0.0.1:6379> object encoding kk
"embstr"127.0.0.1:6379> set ke abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmopqrstuvwxyz
OK127.0.0.1:6379> object encoding ke
"raw"

使用场景

  1. 缓存,将一些热点数据存储在redis中,当用户请求过来时直接查询redis,无需查询数据库,减少数据库的压力。

  2. 计数,可用于点赞数、评论数、访问数。

  3. session共享。

  4. 分布式锁。

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

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

相关文章

前部分知识复习05

一、多级渐远贴图MipMap 选择贴图,可以勾选贴图的多级渐远效果 [IntRange]_MipMap("MipMap",Range(0,12))0 //多级渐远贴图的LOD调节滑杆 _MipMapTexture("MipMapTexture",2D)"white"{} //定义多级渐远贴图 多级渐远贴图的采样…

[高等数学]曲率

一、知识点 (一)弧微分 设函数 f ( x ) f(x) f(x) 在区间 ( a , b ) (a,b) (a,b) 内具有连续导数。 在曲线 y f ( x ) yf(x) yf(x) 上取固定点 M 0 ( x 0 , y 0 ) M_0(x_0,y_0) M0​(x0​,y0​) 作为度量弧长的基点,并规定依 x x x 增…

openGauss 3.0 数据库在线实训课程2:学习客户端工具gsql的使用

openGauss数据库状态查看 前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 学习openGauss数据库客户端工具gsql的使用。 课程作业 gsql是openGauss提供在命令行下运行的数据库连接工具&am…

模拟实现string类

目录 一.构造与析构函数 二.基础小功能的实现 1.clear 2.c_str 3外部对私有的查看 三.实现string的迭代器 四.string的增删查改 1.push_back尾插 1.1reserve扩容 1.2尾插 3.运算符重载 4.insert在任意位置插入 5.erase删除 5.1npos的处理 5.2函数的实现 6.find查…

机器学习之数学基础:线性代数、微积分、概率论 | PyTorch 深度学习实战

前一篇文章,使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课:引领人工智能新时代【梗直哥瞿炜】 线性代数、微积分、概率论 …

记录一下 在Mac下用pyinstallter 打包 Django项目

安装: pip install pyinstaller 在urls.py from SheepMasterOneToOne import settings from django.conf.urls.static import staticurlpatterns [path("admin/", admin.site.urls),path(generate_report/export/, ReportAdmin(models.Report, admin.site).generat…

UE求职Demo开发日志#23 线性任务系统数据层实现

1 按上期设计创建数据结构&#xff08;做了一些修改&#xff09; USTRUCT(BlueprintType) struct ARPG_CPLUS_API FQuestNode {GENERATED_USTRUCT_BODY()// 记录前置节点IDUPROPERTY(EditAnywhere, BlueprintReadWrite,Category"QuestNode")TArray<int> Prede…

mysql8安装时提示-缺少Microsoft Visual C++ 2019 x64 redistributable

MySQL8.0安装包mysql-8.0.1-winx64进行安装&#xff0c;提示&#xff1a;This application requires Visual Studio 2019 x64Redistributable, Please install the Redistributable then runthis installer again。出现这个错误是因为我们电脑缺少Microsoft Visual C 这个程序&…

K8s 分布式存储后端(K8s Distributed Storage Backend)

K8s 分布式存储后端 在 K8s 中实现分布式存储后端对于管理跨集群的持久数据、确保高可用性、可扩展性和可靠性至关重要。在 K8s 环境中&#xff0c;应用程序通常被容器化并跨多个节点部署。虽然 K8s 可以有效处理无状态应用程序&#xff0c;但有状态应用程序需要持久存储来维护…

生产环境超实用shell脚本一

生产环境超实用shell脚本一 Shell脚本作为一种强大的自动化工具&#xff0c;能够帮助运维人员轻松应对各种复杂的任务。 本文将为您介绍服务器健康检查、日志清理、备份以及监控等多个方面&#xff0c;并详细阐述每个脚本的功能和应用场景&#xff0c;助力您提升运维效率&…

IM 即时通讯系统-46-OpenIM 提供了专为开发者设计的开源即时通讯解决方案

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

spy-debugger + Charles 调试移动端/内嵌小程序H5

简介说明&#xff1a; PC端可以用F12进行console等进行调试&#xff0c;但移动端App中使用webview就无法进行实时调试&#xff0c;针对这种情况 1. 安装 全局安装 spy-debugger sudo npm install spy-debugger -g // window不用加sudo2. spy-debugger 证书 其实spy-debugg…

深度整理总结MySQL——SQL的执行顺序和流程

SQL的执行顺序和流程 SQL的执行顺序执行一条select语句,发生了什么呢连接器查询缓存解析SQL执行SQL预处理器优化器执行器 总结 SQL的执行顺序 这是一条标准的查询语句: 但实际上并不是从上到下去解析的,真实的执行顺序是: 我们先执行from,join来确定表之间的连接关系&#x…

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…

Redis有哪些常用应用场景?

大家好&#xff0c;我是锋哥。今天分享关于【Redis有哪些常用应用场景?】面试题。希望对大家有帮助&#xff1b; Redis有哪些常用应用场景? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 是一个高性能的键值对存储数据库&#xff0c;它有许多应用场景&…

115,【7】 攻防世界 web fileinclude

进入靶场 试着访问了几个文件&#xff0c;都没得到信息&#xff0c;f12看看源码 还真有 <?php // 检查是否开启了错误显示功能 // ini_get 函数用于获取 PHP 配置选项的值&#xff0c;这里检查 display_errors 选项是否开启 if( !ini_get(display_errors) ) {// 如果错误…

SpringBoot开发(五)SpringBoot接收请求参数

1. SpringBoot接收请求参数 1.1. 获取参数的方式 &#xff08;1&#xff09;通过request对象获取参数   &#xff08;2&#xff09;RequestParam(针对请求头方式为x-www-form-ur lencoded)   &#xff08;3&#xff09;RequestBody(针对请求头方式为application/json)   …

如何理解多态,以及由此引出的抽象类和纯虚函数

文章目录 1. 多态2. 抽象类和纯虚函数 1. 多态 静态多态&#xff1a; 动态多态&#xff1a; #include <iostream> #include <string> using namespace std;// 动物的基类 class Animal { public:Animal(string name) : _name(name) {}virtual void bark() {} …

java基础2(黑马)

一、变量里的数据在计算机中的存储原理 1.二进制 .二进制&#xff1a;只有0、1&#xff0c; 按照逢二进一的方式表示数据。 十进制数字11转换为&#xff1a;1011 方法&#xff1a;除二取余法 计算机中表示数据的最小单元&#xff0c;一个字节&#xff08;Byte&#xff0c;简…

【算法篇】贪心算法

目录 贪心算法 贪心算法实际应用 一&#xff0c;零钱找回问题 二&#xff0c;活动选择问题 三&#xff0c;分数背包问题 将数组和减半的最小操作次数 最大数 贪心算法 贪心算法&#xff0c;是一种在每一步选择中都采取当前状态下的最优策略&#xff0c;期望得到全局最优…