반응형
Redis Hashes 사용하기
Redis의 Hashes 데이터 타입은 필드-값 쌍을 저장하는 해시 맵 구조를 제공한다. 필드 수준에서 읽고 쓰는 작업을 효과적으로 처리할 때 유용하며, 특히 개별 필드를 찾거나 업데이트할 때 빠른 성능을 제공한다. Hashes는 사용자 프로필, 설정, 카운터, 주소 정보와 같이 다양한 데이터 구조에 적용할 수 있다.
C#에서 레디스 Hashes 사용 예제 코드
public class RedisHashExample
{
private readonly IDatabase _db;
public RedisHashExample(IDatabase db)
{
_db = db;
}
public void SetUserProfile(string userId, Dictionary<string, string> profile)
{
var hashEntries = profile.Select(kv => new HashEntry(kv.Key, kv.Value));
_db.HashSet($"user:{userId}", hashEntries.ToArray());
}
public Dictionary<string, string> GetUserProfile(string userId)
{
var hashEntries = _db.HashGetAll($"user:{userId}");
return hashEntries.ToDictionary(
he => he.Name.ToString(),
he => he.Value.ToString());
}
public string GetUserField(string userId, string field)
{
return _db.HashGet($"user:{userId}", field);
}
public bool UpdateUserFiel d(string userId, string field, string value)
{
return _db.HashSet($"user:{userId}", field, value);
}
}
레디스 데이터 타입 Hashes
- HSET key field value [field value ...] : 특정 해시 맵(key)에 하나 이상의 필드(field)와 값(value)을 설정한다.
- HGET key field : 해당 해시 맵에서 지정한 필드의 값을 반환한다.
- HDEL key field [field ...] : 해당 해시 맵에서 하나 이상의 필드를 제거한다.
- HEXISTS key field : 해당 해시 맵에서 특정한 필드가 존재하는지 여부를 반환한다.
- HGETALL key : 해당 해시 맵의 모든 필드와 값의 쌍을 반환한다.
- HKEYS key : 해당 해시 맵의 모든 필드를 반환한다.
- HVALS key : 해당 해시 맵의 모든 값을 반환한다.
- HLEN key : 해당 해시 맵의 필드 수를 반환한다.
- HINCRBY key field increment : 해당 해시 맵의 필드의 값을 인자로 받은 만큼 증가시킨다.
- HMSET key field value [field value ...] : 특정 해시맵에 여러 개의 필드와 값을 한 번에 설정한다.
- HMGET key field [field ...] : 해당 해시 맵에서 여러 개의 필드의 값을 반환한다.
- HSETNX key field value : 특정 해시 맵에 필드가 존재하지 않을 때에만 값을 설정한다.
HSET, HGET
hset myhash myfield1 value1 myfield2 value2
(integer) 1
hset myhash2 myfield1 value1 myfield2 value2 myfield3 vlaue3
(integer) 3
hget myhash myfield1
"value1"
hget myhash2 myfield3
"vlaue3"
HDEL, HEXISTS
hdel myhash myfield1
(integer) 1
hget myhash myfield1
(nil)
hexists myhash myfield1
(integer) 0
hexists myhash myfield2
(integer) 1
HGETALL, HKEYS, HVALS
hset testhash hashfield1 hashvalue1 hashfield2 hashvalue2 hashfield3 hashvalue3
(integer) 3
hset testhash2 hashfield1 hashvalue1 hashfield2 hashvalue2 hashfield3 hashvalue3 hashfield4 hashvalue4
(integer) 4
hgetall testhash
1) "hashfield1"
2) "hashvalue1"
3) "hashfield2"
4) "hashvalue2"
5) "hashfield3"
6) "hashvalue3"
hgetall testhash2
1) "hashfield1"
2) "hashvalue1"
3) "hashfield2"
4) "hashvalue2"
5) "hashfield3"
6) "hashvalue3"
7) "hashfield4"
8) "hashvalue4"
hkeys testhash
1) "hashfield1"
2) "hashfield2"
3) "hashfield3"
hvals testhash
1) "hashvalue1"
2) "hashvalue2"
3) "hashvalue3"
hkeys testhash2
1) "hashfield1"
2) "hashfield2"
3) "hashfield3"
4) "hashfield4"
hvals testhash2
1) "hashvalue1"
2) "hashvalue2"
3) "hashvalue3"
4) "hashvalue4"
HLEN, HINCRBY
hlen testhash
(integer) 3
hincrby testhash hashfield1 10
(error) ERR hash value is not an integer
hset mytesthash testfield 10
(integer) 1
hincrby mytesthash testfield 5
(integer) 15
hvals mytesthash
1) "15"
hgetall mytesthash
1) "testfield"
2) "15"
HMSET, HMGET
hmset mytesthash testfield2 10 testfield3 20 testfield4 50
OK
hmget mytesthash testfield testfield2 testfield3 testfield4
1) "15"
2) "10"
3) "20"
4) "50"
HSETNX
hsetnx mytesthash testfield 100
(integer) 0
hsetnx mytesthash testfield5 100
(integer) 1
hgetall mytesthash
1) "testfield"
2) "15"
3) "testfield2"
4) "10"
5) "testfield3"
6) "20"
7) "testfield4"
8) "50"
9) "testfield5"
10) "100"
참고 사이트
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
C# StackExchange로 Redis Sets 데이터 구조 사용하기 (0) | 2024.12.03 |
---|---|
C# StackExchange로 Redis Strings 데이터 구조 사용하기 (0) | 2024.12.02 |
레디스(Redis) TTL 설정하기 (0) | 2024.04.23 |
StackExchange.Redis Subscribe()로 구독하기 (0) | 2023.12.27 |
Redis 자료구조(Data Structures) (11) | 2023.05.30 |
댓글