>  기사  >  백엔드 개발  >  Redis 튜토리얼(2): 문자열 데이터 유형

Redis 튜토리얼(2): 문자열 데이터 유형

黄舟
黄舟원래의
2016-12-28 14:18:361131검색

1. 개요:

문자열 유형은 Redis에서 가장 기본적인 데이터 저장 유형입니다. 이는 이 유형이 JPEG와 같은 모든 형식의 데이터를 허용할 수 있음을 의미합니다. 데이터 또는 Json 객체 설명 정보 등 Redis에서 문자열 유형 Value가 보유할 수 있는 최대 데이터 길이는 512M입니다.

2. 관련 명령어 목록:

명령 프로토타입 시간 복잡도 명령 설명 반환 값
APPENDkeyvalue O(1) 키가 이미 존재하는 경우 APPEND 명령은 매개변수 값의 데이터를 기존 값 끝에 추가합니다. 키가 존재하지 않는 경우 APPEND 명령은 새 키/값을 생성합니다 추가된 값의 길이
DECRkey O( 1 ) 은 지정된 키의 값을 1씩 원자적으로 감소시킵니다. Key가 존재하지 않는 경우 초기 값은 0이고 decr 이후의 값은 -1입니다. Value 값을 Hello와 같이 정수 값으로 변환할 수 없는 경우 작업이 실패하고 해당 오류 메시지가 반환됩니다. 참고: 이 연산의 값 범위는 64비트 부호 있는 정수입니다. 감소 후의 값입니다.
INCRkey O(1) 는 지정된 키의 값을 원자적으로 1씩 증가시킵니다. 키가 존재하지 않는 경우 초기 값은 0이고 증가 후 값은 1입니다. Value 값을 Hello와 같이 정수 값으로 변환할 수 없는 경우 작업이 실패하고 해당 오류 메시지가 반환됩니다. 참고: 이 연산의 값 범위는 64비트 부호 있는 정수 의 증가된 값 값입니다.
DECRBY키 감소 O(1) 지정된 키의 값은 감소만큼 원자적으로 감소됩니다. Key가 존재하지 않는 경우 초기값은 0이고, Decrby 이후 값은 -decrement입니다. Value 값을 Hello와 같이 정수 값으로 변환할 수 없는 경우 작업이 실패하고 해당 오류 메시지가 반환됩니다. 참고: 이 연산의 값 범위는 64비트 부호 있는 정수입니다. 값 감소
INCRBY키 증분 O(1) 지정된 키 증분 값의 원자성을 높입니다. Key가 존재하지 않는 경우 초기값은 0이고 incrby 이후의 값은 증가합니다. Value 값을 Hello와 같이 정수 값으로 변환할 수 없는 경우 작업이 실패하고 해당 오류 메시지가 반환됩니다. 참고: 이 연산의 값 범위는 64비트 부호 있는 정수입니다. 값 증가
GETkey O(1) 지정된 키의 값을 가져옵니다. 키와 연결된 값이 문자열 유형이 아닌 경우 GET 명령은 문자열 값을 얻는 데만 사용할 수 있으므로 Redis는 오류 메시지를 반환합니다. Key에 관련된 값. Key가 없으면 nil을 반환
SETkey 값 O(1) 지정된 문자열 값을 보유하도록 키를 설정합니다. 키가 이미 존재하는 경우 원래 값을 덮어씁니다. 항상 "OK"를 반환합니다.
GETSETkey 값 O(1) 키를 지정된 값으로 원자적으로 설정하고 키의 원래 값을 반환합니다. GET 명령과 마찬가지로 이 명령은 문자열 값만 처리할 수 있습니다. 그렇지 않으면 Redis가 관련 오류 정보를 제공합니다. 키의 원래 값을 반환합니다. 키가 이전에 존재하지 않으면 nil이 반환됩니다.
STRLENkey O(1) 값이 문자열 유형이 아닌 경우 Redis는 실패합니다. 관련 오류 메시지를 실행하고 제공합니다. 지정된 키의 값 문자 길이를 반환합니다. 키가 존재하지 않으면 0을 반환합니다.
SETEXkey 초 값 O(1) 두 가지 작업을 원자적으로 완료합니다. 하나는 키 값을 지정된 문자열로 설정하는 동시에 Redis 서버에서 키의 생존 시간(초)을 설정하는 것입니다. 이 명령어는 주로 Redis를 Cache 서버로 사용할 때 사용됩니다.
SETNXkey 값 O(1) 지정된 키가 존재하지 않는 경우 지정된 문자열 값을 보유하도록 키를 설정합니다. 효과는 SET 명령과 동일합니다. 반대로 키가 이미 존재하는 경우 명령은 아무 작업도 수행하지 않고 반환됩니다. 1은 설정이 성공했음을 의미하고, 그렇지 않으면 0
SETRANGE키 오프셋 값 O(1) 의 일부 문자를 바꿉니다. 지정된 키 문자열 값. 오프셋부터 시작하여 대체 길이는 명령의 세 번째 매개변수 값의 문자열 길이입니다. 오프셋 값이 원래 키 값의 문자열 길이보다 크면 Redis는 값(오프셋 - strlen(value)) 번호를 0x00으로 지정한 다음 새 값을 추가합니다. 키가 존재하지 않는 경우 이 명령은 원래 값의 길이가 0이라고 가정하고 새 값을 추가하기 전에 오프셋 0x00s를 추가합니다. 문자열 Value의 최대 길이가 512M인 경우 오프셋의 최대 값은 536870911입니다. 마지막으로 명령으로 인해 실행 중에 지정된 키의 원래 값 길이가 늘어나면 Redis는 대체된 모든 문자열을 수용할 만큼 충분한 메모리를 재할당하게 되어 특정 성능 저하가 발생한다는 점에 유의해야 합니다. 수정된 문자열 값 길이입니다.
GETRANGEkey start end O(1) 가로채낸 문자열의 길이가 매우 짧다면 이에 대한 시간 복잡도를 고려할 수 있습니다. 명령은 O(1)로, 그렇지 않으면 O(N)입니다. 여기서 N은 가로채는 하위 문자열의 길이를 나타냅니다. 이 명령이 하위 문자열을 가로채면 시작(0은 첫 번째 문자를 나타냄)과 닫힌 간격의 끝에 있는 문자가 모두 포함됩니다. 끝 값이 Value의 문자 길이를 초과하는 경우 이 명령은 시작에서 시작하는 문자만 가로채게 됩니다. . 모든 문자 데이터. 하위 문자열
SETBIT키 오프셋 값 O(1) 지정된 오프셋에서 BIT 값을 설정합니다. 값은 1 또는 0만 될 수 있습니다. 설정 후 이 명령은 오프셋의 원래 BIT 값을 반환합니다. 지정된 키가 존재하지 않는 경우 이 명령은 새 값을 생성하고 지정된 오프셋의 매개변수에 BIT 값을 설정합니다. Offset이 Value의 문자 길이보다 큰 경우 Redis는 Value를 확장하고 지정된 Offset의 매개 변수에 BIT 값을 설정하며 중간에 추가된 BIT 값은 0이 됩니다. 마지막으로 주의할 점은 오프셋 값이 0보다 커야 한다는 것입니다. 지정된 오프셋에서 BIT의 원래 값입니다.
GETBITkey 오프셋 O(1) 지정된 오프셋, 0 또는 1에서 BIT 값을 반환합니다. 이 명령은 Offset이 문자열 값의 길이를 초과하는 경우 0을 반환하므로 빈 문자열에 대해서는 항상 0을 반환합니다. 지정된 오프셋의 BIT 값
MGETkey [key ...] O(N) N은 Get을 의미합니다. 키의 수. 지정된 모든 키의 값을 반환합니다. 키 중 하나가 존재하지 않거나 해당 값이 문자열 유형이 아닌 경우 키 값은 nil을 반환합니다. 지정된 키 집합에 대한 값 목록을 반환합니다.
MSETkey value [키 값 ...] O(N) N은 지정된 Key의 개수를 나타냅니다. 이 명령은 매개변수의 모든 키/값 설정 작업을 원자적으로 완료합니다. 특정 동작은 SET 명령을 여러 번 반복적으로 실행하는 것으로 볼 수 있습니다. 이 명령은 실패하지 않으며 항상 OK를 반환합니다.
MSETNXkey value [키 값 ...] O(N) N은 지정된 Key의 개수를 나타냅니다. 이 명령은 매개변수의 모든 키/값 설정 작업을 자동으로 완료합니다. 해당 동작은 SETNX 명령의 여러 반복 실행으로 볼 수 있습니다. 그러나 여기서 명확하게 언급해야 할 점은 이 키 배치에 키가 이미 존재하는 경우 작업이 모두 롤백됩니다. 즉, 모든 수정 사항이 적용되지 않는다는 것입니다. 1은 모든 키가 성공적으로 설정되었음을 의미하고, 0은 수정된 키가 없음을 의미합니다.

