Redis 命令及数据类型 -- String

摘要

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