Redis内存优化——String类型介绍及底层原理详解

文章目录

  • 前言
  • String
    • 概述
    • 应用场景
    • 底层原理
      • embstr结构
      • raw结构
      • embstr和raw的转换
  • 总结
  • 系列文章目录


前言

Redis 是一个开源的、基于内存的、支持多种数据结构的高性能键值数据库。其中,string 类型是 Redis 最基本的数据结构,也是最常用的数据结构。string 类型可以存储字符串、整数或者浮点数,可以用于实现缓存、计数器、分布式锁等功能。本文将介绍 Redis string 类型的基本用法和底层原理,帮助读者深入理解 Redis 的工作机制。


String

概述

string 是 Redis 最基本的数据类型,它可以存储任意类型的数据,比如文本、数字、图片或者序列化的对象。一个 string 类型的键最大可以存储 512 MB 的数据。

string 类型的底层实现是 SDS(simple dynamic string),它是一个动态字符串结构,由长度、空闲空间和字节数组三部分组成。SDS有3种编码类型:

  • embstr:占用64Bytes的空间,存储44Bytes的数据
  • raw:存储大于44Bytes的数据
  • int:存储整数类型

embstr和raw存储字符串数据,int存储整型数据

应用场景

string 类型的应用场景非常广泛,比如:

  • 缓存数据,提高访问速度和降低数据库压力。
  • 计数器,利用 incr 和 decr 命令实现原子性的加减操作。
  • 分布式锁,利用 setnx 命令实现互斥访问。
  • 限流,利用 expire 命令实现时间窗口内的访问控制。

底层原理

embstr结构

embstr 结构存储小于等于44个字节的字符串,embstr 每次开辟64个byte的空间

  • 前19个byte用于存储embstr 结构
  • 中间的44个byte存储数据
  • 最后为\0符号

在这里插入图片描述

raw结构

Redis内存优化——String类型介绍及底层原理详解_第1张图片

embstr和raw的转换

在存储字符串的时候,redis会根据数据的长度判断使用哪种结构

  • 如果长度小于等于44个字节,就会选择embstr 结构
  • 如果长度大于44个byte,就会选择raw结构

Redis内存优化——String类型介绍及底层原理详解_第2张图片

127.0.0.1:6379> object encoding str
"embstr"
# str赋值44个字节的字符串
127.0.0.1:6379> set str 1234567890123456789012345678901234567890abcd
OK
127.0.0.1:6379> object encoding str
"embstr"
# str2赋值45个字节的字符串
127.0.0.1:6379> set str2 1234567890123456789012345678901234567890abcde
OK
127.0.0.1:6379> object encoding str2
"raw"
127.0.0.1:6379> set num 123
OK
127.0.0.1:6379> object encoding num
"int"

总结

Redis string 类型是 Redis 最基本的数据结构,也是最常用的数据结构。string 类型可以存储字符串、整数或者浮点数,可以用于实现缓存、计数器、分布式锁等功能。Redis string 类型的底层实现是 SDS(simple dynamic string),存储小于等于44Bytes的数据使用的是embstr结构,大于44Bytes的数据使用的是raw结构。


系列文章目录

Redis内存优化——String类型介绍及底层原理详解
Redis内存优化——Hash类型介绍及底层原理详解
Redis内存优化——List类型介绍及底层原理详解
Redis内存优化——Set类型介绍及底层原理详解
Redis内存优化——ZSet类型介绍及底层原理详解
Redis内存优化——Stream类型介绍及底层原理详解
Redis内存优化——Hyperloglog、GEO、Bitmap、Bitfield类型详解
Redis的三种持久化策略及选取建议

你可能感兴趣的:(互联网技术架构,redis,数据库,缓存,分布式,云原生)