零基础学习Redis(6) -- string类型命令使用

news/2025/1/15 23:55:51/

redis中,不同的数据结构有不同的操作命令。

redis中的string是按照二进制存储的,不会对数据做任何编码转换。

1. set / get 命令

为了方便使用,redis提供了多个版本的get / set命令来操作字符串

1. set

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

使用set时可以同时设置过期时间,EX以秒为单位,PX以毫秒为单位:

 [NX | XX]:

NX:如果key不存在,该语句才执行成功,否则返回nil

XX:如果key存在,该语句才执行成功,否则返回nil

2. get

get key

返回对应key的value,只有value是字符串类型才能成功

3. mset 

一次设置多个key

mset key1 value1 key2 value2 ...

4. mget

一次获取多个value,同样只能获取字符串类型

mget key1 key2 key3 ... 

5. setnx

相当于 set key value nx,只有key不存在才会设置成功,否则返回0

setnx key value

6. setex

相当于 set key value ex seconds,设置key的同时设置过期时间,单位是秒

setex key seconds value

7. psetex 

相当于 set key value ex milliseconds,设置key的同时设置过期时间,单位是豪秒

2. 数值操作命令 

前面我们说过,redis中的字符串存整数的时候是int类型编码,所以redis还提供了一些操作数值的命令

1. incr / incrby

incr key

对指定key的value + 1并返回+1后的值只有value是int编码时才生效:

decrby key n

对指定key的value + n并返回+n后的值只有value是int编码时才生效,n 可以为负数:

2. decr / decrby

decr key

对指定key的value - 1并返回-1后的值只有value是int编码时才生效:

decrby key n

对指定key的value - n并返回-n后的值只有value是int编码时才生效,n 可以为负数: 

3. incrbyfloat 

incrbyfloat key n

对指定key的value - n并返回-n后的值只有value是整数或小数时才生效,n 可以为小数/负数: 

注意:对于上面的5个命令,如果对应的key不存在会先创建一个value为0的key再执行操作

3. 字符串操作命令

1. append

append key value

给对应key的值拼接上一个字符串value,拼接成功返回拼接后的字符串字节数,只有string类型才能使用:

如果key不存在则相当于set命令 

2. getrange

getrange key start end

获取key对应value的[start,end]区间的字符串:

注意这里是闭区间

这里的start 和 end可以为负数,-1 相当于字符串的最后一个字符位置,-2相当于倒数第二个位置

特殊情况:

如果存的是中文,这里我使用的xshell是utf8编码,存中文时,会存入对应的utf8编码的二进制,由于utf8编码的每个汉字用3个字节表示,而getrange命令的下标单位是字节,所以使用getrange就存在从某个汉字中间开始获取/结尾字符串的情况:

这里如果想让redis显示解析后的字符可以在启动redis客户端的时候使用:

redis-cli --raw

3. setrange

setrange key offset value 

从指定下标开始替换字符串,返回替换后的长度

如果offerset超过了key中长度,会把之间的字节值填为0:

offerset也可以对不存在的key操作,在操作之前会创建一个value为空字符串的key:

4. strlen

strlen key 

获取字符串的长度,单位是字节:

4. 应用场景

1. 缓存

作为缓存存储热点数据,常见的实现方式是把最近被访问的数据当作热点数据存到redis中,即当一个数据被访问,而这个数据又没在redis中,就把这个数据同时缓存到redis中,但是这样可能导致redis中数据越来越多,导致装不下,于是可以在把数据写给redis时设置一个过期时间。

2. 计数器

例如记录一个视频的点赞数,每有一个点赞就使用incr命名让点赞数+1,定期把点赞数同步到数据库即可,避免频繁操作硬盘。

3. 存储会话信息

分布式架构中可以用来存储会话信息,使多个服务器共享会话信息

4. 验证码

通常来说,验证码会有一个有效时间,这个时间就可以通过设置key的过期时间来完成,同时还可以在用户获取验证码时设置一个标记key,这个key存在时用户不能再次获取验证码,也就是限制获取验证码的时间间隔,防止恶意攻击。


http://www.ppmy.cn/news/1515717.html

相关文章

仿Muduo库实现高并发服务器——EventLoop模块

我刚开始看这个模块时,也是看不明白,什么是事件管理模块。 此时此刻,大领导的背影,还是那么清晰。结合故事模块,慢慢理。 EventLoop模块 成员: 绿色: 利用智能指针对new出来的对象进行管理&…

工作实战-项目压测记录

1-1-1每分钟的单量 1-1-2第二版测试 2022年5月16日 17:43:11 成功 失败 其它(nginx) 真实入库单量 总单量 52 1 447 500 2022年5月16日 19:42:18 成功 失败 其它(nginx) 真实入库单量 总单量 311 689 306 1000 2-0-1. 20线程-2000单执行结果 2-1-0. 40线…

excel vba将选中区域向下复制指定次数

excel vba将选中区域向下复制指定次数 1 需求 将选中区域向下复制4次 2 选中区域 A2:F6 执行VBA,会弹出对话框,输入数字4 (表示向下复制4次) 3 复制完成 VBA code Sub CopySelection() Dim numCopies As Integ…

达芬奇18.6苹果电脑mac版下载安装教程中文汉化版

达芬奇18.6苹果电脑mac版下载安装教程中文汉化版 达芬奇软件有多个版本,MAC电脑版是运行在苹果系统上的版本。 前言 达芬奇调色工具可以实现以下效果: 色彩校正:调整视频的色彩平衡、对比度、饱和度等,使画面更加鲜艳、生动。风…

Java笔试面试题AI答之线程(18)

文章目录 103. 简述Java线程池中队列常用类型有哪些 ?1. ArrayBlockingQueue2. LinkedBlockingQueue3. SynchronousQueue4. PriorityBlockingQueue5. DelayQueue 104. 简述线程安全需要保证几个基本特征?105. 简述线程池原理以及核心参数 ?线…

javascript 对象 JSON.stringify()的使用

在JavaScript中,JSON.stringify() 是一个非常有用的函数,它用于将一个 JavaScript 对象或值转换为 JSON 格式的字符串。这通常用于将 JavaScript 对象序列化以便于存储或者通过网络传输 const obj {name: "Alice",age: 30,isStudent: false,…

基于无人机边沿相关 ------- IBUS、SBUS协议和PPM信号

文章目录 一、IBUS协议二、SBUS协议三、PPM信号 一、IBUS协议 IBUS(Intelligent Bus)是一种用于电子设备之间通信的协议,采用串行通信方式,允许多设备通过单一数据线通信,较低延迟,支持多主机和从机结构&a…

Web自动化测试:selenium使用详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 说到自动化测试,就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一,支持快速开发自动化测试框架,…