如何在memcached c客户端中使用一致性哈希?

时间:2013-05-26 08:33:49

标签: memcached libmemcached consistent-hashing

我正在使用libmemcached c客户端进行设置并获取memcache值。

  memcached_server_st *servers = NULL;
  memcached_st *memc;
  memcached_return rc;
  char *key= "keystring";
  char *value= "keyvalue";

//  memcached_server_st *memcached_servers_parse (char *server_strings);
  memc= memcached_create(NULL);

  servers= memcached_server_list_append(servers, "localhost", 5555, &rc);
  servers= memcached_server_list_append(servers, "localhost", 5566, &rc);
  rc= memcached_server_push(memc, servers);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Added server successfully\n");
  else
    fprintf(stderr,"Couldn't add server: %s\n",memcached_strerror(memc, rc));

  rc= memcached_set(memc, key, strlen(key), value, strlen(value), (time_t)0, (uint32_t)0);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Key stored successfully\n");
  else
    fprintf(stderr,"Couldn't store key: %s\n",memcached_strerror(memc, rc));

  return 0;

我想使用一致的哈希算法进行设置并获取密钥。 http://docs.libmemcached.org/memcached_behavior.html#memcached_behavior_setlink

但我不知道如何实现this.code片段或参考链接非常感谢。

提前致谢。

1 个答案:

答案 0 :(得分:1)

转到http://docs.libmemcached.org/memcached_behavior.html#memcached_behavior_setlink链接 你可以看到两种方法来实现它。

第一个 MEMCACHED_BEHAVIOR_DISTRIBUTION
使用此功能,您可以启用不同的方法将值分配给服务器。 默认方法是MEMCACHED_DISTRIBUTION_MODULA。您可以通过设置MEMCACHED_DISTRIBUTION_CONSISTENT来启用一致性哈希。一致的散列提供了更好的分发,并允许将服务器添加到群集中,同时减少缓存损失。目前,MEMCACHED_DISTRIBUTION_CONSISTENT是值MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA的别名。

第二个一 MEMCACHED_BEHAVIOR_KETAMA
将默认分布设置为MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA,将散列设置为MEMCACHED_HASH_MD5。

示例

memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_KETAMA, 1);