Redis 튜토리얼(7): 주요 조작 명령에 대한 자세한 설명
1. 개요:
이 시리즈의 처음 몇 블로그에서는 String, List, Set, Hashes 및 Sorted-Set와 같은 Redis 데이터 유형과 관련된 명령에 대해 주로 설명했습니다. 이러한 명령에는 모두 한 가지 공통점이 있습니다. 즉, 모든 작업은 키와 관련된 값에 대해 수행된다는 것입니다. 이 블로그에서는 키 관련 Redis 명령에 중점을 둘 것입니다. 이러한 명령을 학습하는 것은 Redis를 학습하는 데 있어 매우 중요한 기초이자 Redis의 잠재력을 최대한 활용할 수 있는 강력한 도구이기도 합니다.
이 블로그에서는 항상 그렇듯이 현재 학습과 향후 참조를 용이하게 하기 위해 모든 관련 명령의 자세한 목록과 일반적인 예를 제공합니다.
2. 관련 명령어 목록:
명령 프로토타입 | 시간 복잡도 | 명령 설명 | 반환 값 |
KEYS 패턴 | O(N) | 시간 복잡도의 N은 데이터베이스의 키 수를 나타냅니다. 패턴 매개변수와 일치하는 모든 키를 가져옵니다. 대규모 데이터베이스의 경우 이 명령은 시간이 많이 걸리고 Redis 서버의 성능에 상대적으로 큰 영향을 미치기 때문에 일반적인 작업에서는 이 명령을 호출하지 않도록 해야 합니다. 패턴은 하나 이상의 문자를 나타내는 *, 임의의 문자를 나타내는 ?, 패턴과 일치하는 대괄호 | 키 목록 안의 문자를 나타내는 [abc]와 같은 glob 스타일 와일드카드 형식을 지원합니다. |
DEL 키 [키 ...] | O(N) | 시간 복잡도의 N은 삭제된 키의 개수를 나타냅니다. 데이터베이스에서 매개변수에 지정된 키를 삭제합니다. 지정된 키가 없으면 무시됩니다. 또한 지정된 Key와 연관된 데이터 유형이 String 유형이 아니라 List, Set, Hashes 및 Sorted Set와 같은 컨테이너 유형인 경우 각 키를 삭제하는 이 명령의 시간 복잡도는 O라는 점도 지적해야 합니다. (M), 여기서 M은 컨테이너의 요소 수를 나타냅니다. 문자열 유형 키의 경우 시간 복잡도는 O(1)입니다. | 삭제된 키의 실제 개수입니다. |
EXISTS 키 | O(1) | 지정된 키가 존재하는지 확인합니다. | 1은 존재함, 0은 존재하지 않음을 의미합니다. |
MOVE key db | O(1) | 현재 데이터베이스에 지정된 키 Key를 파라미터에 지정된 데이터베이스로 이동합니다. 키가 대상 데이터베이스에 이미 존재하거나 현재 데이터베이스에 존재하지 않는 경우 이 명령은 아무 작업도 수행하지 않고 0을 반환합니다. | 이동이 성공하면 1을 반환하고 그렇지 않으면 0을 반환합니다. |
RENAME key newkey | O(1) | 매개변수에 있는 두 키의 명령이 동일한 경우, 또는 소스 키가 존재하지 않는 경우 이 명령은 관련 오류 정보를 반환합니다. newKey가 이미 존재하는 경우 직접 덮어씁니다. | |
RENAMENX key newkey | O(1) | 새 값이 없으면 매개변수의 원래 값을 새 값으로 수정합니다. . 다른 조건은 RENAME과 일치합니다. | 1은 수정이 성공했음을 의미하고 그렇지 않으면 0을 의미합니다. |
PERSIST 키 | O(1) | 키에 만료 시간이 있는 경우 이 명령은 만료 시간을 제거하여 키가 더 이상 시간 초과가 발생하지 않지만 영구 저장이 가능합니다. | 1은 키의 만료 시간이 제거되었음을 의미하고, 0은 키가 존재하지 않거나 만료 시간이 없음을 의미합니다. |
EXPIRE 키 초 | O(1) | 이 명령은 매개변수에 지정된 키에 대한 시간 초과(초)를 설정합니다. 이 시간이 초과되면 키가 자동으로 삭제됩니다. 시간 초과가 발생하기 전에 키를 수정하면 키와 관련된 시간 초과가 제거됩니다. | 1은 시간 초과가 설정되었음을 의미하고, 0은 키가 존재하지 않거나 설정할 수 없음을 의미합니다. |
EXPIREAT 키 타임스탬프 | O(1) | 이 명령의 논리 기능은 EXPIRE와 정확히 동일하며 유일한 차이점은 시간 초과입니다. 이 명령으로 지정되는 시간은 상대 시간이 아닌 절대 시간입니다. time 매개변수는 1970년 1월 1일 이후 경과된 초 수를 나타내는 Unix 타임스탬프 형식입니다. | 1은 시간 초과가 설정되었음을 의미하고, 0은 키가 존재하지 않거나 설정할 수 없음을 의미합니다. |
TTL 키 | O(1) | 키의 남은 시간 초과 설명을 가져옵니다. | 나머지 설명을 반환하거나, 키가 존재하지 않거나 시간 제한이 설정되지 않은 경우 -1을 반환합니다. |
RANDOMKEY | O(1) | 현재 열려 있는 데이터베이스에서 임의의 키를 반환합니다. | 임의의 키가 반환되거나, 데이터베이스가 비어 있으면 nil입니다. |
TYPE 키 | O(1) | 매개변수에 지정된 키와 관련된 값 유형을 가져옵니다. 이 명령은 해당 값을 반환합니다. 문자열 형식 . | 반환되는 문자열은 string, list, set, hash 및 zset입니다. 키가 없으면 없음을 반환합니다. |
SORT 키 [BY 패턴] [LIMIT 오프셋 count] [GET 패턴 [GET 패턴 ...]] [ASC|DESC] [ALPHA] [STORE 대상] | O(N+M*log(M)) | 이 명령 상대적으로 복잡하다고 알려져 있으므로 여기서는 가장 기본적인 사용법만 설명합니다. 관심 있는 네티즌은 redis의 공식 문서를 참조할 수 있습니다. | 원래 정렬된 목록을 반환합니다. |
3. 명령 예:
1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
#在Shell命令行下启动Redis客户端工具。 /> redis-cli #清空当前选择的数据库,以便于对后面示例的理解。 redis 127.0.0.1:6379> flushdb OK #添加String类型的模拟数据。 redis 127.0.0.1:6379> set mykey 2 OK redis 127.0.0.1:6379> set mykey2 "hello" OK #添加Set类型的模拟数据。 redis 127.0.0.1:6379> sadd mysetkey 1 2 3 (integer) 3 #添加Hash类型的模拟数据。 redis 127.0.0.1:6379> hset mmtest username "stephen" (integer) 1 #根据参数中的模式,获取当前数据库中符合该模式的所有key,从输出可以看出,该命令在执行时并不区分与Key关联的Value类型。 redis 127.0.0.1:6379> keys my* 1) "mysetkey" 2) "mykey" 3) "mykey2" #删除了两个Keys。 redis 127.0.0.1:6379> del mykey mykey2 (integer) 2 #查看一下刚刚删除的Key是否还存在,从返回结果看,mykey确实已经删除了。 redis 127.0.0.1:6379> exists mykey (integer) 0 #查看一下没有删除的Key,以和上面的命令结果进行比较。 redis 127.0.0.1:6379> exists mysetkey (integer) 1 #将当前数据库中的mysetkey键移入到ID为1的数据库中,从结果可以看出已经移动成功。 redis 127.0.0.1:6379> move mysetkey 1 (integer) 1 #打开ID为1的数据库。 redis 127.0.0.1:6379> select 1 OK #查看一下刚刚移动过来的Key是否存在,从返回结果看已经存在了。 redis 127.0.0.1:6379[1]> exists mysetkey (integer) 1 #在重新打开ID为0的缺省数据库。 redis 127.0.0.1:6379[1]> select 0 OK #查看一下刚刚移走的Key是否已经不存在,从返回结果看已经移走。 redis 127.0.0.1:6379> exists mysetkey (integer) 0 #准备新的测试数据。 redis 127.0.0.1:6379> set mykey "hello" OK #将mykey改名为mykey1 redis 127.0.0.1:6379> rename mykey mykey1 OK #由于mykey已经被重新命名,再次获取将返回nil。 redis 127.0.0.1:6379> get mykey (nil) #通过新的键名获取。 redis 127.0.0.1:6379> get mykey1 "hello" #由于mykey已经不存在了,所以返回错误信息。 redis 127.0.0.1:6379> rename mykey mykey1 (error) ERR no such key #为renamenx准备测试key redis 127.0.0.1:6379> set oldkey "hello" OK redis 127.0.0.1:6379> set newkey "world" OK #由于newkey已经存在,因此该命令未能成功执行。 redis 127.0.0.1:6379> renamenx oldkey newkey (integer) 0 #查看newkey的值,发现它也没有被renamenx覆盖。 redis 127.0.0.1:6379> get newkey "world"
2 . PERSIST/EXPIRE/EXPIREAT/TTL:
#为后面的示例准备的测试数据。 redis 127.0.0.1:6379> set mykey "hello" OK #将该键的超时设置为100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 #通过ttl命令查看一下还剩下多少秒。 redis 127.0.0.1:6379> ttl mykey (integer) 97 #立刻执行persist命令,该存在超时的键变成持久化的键,即将该Key的超时去掉。 redis 127.0.0.1:6379> persist mykey (integer) 1 #ttl的返回值告诉我们,该键已经没有超时了。 redis 127.0.0.1:6379> ttl mykey (integer) -1 #为后面的expire命令准备数据。 redis 127.0.0.1:6379> del mykey (integer) 1 redis 127.0.0.1:6379> set mykey "hello" OK #设置该键的超时被100秒。 redis 127.0.0.1:6379> expire mykey 100 (integer) 1 #用ttl命令看一下当前还剩下多少秒,从结果中可以看出还剩下96秒。 redis 127.0.0.1:6379> ttl mykey (integer) 96 #重新更新该键的超时时间为20秒,从返回值可以看出该命令执行成功。 redis 127.0.0.1:6379> expire mykey 20 (integer) 1 #再用ttl确认一下,从结果中可以看出果然被更新了。 redis 127.0.0.1:6379> ttl mykey (integer) 17 #立刻更新该键的值,以使其超时无效。 redis 127.0.0.1:6379> set mykey "world" OK #从ttl的结果可以看出,在上一条修改该键的命令执行后,该键的超时也无效了。 redis 127.0.0.1:6379> ttl mykey (integer) -1
3. TYPE/RANDOMKEY/SORT:
#由于mm键在数据库中不存在,因此该命令返回none。 redis 127.0.0.1:6379> type mm none #mykey的值是字符串类型,因此返回string。 redis 127.0.0.1:6379> type mykey string #准备一个值是set类型的键。 redis 127.0.0.1:6379> sadd mysetkey 1 2 (integer) 2 #mysetkey的键是set,因此返回字符串set。 redis 127.0.0.1:6379> type mysetkey set #返回数据库中的任意键。 redis 127.0.0.1:6379> randomkey "oldkey" #清空当前打开的数据库。 redis 127.0.0.1:6379> flushdb OK #由于没有数据了,因此返回nil。 redis 127.0.0.1:6379> randomkey (nil)
위는 Redis 튜토리얼입니다(7): 자세한 설명 주요 조작 명령어 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