3. 명령 예:

1. SET/GET/APPEND/STRLEN:

  /> redis-cli   #执行Redis客户端工具。
    redis 127.0.0.1:6379> exists mykey                   #判断该键是否存在,存在返回1,否则返回0。
    (integer) 0
    redis 127.0.0.1:6379> append mykey "hello"      #该键并不存在,因此append命令返回当前Value的长度。
    (integer) 5
    redis 127.0.0.1:6379> append mykey " world"    #该键已经存在,因此返回追加后Value的长度。
    (integer) 11
    redis 127.0.0.1:6379> get mykey                      #通过get命令获取该键,以判断append的结果。
    "hello world"
    redis 127.0.0.1:6379> set mykey "this is a test" #通过set命令为键设置新值,并覆盖原有值。
    OK
    redis 127.0.0.1:6379> get mykey
    "this is a test"
    redis 127.0.0.1:6379> strlen mykey                  #获取指定Key的字符长度,等效于C库中strlen函数。
    (integer) 14


2. INCR/DECR/INCRBY/ DECRBY:
 redis 127.0.0.1:6379> set mykey 20     #设置Key的值为20
    OK
    redis 127.0.0.1:6379> incr mykey         #该Key的值递增1
    (integer) 21
    redis 127.0.0.1:6379> decr mykey        #该Key的值递减1
    (integer) 20
    redis 127.0.0.1:6379> del mykey          #删除已有键。
    (integer) 1
    redis 127.0.0.1:6379> decr mykey        #对空值执行递减操作,其原值被设定为0,递减后的值为-1
    (integer) -1
    redis 127.0.0.1:6379> del mykey   
    (integer) 1
    redis 127.0.0.1:6379> incr mykey        #对空值执行递增操作,其原值被设定为0,递增后的值为1
    (integer) 1
    redis 127.0.0.1:6379> set mykey hello #将该键的Value设置为不能转换为整型的普通字符串。
    OK
    redis 127.0.0.1:6379> incr mykey        #在该键上再次执行递增操作时,Redis将报告错误信息。
    (error) ERR value is not an integer or out of range
    redis 127.0.0.1:6379> set mykey 10
    OK
    redis 127.0.0.1:6379> decrby mykey 5 
    (integer) 5
    redis 127.0.0.1:6379> incrby mykey 10
    (integer) 15

