String
该结构是最简单的Redis数据类型,该Value为String类型的字符串,如果redisTemplate存储可能会进行转码保存。
常用命令
- 存入字符串键值对
SET key value
- 批量存储字符串键值对
MSET key value [key value ...]
- 存入一个不存在的字符串键值对
SETNX key value
- 获取一个字符串键值
GET key
- 批量获取字符串键值
MGET key [key ...]
- 删除一个键
DEL key [key ...]
- 设置一个键的过期时间(秒)
EXPIRE key seconds
原子操作命令
-
将key中储存的数字值加1
INCR key
-
将key中储存的数字值减1
DECR key
-
将key所储存的值加上increment
INCRBY key increment
-
将key所储存的值减去decrement
DECRBY key decrement
底层数据结构
String类型在Redis存储类型是采用SDS,SDS是Redis存储字符串的对象
- 结构
-
String的 encoding 编码类型
- raw 原始编码 即SDS
- embstr 该编码类型是针对缓存行进行的优化,由于缓存行为64byte,而Redis占用了16byte+SDS(8)占用4byte
其中结束符占用1byte
所以该编码可用44byte存储string - int 会先设置为原始编码,然后判断长度是否大于20个字节(指针本身就占用了8个字节,尝试不进行创建内存,而直接使用指针地址)再进行尝试转换为整型值(20位的整型值就在8个字节以内),就可以使用指针来存储整型值,节省了内存空间与内存IO
-
SDS详细请跳转 Redis核心结构以及设计原理
应用场景
- 计数器
可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。
- 分布式ID生成(分布式系统全局序列号)
利用自增特性,一次请求一个大一点的步长如 incr 2000 ,缓存在本地使用,用完再请求。
- 单值缓存
使用set key value 与get key,进行单个值的缓存
- 对象缓存(不建议)
使用set user:1 value(json格式)等,用来进行对象数据的缓存
- mset user:1:name zhuge user:1:balance 1888 批量缓存
- mget user:1:name user:1:balance 批量获取对象缓存
- 分布式锁(入门理解)
- setnx product:10001 true 返回1代表获取锁成功
- setnx product:10001 true 返回0表示获取锁失败
- del product:10001 执行完业务释放锁
- SET product:10001 true ex 10 nx 通过添加超时防止死锁
- Web集群session共享 通过spirng session+redis实现session共享