Redis的string类及基础指令

Redis的string类及基础指令

数据结构和内部编码

string

1️⃣字符串数据类型
2️⃣内部编码
编码 说明
int 存储64位(8个字节)有符号整数时使用
embstr 短字符串专用,内存分配效率更高
raw 长字符串使用的基础动态字符串
  • 这些内部编码,会随着存入的数据变化进行变换,比如数字和字符一起存会让int转为embstr或者raw

  • 针对汉字的存储,在reids的客户端是什么编码,存入时就是什么编码

复制代码
  127.0.0.1:6379> set key 你好
  OK

  127.0.0.1:6379> get key
  "\xe4\xbd\xa0\xe5\xa5\xbd"


  这里 \xe4\xbd\xa0 就是 你 的UTF-8的编码,\xe5\xa5\xbd 这个就是 好 的编码
  • 想要Redis能够get到汉字,可以在启动客户端的时候,使用这样的命令

    复制代码
    redis-cli --raw
    
    ubuntu:~$ redis-cli --raw
    127.0.0.1:6379> get key
    你好
3️⃣常见指令
1.1 SET
复制代码
将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之
前关于此 key 的 TTL 也全部失效。

语法:

复制代码
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

SET 命令支持多种选项来影响它的行为:

  1. EX seconds 使用秒作为单位设置key的过期时间
  2. PX milliseconds 使用毫秒为单位设置key的过期时间
  3. NX 只在key不存在时才进行设置,如果key存在,则该命令不执行
  4. XX 只在key存在时才进行设置,如果key不存在,则该命令不执行

注意:

  1. \| 这表示中括号里面的设置可选,但是只能选择由 | 分割的其中一个
  2. 上面的部分命令可以进行合并,SETNX,SETEX,PSETEX等,这些算是旧命令了

返回值:

复制代码
如果设置成功,返回 OK
如果由于 SET 指定了 NX 或者 XX 但条件不满足,SET 不会执行,并返回 (nil)
  • EX

    复制代码
    127.0.0.1:6379> SET key1 hello EX 100
    OK
    127.0.0.1:6379> ttl key1
    (integer) 92
    127.0.0.1:6379> get key1
    "hello"
    
    127.0.0.1:6379> SETEX key2 100 world
    OK
    127.0.0.1:6379> ttl key2
    (integer) 95
    127.0.0.1:6379> get key2
    "world"
  • NX

    复制代码
    127.0.0.1:6379> exists key3
    (integer) 0
    127.0.0.1:6379> set key3 hello nx
    OK
    127.0.0.1:6379> set key3 world nx
    (nil)
    127.0.0.1:6379> get key3
    "hello"
    
    127.0.0.1:6379> exists key4
    (integer) 0
    127.0.0.1:6379> setnx key4 hello
    (integer) 1
    127.0.0.1:6379> setnx key4 world
    (integer) 1
    127.0.0.1:6379> get key4
    "hello"
  • XX

    复制代码
    127.0.0.1:6379> exists key5
    (integer) 0
    127.0.0.1:6379> set key5 hello xx
    (integer) 0
    127.0.0.1:6379> set key5 hello
    OK
    127.0.0.1:6379> set key5 hello xx
    OK
    127.0.0.1:6379> get key5
    "hello"
1.2 GET
复制代码
获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错

语法:

复制代码
GET key

返回值:

复制代码
key 对应的 value,或者 nil 当 key 不存在

示例:

复制代码
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> set key abc
OK
127.0.0.1:6379> get key
"abc"
1.3 MSET
复制代码
一次性设置多个 key 的值

语法:

复制代码
MSET key value [key value ...]

返回值:

复制代码
永远是 OK

示例:

复制代码
127.0.0.1:6379> mset key1 aa key2 bb key3 cc
OK
127.0.0.1:6379> mget key1 key2 key3
1) "aa"
2) "bb"
3) "cc"
1.4 MGET
复制代码
一次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil

语法:

复制代码
MGET key [key ...]

返回值:

复制代码
对应 value 的列表

示例:

复制代码
127.0.0.1:6379> mset key1 aa key2 bb key3 cc
OK
127.0.0.1:6379> mget key1 key2 key3
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> mget key4
1) (nil)
  • 使用 mget / mset 由于可以有效地减少了网络时间,所以性能相较更高
2.1 INCR
复制代码
将 key 对应的 string 表示的数字加一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对
应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

复制代码
INCR key

返回值:

复制代码
integer 类型的加完后的数值

示例:

复制代码
redis> EXISTS mykey
(integer) 0
redis> INCR mykey
(integer) 1
redis> SET mykey "10"
"OK"
redis> INCR mykey
(integer) 11
redis> SET mykey "234293482390480948029348230948"
"OK"
redis> INCR mykey
(error) value is not an integer or out of range
redis> SET mykey 'not a number'
"OK"
redis> INCR mykey
(error) value is not an integer or out of range
2.2 INCRBY
复制代码
将 key 对应的 string 表示的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如
果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

复制代码
INCRBY key decrement