3. GETSET:

  redis 127.0.0.1:6379> incr mycounter      #将计数器的值原子性的递增1
    (integer) 1
    #在获取计数器原有值的同时,并将其设置为新值,这两个操作原子性的同时完成。
    redis 127.0.0.1:6379> getset mycounter 0  
    "1"
    redis 127.0.0.1:6379> get mycounter       #查看设置后的结果。
    "0"

4. SETEX:

  redis 127.0.0.1:6379> setex mykey 10 "hello"   #设置指定Key的过期时间为10秒。
    OK    
    #通过ttl命令查看一下指定Key的剩余存活时间(秒数),0表示已经过期,-1表示永不过期。
    redis 127.0.0.1:6379> ttl mykey                       
    (integer) 4
    redis 127.0.0.1:6379> get mykey                      #在该键的存活期内我们仍然可以获取到它的Value。
    "hello"
    redis 127.0.0.1:6379> ttl mykey                        #该ttl命令的返回值显示,该Key已经过期。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #获取已过期的Key将返回nil。
    (nil)

5. SETNX:

    redis 127.0.0.1:6379> del mykey                      #删除该键,以便于下面的测试验证。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "hello"        #该键并不存在,因此该命令执行成功。
    (integer) 1
    redis 127.0.0.1:6379> setnx mykey "world"       #该键已经存在,因此本次设置没有产生任何效果。
    (integer) 0
    redis 127.0.0.1:6379> get mykey                      #从结果可以看出,返回的值仍为第一次设置的值。
    "hello"

