[REDIS] 우리는 hiredis에 의해 레디 스에서 키의 값으로 C의 int 배열을 설정할 수 있습니까?
REDIS우리는 hiredis에 의해 레디 스에서 키의 값으로 C의 int 배열을 설정할 수 있습니까?
제공 : INT (X) [3] = {11,22,33}; 이진 데이터와 같은 키의 값으로 저장하고 그것을 얻을 수있는 방법
hiredis 바이너리 safestring을 설정하는 방법을 예제를 제공
/* Set a key using binary safe API */
reply = redisCommand(c,"SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);
printf("SET (binary API): %s\n", reply->str);
freeReplyObject(reply);
하지만 어떻게 다른 데이터와 방법에 대한을 얻으려면?
해결법
-
==============================
1.어떤 종류의 마샬링없이 원격 저장소에 직접적 이진 데이터를 저장하는 것은 재앙이다. 나는 그것을 할 권하고 싶지 않다 : 당신이 플랫폼에서 이진 데이터 독립을하는 데 사용할 수있는 시리얼 프로토콜의 많음이있다.
어떤 종류의 마샬링없이 원격 저장소에 직접적 이진 데이터를 저장하는 것은 재앙이다. 나는 그것을 할 권하고 싶지 않다 : 당신이 플랫폼에서 이진 데이터 독립을하는 데 사용할 수있는 시리얼 프로토콜의 많음이있다.
그게 당신의 질문에 대답했다 :
// This is the key int k[3] = {11,22,33}; // This is the value int v[4] = {0,1,2,3}; redisReply *reply = 0; // Store the key/value: note the usage of sizeof to get the size of the arrays (in bytes) reply = redisCommand(context, "SET %b %b", k, (size_t) sizeof(k), v, (size_t) sizeof(v) ); if (!reply) return REDIS_ERR; freeReplyObject(reply); // Now, get the value back, corresponding to the same key reply = redisCommand(context, "GET %b", k, (size_t) sizeof(k) ); if ( !reply ) return REDIS_ERR; if ( reply->type != REDIS_REPLY_STRING ) { printf("ERROR: %s", reply->str); } else { // Here, it is safer to make a copy to be sure memory is properly aligned int *val = (int *) malloc( reply->len ); memcpy( val, reply->str, reply->len); for (int i=0; i<reply->len/sizeof(int); ++i ) printf("%d\n",val[i]); free( val ); } freeReplyObject(reply);
당신이 확실 모든 레디 스의 클라이언트가 동일한 엔디 언과 같은를 sizeof (int)를 가진 시스템에서 실행하는 것이 있다면 이런 종류의 코드에만 작동합니다.
from https://stackoverflow.com/questions/26799074/can-we-set-c-int-array-as-a-keys-value-in-redis-by-hiredis by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스의 리더를위한 유일한 득점 (0) | 2020.01.21 |
---|---|
[REDIS] 파이프 라인 배수로 ServiceStack를 사용하여 레디 스에 명령을 읽는 방법 (0) | 2020.01.21 |
[REDIS] 어떻게 루아 스크립트의 한계에서 레디 스 호출을 피하기 위해? (0) | 2020.01.21 |
[REDIS] 레디 스 - blpush이있다 (0) | 2020.01.21 |
[REDIS] 봄 데이터 레디 스 여러 레디 스 서버에 연결 (0) | 2020.01.21 |