Redis 소스 코드를 이해하는 가장 좋은 방법은 단계별로 이동하는 것입니다. Redis의 기본 사항에 익숙해집니다. 특정 모듈을 선택하거나 시작점으로 기능합니다. 모듈 또는 함수의 진입 점으로 시작하여 코드를 한 줄씩 봅니다. 함수 호출 체인을 통해 코드를 봅니다. Redis가 사용하는 기본 데이터 구조에 익숙해 지십시오. Redis가 사용하는 알고리즘을 식별하십시오.

Redis는 단일 스레드 아키텍처를 사용하여 고성능, 단순성 및 일관성을 제공합니다. 동시성을 향상시키기 위해 I/O 멀티플렉싱, 이벤트 루프, 비 블로킹 I/O 및 공유 메모리를 사용하지만 동시성 제한 제한, 단일 고장 지점 및 쓰기 집약적 인 워크로드에 부적합한 제한이 있습니다.

Redis에서 모든 키를 보려면 세 가지 방법이 있습니다. 키 명령을 사용하여 지정된 패턴과 일치하는 모든 키를 반환하십시오. 스캔 명령을 사용하여 키를 반복하고 키 세트를 반환하십시오. 정보 명령을 사용하여 총 키 수를 얻으십시오.

Redis는 해시 테이블을 사용하여 데이터를 저장하고 문자열, 목록, 해시 테이블, 컬렉션 및 주문한 컬렉션과 같은 데이터 구조를 지원합니다. Redis는 Snapshots (RDB)를 통해 데이터를 유지하고 WRITE 전용 (AOF) 메커니즘을 추가합니다. Redis는 마스터 슬레이브 복제를 사용하여 데이터 가용성을 향상시킵니다. Redis는 단일 스레드 이벤트 루프를 사용하여 연결 및 명령을 처리하여 데이터 원자력과 일관성을 보장합니다. Redis는 키의 만료 시간을 설정하고 게으른 삭제 메커니즘을 사용하여 만료 키를 삭제합니다.

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