6. SETRANGE/GETRANGE:

redis 127.0.0.1:6379> set mykey "hello world"       #设定初始值。
    OK
    redis 127.0.0.1:6379> setrange mykey 6 dd          #从第六个字节开始替换2个字节(dd只有2个字节)
    (integer) 11
    redis 127.0.0.1:6379> get mykey                         #查看替换后的值。
    "hello ddrld"
    redis 127.0.0.1:6379> setrange mykey 20 dd        #offset已经超过该Key原有值的长度了,该命令将会在末尾补0。
    (integer) 22
    redis 127.0.0.1:6379> get mykey                           #查看补0后替换的结果。
    "hello ddrld\x00\x00\x00\x00\x00\x00\x00\x00\x00dd"
    redis 127.0.0.1:6379> del mykey                         #删除该Key。
    (integer) 1
    redis 127.0.0.1:6379> setrange mykey 2 dd         #替换空值。
    (integer) 4
    redis 127.0.0.1:6379> get mykey                        #查看替换空值后的结果。
    "\x00\x00dd"   
    redis 127.0.0.1:6379> set mykey "0123456789"   #设置新值。
    OK
    redis 127.0.0.1:6379> getrange mykey 1 2      #截取该键的Value,从第一个字节开始,到第二个字节结束。
    "12"
    redis 127.0.0.1:6379> getrange mykey 1 20   #20已经超过Value的总长度,因此将截取第一个字节后面的所有字节。
    "123456789"

7. SETBIT/GETBIT:

  redis 127.0.0.1:6379> del mykey
    (integer) 1
    redis 127.0.0.1:6379> setbit mykey 7 1       #设置从0开始计算的第七位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0001的十六进制值为0x01
    "\x01"
    redis 127.0.0.1:6379> setbit mykey 6 1       #设置从0开始计算的第六位BIT值为1,返回原有BIT值0
    (integer) 0
    redis 127.0.0.1:6379> get mykey                #获取设置的结果,二进制的0000 0011的十六进制值为0x03
    "\x03"
    redis 127.0.0.1:6379> getbit mykey 6          #返回了指定Offset的BIT值。
    (integer) 1
    redis 127.0.0.1:6379> getbit mykey 10        #Offset已经超出了value的长度,因此返回0。
    (integer) 0

8. MSET/MGET/MSETNX:

    redis 127.0.0.1:6379> mset key1 "hello" key2 "world"   #批量设置了key1和key2两个键。
    OK
    redis 127.0.0.1:6379> mget key1 key2                        #批量获取了key1和key2两个键的值。
    1) "hello"
    2) "world"
    #批量设置了key3和key4两个键,因为之前他们并不存在,所以该命令执行成功并返回1。
    redis 127.0.0.1:6379> msetnx key3 "stephen" key4 "liu" 
    (integer) 1
    redis 127.0.0.1:6379> mget key3 key4                   
    1) "stephen"
    2) "liu"
    #批量设置了key3和key5两个键,但是key3已经存在,所以该命令执行失败并返回0。
    redis 127.0.0.1:6379> msetnx key3 "hello" key5 "world" 
    (integer) 0
    #批量获取key3和key5,由于key5没有设置成功,所以返回nil。
    redis 127.0.0.1:6379> mget key3 key5                   
    1) "stephen"
    2) (nil)

위는 Redis 튜토리얼(2): String 데이터 유형의 내용 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


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