>데이터 베이스 >Redis >Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

青灯夜游
青灯夜游앞으로
2022-01-29 08:00:382311검색

이 글은 Redis 데이터 유형의 문자열을 이해하고 문자열 데이터 유형의 저장 원리에 대해 이야기하는 데 도움이 되기를 바랍니다.

Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

Redis는 업무에서 자주 사용되는 미들웨어입니다. 풍부한 데이터 구조를 지원하고 매우 강력한 읽기 및 쓰기 성능을 가지며 tps는 100,000+에 도달할 수 있습니다.

오늘의 글은 가장 많이 사용되는 자료구조 중 하나인 String 타입을 분석하고 요약한 것입니다. 본 글은 redis5.0을 기준으로 분석되었습니다. [관련 권장사항: Redis 동영상 튜토리얼]

1. 기본 사용법

set key value [EX seconds] [PX milliseconds] [NX|XX]

1. set은 구문, key는 지정된 이름, value는 저장해야 하는 값입니다

2. 만료 초, PX 만료 시간을 밀리초 단위로 지정합니다

3. NX: 키가 없을 때만 설정이 성공합니다. 4. XX: 키가 있을 때만 설정이 성공합니다. 요약: 5.0에서는 다음과 같은 설정 명령을 지원합니다. 만료 시간 및 존재하지 않음을 지정합니다. 즉, 하나의 명령을 통해 분산 잠금 기능을 실현할 수 있습니다. 이전 버전에서는 키 설정과 만료 시간 설정을 두 개의 명령으로 나누어야 했습니다. 원자성을 보장하는 것이 더 어렵습니다.

2. 사용 시나리오

1. 핫스팟 데이터 캐시, 분산 세션2. Setnx 분산 잠금

3.Incr 전역 ID

5 , 현재 제한 증가分布式锁

3、incr 计数器

4、Incr 全局id

5、Incr 限流

6、bit 操作,位图功能,在线用户统计 0/1标记 

三、支持存储的数据类型

整型,字符型,float(单浮点型) 

四、不同的编码类型

Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

五、String存储原理

在Redis中,数据存储在一个RedisObject类中

typedef struct redisObject {    
//这个类型可以是string,也可以是hash,zset等等
unsigned type:4;    
unsigned encoding:4;    
//记录lru,lfu淘汰算法依赖的访问时间和访问频率    
unsigned lru:LRU_BITS; 
/* LRU time (relative to global lru_clock) or                            * LFU data (least significant 8 bits frequency                            * and most significant 16 bits access time). */
//引用计数器    
int refcount;    
//指向真实数据结构对象    
void *ptr;
} robj;

对于String,Redis自定义了一种简单动态字符串的数据结构来存储字符串数。

源码实现:多种数据结构,分别表示可以存储不同长度的字符串。

Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.

len:代表已经使用的长度

alloc:分配的总内存大小

flags:代表存储类型

buf[]:实际的数据

六、三种编码存储区别

1、embstr的RedisObject,SDS内存在一块,只要创建时分配一次内存,销毁时释放一次内存,查找方便

2、raw则RedisObject,SDS内存不在一块,需要创建时分配两次内存,销毁时释放两次内存

3、embstr的结构,决定了他需要增加长度时,RedisObject,SDS都需要重新分配内存。因此embstr编码的数据是不能修改的,只读的。 

七、int,embstr编码什么时候转换成raw

1、int类型的数据不再是int类型,转成raw

2、长度大于2^63-1转成embstr

3、embstr字符超过44字节,转成raw 

八、SDS数据结构的优点

1、二进制安全的 可以存储图片 整形,浮点型

2、String 的三种编码,充分利用内存,提高内存利用率

  • int 存储8个字节长整形 long ,2^63-1
  • Embstr embstr格式的SDS simple Dynamic String 内存空间是连续的,只读的,只要执行修改就会转成raw
  •  Raw,SDS,存储大于44个字节的字符串

3、不用担心内存溢出,sds具备自动扩容能力

4、获取字符串长度时间复杂度O(1),存储了len属性

5、通过空间预分配惰性空间释放防止多次分配内存

6、判断是否结束使用len属性,可以包含'

위 내용은 Redis 데이터 유형 학습: 문자열 원리에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제