Redis 命令及数据类型 -- String
摘要
- 本文介绍 Redis String 数据类型
- 本文基于
redis-7.4.7 - Redis官网:https://redis.io/
- Redis 命令文档:https://redis.io/docs/latest/commands/
String 数据类型
-
在 Redis 中,String(字符串) 是最基础、也是使用最广泛的数据类型。它并不只表示“文本字符串”,而是一种二进制安全(binary-safe)的值类型,可以存储多种形式的数据。
-
Redis 的 String 类型本质上是一个 key → value 的映射,key 和 value 本质上是二进制安全的字节数组。
-
Redis 不关心 key 和 value 的语义,只当作字节数组处理,可存储文本、数字、序列化对象、图片等
| 数据形式 | 示例 |
|---|---|
| 普通字符串 | "hello redis" |
| 数字(整型/浮点) | "100", "3.14" |
| JSON | {"id":1,"name":"Tom"} |
| 序列化对象 | Java / JSON / ProtoBuf |
| Base64 / 二进制 | 图片、Token 等 |
-
单个 key 和 value 最大都是 512 MB,但实际使用中及其不推荐将其设置为这么大,推荐如下
| 分类 | 最大存储大小(MB) |
|---|---|
| Key | < 1k |
| Value | < 1MB |
-
SpringBoot 的
RedisTemplate<K,V>中 String 数据类型 的操作方法与 Redis 原生命令的对应关系如下:
| 方法功能 | 方法 redisTemplate.opsForValue().xxx() |
Redis 原始命令 | 命令备注 / 推荐替代 |
|---|---|---|---|
| 设置 key 的值 | void set(K key, V value) |
SET key value |
— |
| key 不存在时设置 | Boolean setIfAbsent(K key, V value) |
SET key value NX |
NX: 如果key 不存在则设置 |
| key 不存在时设置并指定过期时间 | Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit) |
SET key value NX EX seconds |
EX: 指定过期时间,单位为秒 PX: 指定过期时间,单位为毫秒 |
| key 存在时设置 | Boolean setIfPresent(K key, V value) |
SET key value XX |
XX: 如果key 存在则设置 |
| key 存在时设置并指定过期时间 | Boolean setIfPresent(K key, V value, long timeout, TimeUnit unit) |
SET key value XX EX seconds |
— |
| 设置值并指定过期时间 | void set(K key, V value, long timeout, TimeUnit unit) |
SETEX key seconds value 即将作废 |
推荐 → SET key value EX seconds |
| 获取 key 的值 | V get(K key) |
GET key |
— |
| 获取值并重置过期时间 | V getAndExpire(K key, long timeout, TimeUnit unit) |
GETEX key EX seconds |
Redis ≥ 6.2 |
| 获取值并删除 key | V getAndDelete(K key) |
GETDEL key |
Redis ≥ 6.2 |
| 获取字符串指定区间 | V get(K key, long start, long end) |
GETRANGE key start end |
— |
| 获取字符串长度 | Long size(K key) |
STRLEN key |
— |
| 获取旧值并设置新值 | V getAndSet(K key, V value) |
GETSET key value 即将作废 |
推荐 → SET key value GET |
| 获取 key 的当前值并移除过期时间 | V getAndPersist(K key) |
GETEX key PERSIST |
Redis ≥ 6.2 |
| 数值自增 1 | Long increment(K key) |
INCR key |
— |
| 数值增加指定值 | Long increment(K key, long delta) |
INCRBY key increment |
— |
| 数值自减 1 | Long decrement(K key) |
DECR key |
— |
| 数值减少指定值 | Long decrement(K key, long delta) |
DECRBY key decrement |
— |
| 批量设置 key-value | void multiSet(Map<K,V> map) |
MSET key value [key value ...] |
— |
| 批量获取 key 的值 | List<V> multiGet(Collection<K> keys) |
MGET key [key ...] |
不存在的 key 返回 null |
| 同时设置多个 key-value(仅当全部不存在) | Boolean multiSetIfAbsent(Map<K, V> map) |
MSETNX key value [key value ...] |
原子操作:要么全部成功,要么全部失败 |
| 追加字符串并返回新长度 | Integer append(K key, String value) |
APPEND key value |
— |
| 为key设置新值,同时保留原来的过期时间 | 没有对应的方法 |
SET key value KEEPTTL |
— |