데이터 베이스 Redis Redis의 몇 가지 일반적인 기본 객체 소개

Redis의 몇 가지 일반적인 기본 객체 소개

Feb 18, 2021 am 09:29 AM
redis 물체

Redis의 몇 가지 일반적인 기본 객체 소개

1: 소개

Redis에는 string, hash, list, set, zset 등과 같이 일반적으로 사용되는 기본 개체가 몇 가지 있습니다. 기본 구현 데이터 구조와 일반적인 응용 프로그램 시나리오 및 특성을 소개하겠습니다.

두 가지: redisobject

소스 코드 위치는 server.h 파일의 605번째 줄부터 위치합니다

typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    unsigned lru:LRU_BITS;
    int refcount;
    void *ptr;
} robj;
로그인 후 복사

2.1 type

redis에서 실제 객체 유형은 0~4 선언의 5가지 유형으로 나뉩니다. 파일 server.h

#define OBJ_STRING 0    /* String object. */
#define OBJ_LIST 1      /* List object. */
#define OBJ_SET 2       /* Set object. */
#define OBJ_ZSET 3      /* Sorted set object. */
#define OBJ_HASH 4      /* Hash object. */
로그인 후 복사

2.2 인코딩

redis의 466번째 줄에 있습니다. 5개 객체 string, list, hash, set, zset에 사용되는 8가지 인코딩 형식이 있으며, 각 인코딩은 데이터 구조

#define OBJ_ENCODING_RAW 0    
#define OBJ_ENCODING_INT 1    
#define OBJ_ENCODING_HT 2      
#define OBJ_ENCODING_ZIPLIST 5 
#define OBJ_ENCODING_INTSET 6  
#define OBJ_ENCODING_SKIPLIST 7
#define OBJ_ENCODING_EMBSTR 8 
#define OBJ_ENCODING_QUICKLIST 9
로그인 후 복사

2.3 refcount

메모리에 해당합니다. Redis의 재활용은 상대적으로 간단한 참조 계산 방법을 사용합니다. 각 객체 참조에는 refcount + 1이 있습니다. 참조 횟수가 0으로 줄어들면 메모리가 재활용됩니다

Three: string

3.1 일반적인 시나리오

분산 잠금: 기본 분산 잠금을 구현하려면 문자열 명령 setnx user information을 사용하는 것입니다. 사용자 정보는 캐시용으로 여러 번 직렬화되어 Redis에 저장되지만 여기서는 해시를 고려할 수 있습니다. 사용자 데이터 정보 중 일부만 사용하면 결국 직렬화, 역직렬화에도 비용이 발생합니다

3.2 인코딩 형식

int: 문자열이 모두 숫자인 경우 int 인코딩이 사용됩니다. 이것이 실제 바이너리 데이터 저장소입니다. embstr: 메모리 주소가 연속적이고 메모리가 한 번 요청됩니다. 문자열 길이는 44raw 미만입니다. 맨 아래 레이어는 sds로 구현됩니다. embstr과 비교하면 sds 생성과 redisobject 생성이 두 번 구현된다는 점이 다릅니다.

3.3 공통 명령

# 存储
set key value

# 互斥存储
# 已存在的key再次存入数据不会更改缓存
setnx key value

# 过期存储,单位秒
# 设定key过期时间,到期自动删除
setex key seconds value

# 过期存储,单位毫秒
psetex key milliseconds value

# 批量存储
mset key value [key value ...]

# 取值
get key

# 批量取值
mget key [key ...]

# 追加
append key value

# 长度
strlen key

# 自增,只能是int编码的字符串
incr key

# 自定义步长自增
incrby key increment

# 自减,只能是int编码的字符串
# 这个可以减到负数,秒杀扣减库存啥的想想能不能用这个命令
decr key

# 自定义步长自减
decrby key increment
로그인 후 복사

4: list

4.1 일반적인 시나리오

메시지 대기열: 일반적으로 사용하지 않음 결국 다양한 MQ와 Kafka는 이미 매우 성숙해졌습니다. 또한 Redis에 의해 구현된 메시지 큐는 데이터 순위 계산의 보안을 보장하지 않습니다. 이는 정기적인 계산 및 업데이트에만 적합하며 실시간 순위 업데이트에는 사용할 수 없습니다. 예를 들어 Meituan은 매일 해당 지역의 판매자 순위에 대한 좋아요 목록을 계산합니다. 예를 들어 WeChat의 좋아요(어떻게 해야할지 모르겠습니다)

4.2 코딩 형식

quicklist: 빠른 목록 , 이전 버전에서는 linkedlist와 ziplist를 사용했습니다. 현재 사용되는 퀵리스트는 두 가지를 조합한 것입니다. 자세한 내용은 Redis(1) - Redis의 데이터 구조에 대한 간략한 설명

