집 >백엔드 개발 >C#.Net 튜토리얼 >Redis 튜토리얼(2): 문자열 데이터 유형
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
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)를 참고하세요!