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


前言

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结构

在这里插入图片描述

embstr和raw的转换

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

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

在这里插入图片描述

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的三种持久化策略及选取建议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr___Ray

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

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

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

打赏作者

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

抵扣说明:

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

余额充值