4.3 관련 매개변수 구성

구성 매개변수 위치는 1083 및 1099행에 있습니다. redis.con 파일

list-max-ziplist-size: 단일 ziplist 크기 구성 list-compress-length: LZF 압축 알고리즘 시작 노드 구성

4.4 일반 명령

# 创建list并压入节点
# 压入节点位于链表头
lpush key value

# 压入节点位于链表尾
rpush key value

# 弹出list头节点
lpop key

# 弹出list尾节点
rpop key

# 删除节点
# count > 0 从左开始搜索删除count数量的value
# count < 0 从右开始搜索删除|count|数量的value
# count = 0 删除list中所有value
lrem key count value

# 范围保留
# -1 表示列表最后一个元素
# -2 表示倒数第二个,以此类推
ltrim key start stop

# 计算长度
llen key

# 索引查询节点
# index < 0 从右开始搜索
# index > 0 从左开始搜索
lindex key index

# 范围查询
# stop = -1 表示所有
lrange key start stop

# 阻塞弹出
# 队列中没有节点时会一直等待
# 多个key时表示挨着顺序依次检查,知道找到非空列表为止
# timeout可以设置等待时间,0表示一直等待
blpop key [key...] timeout
brpop key [key...] timeout
로그인 후 복사

5: 해시

5.1 일반 시나리오

제품 개체, 사용자 개체. 이 시나리오는 검증을 통해 처리해야 합니다. 매번 제품 객체와 사용자 객체 정보 전체가 필요한 경우 문자열을 저장하는 것이 좋습니다. 그러나 정보의 일부만 사용되는 경우 해시 구조 SKU를 사용하는 것을 고려할 수 있습니다. 기타 정보 이 시나리오에서는 해시가 더 적합합니다. 해시 구조는 특정 제품의 모든 SKU를 저장합니다

5.2 인코딩 형식

ziplist: ziplist를 사용하여 해시 구조를 저장하는 경우 데이터는 두 개의 인접한 ziplistEntry를 사용하여 필드와 값을 저장합니다. 기본 구조는 저장을 위해 ziplist에서 dict로 변환됩니다

5.3 관련 매개변수 구성

hash-max-ziplist-entries: 기본값은 512입니다. 즉, ziplist 노드는 1024입니다. 노드 수가 제한을 초과하면 기본 데이터 구조가 dicthash-max-ziplist-value: 기본값 64로 변환됩니다. 길이가 제한을 초과하는 값이 해시에 삽입되면 기본 데이터 구조가 dict

로 변환됩니다.

(동영상 공유 학습: redis 동영상 튜토리얼)

5.4 일반 명령

# 存储
hset key field value 

# 不允许更改存储
# 若field值存在则本次存储不会覆盖原有value值
hsetnx key field value

# 批量存储
hmset key field value [field value ...]

# 查询
hget key field

# 批量查询
hmget key field [field ...]

# 全量查询
hgetall key 

# 全量查询field值
hkeys key

# 全量查询value值
hvals key

# 删除field
hdel key field [field ...]

# 计算键值对数量
hlen key
# field存在判断
hexists key field

# 增量式迭代
# cursor表示迭代开始的游标
# count 表示迭代返回数据数量
# pattern 表示正则匹配结果限制
hscan key cursor [Count count] [Match pattern]
로그인 후 복사

Six: Set

6.1 일반 시나리오

권장 사항: sinter 명령을 통해 교차점을 계산합니다. 예를 들어 Meituan이 근처 테이크아웃을 추천하면 테이크아웃 기록 및 근처 교차로 푸시를 계산하는 판매자를 위한 보안 팁을 사용할 수 있습니다. WeChat 그룹 구성원은 세트에 저장되고 사용자 친구도 세트에 저장됩니다. 사용자가 그룹 채팅에 참여할 때 친구가 아닌 사용자에게 안전에 주의하도록 상기시킬 수 있습니다

6.2 인코딩 형식

intset: 정수 컬렉션, 집합 컬렉션의 모든 값이 정수인 데이터를 저장하는 데 사용됨 해시 테이블: 필드 설정된 값을 저장하는 데 사용됩니다

6.3 관련 매개변수 구성

set-max-inset-entries: 기본값은 512입니다. 즉, 요소 ​​수가 제한을 초과하면 해시테이블 인코딩으로 변환됩니다

6.4 공통 명령

# 存储
sadd member [member ...]

# 弹出元素并返回
spop key count

# 查询所有元素
smembers key [count]

# 计算元素数量
scard key 

# 删除指定元素
srem key member [member ...]

# 判断元素存在
sismember key member

# 计算给定集合与后续集合差集
# 返回计算结果
sdiff key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sdiffstore destination key [key ...]

