1. 개요:
Redis의 해시 유형은 문자열 키와 문자열 값이 있는 맵 컨테이너로 생각할 수 있습니다. 따라서 이 유형은 값 개체에 대한 정보를 저장하는 데 매우 적합합니다. 사용자 이름, 비밀번호, 나이 등 해시에 필드가 거의 포함되어 있지 않으면 이 유형의 데이터도 디스크 공간을 거의 차지하지 않습니다. 각 해시는 4294967295개의 키-값 쌍을 저장할 수 있습니다.
2. 관련 명령어 목록:
명령 프로토타입 | 시간 복잡도 | 명령 설명 | 반환 값 |
HSET 키 필드 값 | O(1) | 지정된 키에 대한 필드/값 쌍을 설정합니다. 키가 존재하지 않는 경우 이 명령은 필드/값을 사용하여 새 키를 생성합니다. 예, 매개변수의 필드가 키에 이미 존재하는 경우 원래 값을 새 값으로 덮어씁니다. | 1은 새 필드가 새 값으로 설정되었음을 의미하고, 0은 필드가 이미 존재합니다. 새 값으로 덮어씁니다. 원래 값 |
HGET 키 필드 | O(1) | 지정된 값의 관련 값을 반환합니다. 지정된 키의 필드입니다. | 매개변수에 있는 필드의 관련 값을 반환합니다. 매개변수에 키 또는 필드가 없으면 nil이 반환됩니다. |
HEXISTS키 필드 | O(1) | 지정된 키에 지정된 필드가 존재하는지 확인합니다. | 1은 존재함을 의미하고, 0은 매개변수의 필드 또는 키가 존재하지 않음을 의미합니다. |
HLEN 키 | O(1) | 키에 포함된 필드 수를 가져옵니다. | 키에 포함된 필드 수를 반환합니다. 키가 존재하지 않으면 0을 반환합니다. |
HDEL 키 필드 [필드 ...] | O(N) | 시간 복잡도의 N은 삭제할 필드를 나타냅니다. 매개변수 수량. 지정된 키의 해시 값에서 매개변수에 지정된 여러 필드를 삭제합니다. 필드가 없으면 무시됩니다. 키가 존재하지 않으면 빈 해시로 처리되어 0을 반환합니다. | 실제로 삭제된 필드 수입니다. |
HSETNXkey 필드값 | O(1) | 파라미터에 Key나 Field가 존재하지 않는 경우에만 지정된 Key를 설정 필드/값 쌍. 그렇지 않으면 명령이 어떤 작업도 수행하지 않습니다. | 1은 새 필드가 새 값으로 설정되었음을 의미하고, 0은 키 또는 필드가 이미 존재함을 의미하며 이 명령은 어떤 작업도 수행하지 않습니다. |
HINCRBY키 필드 증분 | O(1) | 지정된 키의 지정된 필드와 연결된 값의 값을 늘립니다. 키 또는 필드가 존재하지 않는 경우 이 명령은 새 키 또는 필드를 만들고 관련 값을 0으로 초기화한 다음 숫자를 늘리는 작업을 지정합니다. 이 명령에서 지원되는 숫자는 64비트 부호 있는 정수입니다. 즉, 증분은 음수일 수 있습니다. | 연산 후 값 반환 |
HGETALLkey | O(N) | 시간 복잡도의 N은 포함된 키를 나타냅니다. 현장 수량. 이 키에 포함된 모든 필드/값을 가져옵니다. 반환 형식은 필드, 값 등입니다. | 필드/값 목록 |
HKEYSkey | O(N) | 시간 복잡도의 N은 키가 필드 수량을 포함합니다. 지정된 키에 대한 모든 필드 이름을 반환합니다. | 필드 목록. |
HVALSkey | O(N) | 시간 복잡도의 N은 키에 포함된 필드 수를 나타냅니다. 지정된 키의 모든 값 이름을 반환합니다. | 값 목록. |
MGETkey 필드 [필드 ...] | O(N) | 시간 복잡도의 N은 요청된 필드 수를 나타냅니다. 매개변수에 지정된 필드와 연관된 값 세트를 가져옵니다. 요청한 필드가 존재하지 않으면 해당 값은 nil을 반환합니다. 키가 존재하지 않으면 명령은 이를 빈 해시로 처리하므로 nil 집합을 반환합니다. | 요청된 필드와 관련된 값 집합을 반환합니다. 반환 순서는 필드의 요청 순서와 동일합니다. |
HMSET 키 필드 값 [필드 값 ...] | O(N) | N은 시간 복잡도에서 필드가 설정되는 수량을 나타냅니다. 매개변수에 제공된 필드/값 쌍을 하나씩 설정합니다. 필드 중 하나가 이미 존재하는 경우 원래 값을 새 값으로 덮어씁니다. 키가 존재하지 않는 경우 새 키를 만들고 매개변수에 필드/값을 설정합니다. |
3. 명령 예:
1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:
#在Shell命令行启动Redis客户端程序 /> redis-cli #给键值为myhash的键设置字段为field1,值为stephen。 redis 127.0.0.1:6379> hset myhash field1 "stephen" (integer) 1 #获取键值为myhash,字段为field1的值。 redis 127.0.0.1:6379> hget myhash field1 "stephen" #myhash键中不存在field2字段,因此返回nil。 redis 127.0.0.1:6379> hget myhash field2 (nil) #给myhash关联的Hashes值添加一个新的字段field2,其值为liu。 redis 127.0.0.1:6379> hset myhash field2 "liu" (integer) 1 #获取myhash键的字段数量。 redis 127.0.0.1:6379> hlen myhash (integer) 2 #判断myhash键中是否存在字段名为field1的字段,由于存在,返回值为1。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 1 #删除myhash键中字段名为field1的字段,删除成功返回1。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 1 #再次删除myhash键中字段名为field1的字段,由于上一条命令已经将其删除,因为没有删除,返回0。 redis 127.0.0.1:6379> hdel myhash field1 (integer) 0 #判断myhash键中是否存在field1字段,由于上一条命令已经将其删除,因为返回0。 redis 127.0.0.1:6379> hexists myhash field1 (integer) 0 #通过hsetnx命令给myhash添加新字段field1,其值为stephen,因为该字段已经被删除,所以该命令添加成功并返回1。 redis 127.0.0.1:6379> hsetnx myhash field1 stephen (integer) 1 #由于myhash的field1字段已经通过上一条命令添加成功,因为本条命令不做任何操作后返回0。 redis 127.0.0.1:6379> hsetnx myhash field1 stephen (integer) 0
2. HINCRBY:
#删除该键,便于后面示例的测试。 redis 127.0.0.1:6379> del myhash (integer) 1 #准备测试数据,该myhash的field字段设定值1。 redis 127.0.0.1:6379> hset myhash field 5 (integer) 1 #给myhash的field字段的值加1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field 1 (integer) 6 #给myhash的field字段的值加-1,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -1 (integer) 5 #给myhash的field字段的值加-10,返回加后的结果。 redis 127.0.0.1:6379> hincrby myhash field -10 (integer) -5
3. HGETALL/HKEYS/HVALS/HMGET/HMSET:
#删除该键,便于后面示例测试。 redis 127.0.0.1:6379> del myhash (integer) 1 #为该键myhash,一次性设置多个字段,分别是field1 = "hello", field2 = "world"。 redis 127.0.0.1:6379> hmset myhash field1 "hello" field2 "world" OK #获取myhash键的多个字段,其中field3并不存在,因为在返回结果中与该字段对应的值为nil。 redis 127.0.0.1:6379> hmget myhash field1 field2 field3 1) "hello" 2) "world" 3) (nil) #返回myhash键的所有字段及其值,从结果中可以看出,他们是逐对列出的。 redis 127.0.0.1:6379> hgetall myhash 1) "field1" 2) "hello" 3) "field2" 4) "world" #仅获取myhash键中所有字段的名字。 redis 127.0.0.1:6379> hkeys myhash 1) "field1" 2) "field2" #仅获取myhash键中所有字段的值。 redis 127.0.0.1:6379> hvals myhash 1) "hello" 2) "world"
위는 Redis 입니다. 튜토리얼( 4): 해시 데이터 유형의 내용 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!