Redis的String类型

string类型是Redis最基础的数据类型,首先redis中所有的key都是字符串类型,而且其他几种数据结构也都是在字符串基础上构建的,例如list,set的元素类型是字符串类型。其次string类型包含一般格式的字符串或者类似json,xml格式的字符串;数字,可以是整形或者浮点型;也可也是二进制流数据,例如图片,音频,视频等。不过字符串的最大值不能超过512MB。

redis出现乱码问题的可能性较小,因为redis的字符串是按照二进制流的形式保存的,客服端传入的命令使用什么字符集编码,就存储什么字符集编码

常见命令

set

将string类型的value设置到key中,如果key之前存在,则覆盖,无论原来的数据类型是什么,之前的ttl也会失效。

语法:set key value [expiration ex seconds|px milliseconds] [nx|xx]

redis文档的格式说明: 是一个独立的单元,表示可选项(可有可无);其中 | 表示"或者"的意思,只能出现一个; 和 之间,可以同时存在。

  • ex过期时间单位为秒
  • px过期时间单位为毫秒
  • nx如果key不存在,才设置,如果key存在,则不设置
  • xx如果key存在,才设置(相当于更新),如果key不存在,则不设置


使用 **setnx**, **setex**, **psetex**替代带选项的set命令
  • setnx key value 即set key value nx
  • setex key 10 value 即set key value ex 10
  • psetex key 1000 value 即set key value px 1000
mset 一次操作多组键值对

语法:mset key value [key value...]

get

语法:get key返回value值

对于get来说,只支持字符串类型的value。如果value是其他类型,使用get获取会报错

mget 一次性获取多个key

语法:mget key [key ...]

如果对应的key不存在或者对应的数据类型不是string,返回nil

:::warning

使用mset/mget可以有效减少网络时间,提高性能。

:::

计数命令

incr

将key对应的string表示的数字+1,如果key不存在,则视为key对应的value是0。如果key对应的的string不是一个整形或者范围超过64位有符号整型,则报错。

语法:incr key 时间复杂度O(1), 返回int类型加完后的数值

incrby

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

语法:incrby key increment 时间复杂度O(1),返回加完的数值

decr/decrby

语法:decr key/decrby key decrement

用法和incr/incrby类似

incrbyfloat

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

语法:incrbyfloat key increment 时间复杂度O(1)

其他命令

append 字符串拼接

语法:append key value

如果key存在并且是一个string,命令会将value追加到原有的string后边。如果key不存在,则

getrange 截取子串

语法:getrange key start end

返回key对应的string子串,由start和end确定(闭区间)。可以使用负数表示倒数第几个(-1表示倒数第一个字符,-2表示倒数第二个字符),超过范围的偏移量会根据string的长度调整成正确的值

setrange 替代字符串的一部分,从指定偏移开始

语法:setrange key offset value 时间复杂度O(1) 返回值:替换后string的长度

:::danger

注意:当value是中文字符串,进行setrange可能出现问题。因为utf8编码汉字是3个字节,而替换是按照字节。

:::

strlen 获取key对应的string长度

语法:strlen key 时间复杂度O(1) 返回值:string长度,当key不存在返回0

相关推荐
知行产研21 分钟前
易控智驾:毛利率跃升17.2个百分点,矿山无人驾驶从“规模换增长“迈入“盈利拐点“
数据库·mysql
千里码aicood30 分钟前
基于CART算法的图书分类系统设计与实现
数据库·算法·分类
饺子大魔王的男人1 小时前
Redis 内存和连接异常怎么排查?用 redis_exporter 搭一套可远程抓取的监控链路
数据库·redis·bootstrap
可涵不会debug1 小时前
第一次学 LangGraph:用一个快递案例搞懂 State、Node、Edge 和 compile
服务器·数据库·mysql
IvorySQL2 小时前
PostgreSQL 日报 |RLS 机密性绕过漏洞(9 月 27 日)
数据库·postgresql
夕除2 小时前
redis--RDB AOF
数据库·redis·缓存
数据工匠老o2 小时前
"能用应用层解决的不用存储过程",十年数据库经验总结
数据库·架构
AC赳赳老秦2 小时前
公开音频转写信息提取:OpenClaw 处理发布会与听证会文本并提取核心决策信息
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
老纪的技术唠嗑局3 小时前
异步索引特性解析:OceanBase 如何提升持续写入场景下的索引检索性能
数据库
老纪的技术唠嗑局3 小时前
Tibo 谈 Codex:harness 总比模型快一步
数据库·人工智能