# 计算给定集合与后续集合交集
# 返回计算结果
sinter key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sinterstore destination key [key ...]

# 计算给定集合与后续集合差集
# 返回计算结果
sunion key [key ...]

# 计算给定集合与后续集合差集
# 存储结果到destination并返回
sunionstore destination key [key ...]
로그인 후 복사

Seven: Zset

7.1 일반적인 시나리오

Ranking: Meituan 판매 순위 목록을 만들려면 상점의 주문을 사용하여 점수를 만들 수 있습니다. 이 쿼리의 결과는 정렬된 가중치 대기열입니다. 점수는 다음과 같이 사용됩니다. 빼낸 데이터의 가중치가 모두 지연된 작업이 되도록 최대 우선순위로 실행: 점수 작업 시작 실행 시간으로 값을 판단하고 값을 가져올 때 실행하면 됩니다.

7.2 인코딩 형식

ziplist: 유사 해시하려면 두 개의 인접한 노드를 사용하여 점수와 멤버를 저장합니다skiplist: 목록 구조를 건너뛰면 볼 수 있습니다. Redis(1) -- Redis의 데이터 구조에 대한 간략한 설명

7.3 관련 매개변수 구성

zset-max-ziplist -entries: 기본값은 128이고, 지정된 ziplist 저장 요소의 최대 수는 128입니다. 초과하는 경우 Skiplistzset-max-ziplist-value로 변환됩니다. 기본값은 64이며, 최대 저장 데이터 값은 64바이트입니다. 초과하는 경우 Skiplist

7.4 일반 명령

# 存储
# xx 表示当zset中存在本次插入的member时才存储
# nx 表示当zset中不存在本次插入的member时才存储
zadd key [nx|xx] score member [score member ...]

# 查询排序指定[start,stop]范围内元素
# withscores 查询结果顺带返回元素分数
zrange key start stop [withscores]

# 查询指定元素分数
zscore key member

# 元素数量统计
zcard key

# 返回score位于[min,max]区间的元素数量
zcount key min max 

# 对指定元素分数增加incrment值
zincrby key incrment member

# 返回指定分数区间范围内元素
# withscores 返回时携带分数一起返回
# limit offset count表示跳过offset数量结果再返回count数量结果
zrangebyscore key min max [withscores] [limit offset count]

# 倒序返回指定分数区间范围内元素
# withscores 返回时携带分数一起返回
# limit offset count表示跳过offset数量结果再返回count数量结果
zrevrangebyscore key max min [withrescores] [limit offset count]

# 删除指定分数范围[min,max]内元素
zremrangebyscore key min max

# 移除指定元素
zrem key member
로그인 후 복사
으로 변환됩니다.

관련 권장 사항: redis 데이터베이스 튜토리얼

위 내용은 Redis의 몇 가지 일반적인 기본 객체 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Redis 클러스터 모드를 구축하는 방법 Redis 클러스터 모드를 구축하는 방법 Apr 10, 2025 pm 10:15 PM

Redis Cluster Mode는 Sharding을 통해 Redis 인스턴스를 여러 서버에 배포하여 확장 성 및 가용성을 향상시킵니다. 시공 단계는 다음과 같습니다. 포트가 다른 홀수 redis 인스턴스를 만듭니다. 3 개의 센티넬 인스턴스를 만들고, Redis 인스턴스 및 장애 조치를 모니터링합니다. Sentinel 구성 파일 구성, Redis 인스턴스 정보 및 장애 조치 설정 모니터링 추가; Redis 인스턴스 구성 파일 구성, 클러스터 모드 활성화 및 클러스터 정보 파일 경로를 지정합니다. 각 redis 인스턴스의 정보를 포함하는 Nodes.conf 파일을 작성합니다. 클러스터를 시작하고 Create 명령을 실행하여 클러스터를 작성하고 복제본 수를 지정하십시오. 클러스터에 로그인하여 클러스터 정보 명령을 실행하여 클러스터 상태를 확인하십시오. 만들다

Redis 데이터를 지우는 방법 Redis 데이터를 지우는 방법 Apr 10, 2025 pm 10:06 PM

Redis 데이터를 지우는 방법 : Flushall 명령을 사용하여 모든 키 값을 지우십시오. FlushDB 명령을 사용하여 현재 선택한 데이터베이스의 키 값을 지우십시오. 선택을 사용하여 데이터베이스를 전환 한 다음 FlushDB를 사용하여 여러 데이터베이스를 지우십시오. del 명령을 사용하여 특정 키를 삭제하십시오. Redis-Cli 도구를 사용하여 데이터를 지우십시오.

Redis 대기열을 읽는 방법 Redis 대기열을 읽는 방법 Apr 10, 2025 pm 10:12 PM

