《程序猿之Redis缓存实战 · 字符串类型》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍
文章目录
- 字符串(String)
字符串(String)
String 是 Redis 中最简单同时也是最常用的一个数据结构。它是一种二进制安全的数据结构,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片、序列化后的对象。
- String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
- String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
- String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M。
【应用场景】
1、需要存储常规数据的场景
● 举例 :缓存 session、token、图片地址、序列化后的对象(相比较于 Hash 存储更节省内存)。
● 相关命令 : SET、GET。
2、需要计数的场景
● 举例 :用户单位时间的请求数(简单限流可以用到)、页面单位时间的访问数。
● 相关命令 :SET、GET、INCR、DECR 。
3、分布式锁
● 利用 SETNX key value 命令可以实现一个最简易的分布式锁
Tips:存在一些缺陷,通常不建议这样实现分布式锁。
【Value 存储对象】
如果value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储。
【常用指令】
SET key value:设置指定的key值
GET key:获取指定key的值
EXISTS key:判断指定 key 是否存在
DEL key:删除指定的 key
MSET key value [ key value … ]:同时设置一个或者多个键值对
MGET key1 [ key2 ]:获取所有(一个或多个)给定key的值
INCR key:将 key 中储存的数字值增一
DECR key:将 key 中储存的数字值减一
EXPIRE key seconds:给指定 key 设置过期时间
SETNX key seconds value:设置值并设置过期时间
TTL key:查看剩余过期时间
【数据结构】
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。