Redis的string类及基础指令

📅 2026/7/19 16:13:46
Redis的string类及基础指令
Redis的string类及基础指令数据结构和内部编码string1️⃣字符串数据类型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 --rawubuntu:~$ 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 命令支持多种选项来影响它的行为:EX seconds 使用秒作为单位设置key的过期时间PX milliseconds 使用毫秒为单位设置key的过期时间NX 只在key不存在时才进行设置如果key存在则该命令不执行XX 只在key存在时才进行设置如果key不存在则该命令不执行注意[ | ] 这表示中括号里面的设置可选但是只能选择由 | 分割的其中一个上面的部分命令可以进行合并SETNXSETEXPSETEX等这些算是旧命令了返回值如果设置成功返回 OK 如果由于 SET 指定了 NX 或者 XX 但条件不满足SET 不会执行并返回 (nil)EX127.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 hello127.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 worldNX127.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 hello127.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 helloXX127.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 hello1.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 abc1.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) cc1.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 range2.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 range2.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 range2.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 range2.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 52003.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 World3.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 string3.3 SETRANGE覆盖字符串的一部分从指定的偏移开始语法SETRANGE key offset value返回值替换后的 string 的长度示例redis SET key1 Hello World OK redis SETRANGE key1 6 Redis (integer) 11 redis GET key1 Hello Redis3.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