Redis의 대기열을 읽으려면 대기열 이름을 얻고 LPOP 명령을 사용하여 요소를 읽고 빈 큐를 처리해야합니다. 특정 단계는 다음과 같습니다. 대기열 이름 가져 오기 : "큐 :"와 같은 "대기열 : my-queue"의 접두사로 이름을 지정하십시오. LPOP 명령을 사용하십시오. 빈 대기열 처리 : 대기열이 비어 있으면 LPOP이 NIL을 반환하고 요소를 읽기 전에 대기열이 존재하는지 확인할 수 있습니다.

Redis 명령을 사용하는 방법 Redis 명령을 사용하는 방법 Apr 10, 2025 pm 08:45 PM

Redis 지시 사항을 사용하려면 다음 단계가 필요합니다. Redis 클라이언트를 엽니 다. 명령 (동사 키 값)을 입력하십시오. 필요한 매개 변수를 제공합니다 (명령어마다 다름). 명령을 실행하려면 Enter를 누르십시오. Redis는 작업 결과를 나타내는 응답을 반환합니다 (일반적으로 OK 또는 -err).

Redis Lock을 사용하는 방법 Redis Lock을 사용하는 방법 Apr 10, 2025 pm 08:39 PM

Redis를 사용하여 잠금 작업을 사용하려면 SetNX 명령을 통해 잠금을 얻은 다음 만료 명령을 사용하여 만료 시간을 설정해야합니다. 특정 단계는 다음과 같습니다. (1) SETNX 명령을 사용하여 키 값 쌍을 설정하십시오. (2) 만료 명령을 사용하여 잠금의 만료 시간을 설정하십시오. (3) DEL 명령을 사용하여 잠금이 더 이상 필요하지 않은 경우 잠금을 삭제하십시오.

Centos redis에서 lua 스크립트 실행 시간을 구성하는 방법 Centos redis에서 lua 스크립트 실행 시간을 구성하는 방법 Apr 14, 2025 pm 02:12 PM

CentOS 시스템에서는 Redis 구성 파일을 수정하거나 Redis 명령을 사용하여 악의적 인 스크립트가 너무 많은 리소스를 소비하지 못하게하여 LUA 스크립트의 실행 시간을 제한 할 수 있습니다. 방법 1 : Redis 구성 파일을 수정하고 Redis 구성 파일을 찾으십시오. Redis 구성 파일은 일반적으로 /etc/redis/redis.conf에 있습니다. 구성 파일 편집 : 텍스트 편집기 (예 : VI 또는 Nano)를 사용하여 구성 파일을 엽니 다. Sudovi/etc/redis/redis.conf LUA 스크립트 실행 시간 제한을 설정 : 구성 파일에서 다음 줄을 추가 또는 수정하여 LUA 스크립트의 최대 실행 시간을 설정하십시오 (Unit : Milliseconds).

Redis 명령 줄을 사용하는 방법 Redis 명령 줄을 사용하는 방법 Apr 10, 2025 pm 10:18 PM

Redis Command Line 도구 (Redis-Cli)를 사용하여 다음 단계를 통해 Redis를 관리하고 작동하십시오. 서버에 연결하고 주소와 포트를 지정하십시오. 명령 이름과 매개 변수를 사용하여 서버에 명령을 보냅니다. 도움말 명령을 사용하여 특정 명령에 대한 도움말 정보를 봅니다. 종금 명령을 사용하여 명령 줄 도구를 종료하십시오.

Debian Readdir의 성능을 최적화하는 방법 Debian Readdir의 성능을 최적화하는 방법 Apr 13, 2025 am 08:48 AM

Debian Systems에서 ReadDir 시스템 호출은 디렉토리 내용을 읽는 데 사용됩니다. 성능이 좋지 않은 경우 다음과 같은 최적화 전략을 시도해보십시오. 디렉토리 파일 수를 단순화하십시오. 대규모 디렉토리를 가능한 한 여러 소규모 디렉토리로 나누어 읽기마다 처리 된 항목 수를 줄입니다. 디렉토리 컨텐츠 캐싱 활성화 : 캐시 메커니즘을 구축하고 정기적으로 캐시를 업데이트하거나 디렉토리 컨텐츠가 변경 될 때 캐시를 업데이트하며 readDir로 자주 호출을 줄입니다. 메모리 캐시 (예 : Memcached 또는 Redis) 또는 로컬 캐시 (예 : 파일 또는 데이터베이스)를 고려할 수 있습니다. 효율적인 데이터 구조 채택 : 디렉토리 트래버스를 직접 구현하는 경우 디렉토리 정보를 저장하고 액세스하기 위해보다 효율적인 데이터 구조 (예 : 선형 검색 대신 해시 테이블)를 선택하십시오.

See all articles