返回值:

复制代码
integer 类型的加完后的数值

示例:

复制代码
redis> EXISTS mykey
(integer) 0
redis> INCRBY mykey 3
(integer) 3
redis> SET mykey "10"
"OK"
redis> INCRBY mykey 3
(integer) 13
redis> INCRBY mykey "not a number"
(error) ERR value is not an integer or out of range
redis> SET mykey "234293482390480948029348230948"
"OK"
redis> INCRBY mykey 3
(error) value is not an integer or out of range
redis> SET mykey 'not a number'
"OK"
redis> INCRBY mykey 3
(error) value is not an integer or out of range
2.3 DECR
复制代码
将 key 对应的 string 表示的数字减一。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对
应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

复制代码
DECR key

返回值:

复制代码
integer 类型的减完后的数值

示例:

复制代码
redis> EXISTS mykey
(integer) 0
redis> DECR mykey
(integer) -1
redis> SET mykey "10"
"OK"
redis> DECR mykey
(integer) 9
redis> SET mykey "234293482390480948029348230948"
"OK"
redis> DECR mykey
(error) value is not an integer or out of range
redis> SET mykey 'not a number'
"OK"
redis> DECR mykey
(error) value is not an integer or out of range
2.4 DECRBY
复制代码
将 key 对应的 string 表示的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如
果 key 对应的 string 不是一个整型或者范围超过了 64 位有符号整型,则报错

语法:

复制代码
DECRBY key decrement

返回值:

复制代码
integer 类型的减完后的数值

示例:

复制代码
redis> EXISTS mykey
(integer) 0
redis> DECRBY mykey 3
(integer) -3
redis> SET mykey "10"
"OK"
redis> DECRBY mykey 3
(integer) 7
redis> DECRBY mykey "not a number"
(error) ERR value is not an integer or out of range
redis> SET mykey "234293482390480948029348230948"
"OK"
redis> DECRBY mykey 3
(error) value is not an integer or out of range
redis> SET mykey 'not a number'
"OK"
redis> DECRBY mykey 3
(error) value is not an integer or out of range
2.5 INCRBYFLOAT
复制代码
将 key 对应的 string 表示的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果
key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是一个浮点数,则报
错。允许采用科学计数法表示浮点数

语法:

复制代码
INCRBYFLOAT key increment

返回值:

复制代码
加/减完后的数值

示例:

复制代码
redis> SET mykey 10.50
"OK"
redis> INCRBYFLOAT mykey 0.1
"10.6"
redis> INCRBYFLOAT mykey -5
"5.6"
redis> SET mykey 5.0e3
"OK"
redis> INCRBYFLOAT mykey 2.0e2
"5200"
3.1 APPEND
复制代码
如果 key 已经存在并且是一个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在,
则效果等同于 SET 命令

语法:

复制代码
APPEND KEY VALUE

返回值:

复制代码
追加完成之后 string 的长度

示例:

复制代码
redis> EXISTS mykey
(integer) 0
redis> APPEND mykey "Hello"
(integer) 5
redis> GET mykey
"Hello"
redis> APPEND mykey " World"
(integer) 11
redis> GET mykey
"Hello World"
3.2 GETRANGE
复制代码
返回 key 对应的 string 的子串,由 start 和 end 确定(左闭右闭)。可以使用负数表示倒数。-1 代表
倒数第一个字符,-2 代表倒数第二个,其他的与此类似。超过范围的偏移量会根据 string 的长度调整
成正确的值

语法:

复制代码
 GETRANGE key start end

返回值:

复制代码
string 类型的子串

示例:

复制代码
redis> SET mykey "This is a string"
"OK"
redis> GETRANGE mykey 0 3
"This"
redis> GETRANGE mykey -3 -1
"ing"
redis> GETRANGE mykey 0 -1
"This is a string"
redis> GETRANGE mykey 10 100
"string"
3.3 SETRANGE
复制代码
覆盖字符串的一部分,从指定的偏移开始

语法:

复制代码
SETRANGE key offset value

返回值:

复制代码
替换后的 string 的长度

示例:

复制代码
redis> SET key1 "Hello World"
"OK"
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"
3.4 STRLEN
复制代码
获取 key 对应的 string 的长度。当 key 存放的类似不是 string 时,报错

语法:

复制代码
 STRLEN key

返回值:

复制代码
string 的长度。或者当 key 不存在时,返回 0

示例:

复制代码
redis> SET mykey "Hello world"
 "OK"
redis> STRLEN mykey
(integer) 11
redis> STRLEN nonexisting
(integer) 0
相关推荐
小小工匠8 小时前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
麦聪聊数据9 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_9 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡9 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
ofoxcoding9 小时前
在AI API聚合平台配置DeepSeek V3.2提示词缓存实战:快速接入与成本优化指南
人工智能·spring·缓存·ai
曹牧10 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon10 小时前
SQL学习指南——视图
数据库·sql
活宝小娜10 小时前
mysql详细安装教程
数据库·mysql·adb
贤时间10 小时前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心10 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle