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


    String

    该结构是最简单的Redis数据类型,该Value为String类型的字符串,如果redisTemplate存储可能会进行转码保存。

    常用命令

    • 存入字符串键值对
      SET key value  
      
      • 1
    • 批量存储字符串键值对
      MSET key value [key value ...]  
      
      • 1
    • 存入一个不存在的字符串键值对
      SETNX key value  
      
      • 1
    • 获取一个字符串键值
      GET key  
      
      • 1
    • 批量获取字符串键值
      MGET key [key ...]   
      
      • 1
    • 删除一个键
      DEL key [key ...]  
      
      • 1
    • 设置一个键的过期时间(秒)
      EXPIRE key seconds  
      
      • 1

    原子操作命令

    • 将key中储存的数字值加1

      INCR key
      
      • 1
    • 将key中储存的数字值减1

      DECR key
      
      • 1
    • 将key所储存的值加上increment

      INCRBY key increment
      
      • 1
    • 将key所储存的值减去decrement

      DECRBY key decrement 
      
      • 1

    底层数据结构

    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共享
  • 相关阅读:
    [Java、Android面试]_05_内存泄漏和内存溢出
    Android修行手册 - ConstraintLayout全属性
    10个最流行的向量数据库【AI】
    ERMiner: Sequential Rule Mining Using Equivalence Classes
    电商API接口:数据分析,代购商城建站,erp系统商品数据选品,价格监控,品牌维权,商家搬货,店铺铺货
    java多线程之Lock锁原理以及案例实现电影院卖票
    看完这篇 教你玩转渗透测试靶机vulnhub——FunBox3(Easy)
    sql学习笔记(二)
    ElasticSearch学习(Part One,语法学习)
    Infrastructure 知识: dnf对module的处理
  • 原文地址:https://blog.csdn.net/at10090/article/details/126740516