Redis核心数据结构【String】【从入门到入坟】

Redis中的String是最基本的数据类型,用于存储字符串,支持自增自减操作。String采用SDS作为底层结构,有raw和embstr两种编码方式,优化内存使用。常见应用场景包括计数器、分布式ID生成、单值缓存和分布式锁。此外,String在分布式锁实现中配合setnx和del命令可实现简单锁机制。
摘要由CSDN通过智能技术生成

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编码
string编码
string编码
RedisDB
dict
dictht
dictEntry
*key
*val
sds-key值存储
redisObject
*ptr-数据存储指针
sds-value存储
type-数据类型
string类型
encoding-底层编码
embstr
int-整型
raw-即SDS类型
  • 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共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿嘿嘿1212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值