redis 사용시 pfadd 사용하다 다음 에러를 만났다.


PFADD visits:2015-12-31 "x"

(error) WRONGTYPE Key is not a valid HyperLogLog string value.




/* Check if the object is a String with a valid HLL representation.

 * Return C_OK if this is true, otherwise reply to the client

 * with an error and return C_ERR. */

int isHLLObjectOrReply(client *c, robj *o) {

    struct hllhdr *hdr;


    /* Key exists, check type */

    if (checkType(c,o,OBJ_STRING))

        return C_ERR; /* Error already sent. */


    if (stringObjectLen(o) < sizeof(*hdr)) goto invalid;

    hdr = o->ptr;


    /* Magic should be "HYLL". */

    if (hdr->magic[0] != 'H' || hdr->magic[1] != 'Y' ||

        hdr->magic[2] != 'L' || hdr->magic[3] != 'L') goto invalid;


    if (hdr->encoding > HLL_MAX_ENCODING) goto invalid;


    /* Dense representation string length should match exactly. */

    if (hdr->encoding == HLL_DENSE &&

        stringObjectLen(o) != HLL_DENSE_SIZE) goto invalid;


    /* All tests passed. */

    return C_OK;


invalid:

    addReplySds(c,

        sdsnew("-WRONGTYPE Key is not a valid "

               "HyperLogLog string value.\r\n"));

    return C_ERR;

}



키 타입 길이가 맞지 않아서 에러가 발생했다.

WRONGTYPE Key is not a valid HyperLogLog string value 이 발생하는 로그는 다음 중 하나로 발생한다. 
- 키 크기 이상
- 매직 넘버(HYLL) 이상
- 인코딩 MAX 값(상수가 1로 정의됨)을 넘어섬
- DENSE 타입이면 크기도 같아야 하는데, 그러지 않음



즉, type커맨드로 확인해보니 다른 타입의 키로 등록했기 때문에 pfadd가 에러가 발생한 것이었다. 

 type visits:2015-12-31
string




Posted by '김용환'
,