Redis 튜토리얼(7): 주요 조작 명령에 대한 자세한 설명

黄舟
풀어 주다: 2016-12-28 14:55:15
원래의
1151명이 탐색했습니다.

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)를 참고해주세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