`
lobin
  • 浏览: 427800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Redis: 客户端

 
阅读更多

客户端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <hiredis.h>

typedef struct 
{
  char *data;
  int size;

  int r_offs;
} buffer_t;

#define INIT_SIZE 8

int buffer_init(buffer_t *buffer, int initial_size)
{
  buffer->data = (char *) malloc(initial_size);
  if (buffer->data == NULL)
  {
    return -1;
  }
  memset(buffer->data, 0, initial_size);

  buffer->size = initial_size;
  buffer->r_offs = 0;
  return 0;
}

void buffer_clear(buffer_t *buffer)
{
  memset(buffer->data, 0, buffer->size);
  buffer->r_offs = 0;
}

void buffer_destroy(buffer_t *buffer)
{
  free(buffer->data);
  buffer->size = 0;
  buffer->r_offs = 0;
}

void stdin_prefix(char* host, int port, redisContext *redisContext)
{
  if (redisContext && ! redisContext->err)
  {
    printf("%s:%d> ", host, port);
  }
  else
  {
    printf("not connected> ");
  }
}

int main(int argc, const char **argv)
{
  redisContext *redisContext;
  redisReply *redisReply;

  char *host = "127.0.0.1";
  int port = 6379;

  int repl = 1;

  int i;
  for (i = 1; i < argc; i++)
  {
    const char *arg = argv[i];
    if (strncmp(arg, "-h", 2) == 0)
    {
      if (i + 1 < argc)
      {
        host = (char *) argv[i + 1];
        i++;
      }
    }
    else if (strncmp(arg, "-p", 2) == 0)
    {
      if (i + 1 < argc)
      {
        port = atoi(argv[i + 1]);
        i++;
      }
    }
    else 
    {
      repl = 0;
      argc = argc - i;
      argv = &argv[i];
    }
  }
  //printf("host:port=%s:%d\n", host, port);

  redisContext = redisConnect(host, port);
  if (! redisContext)
  {
    printf("Could not connect to Redis at %s:%d: (redisConnect err.)\n", host, port);
    if (! repl)
    {
      return -1;
    }
  }
  if (redisContext->err)
  {
    printf("Could not connect to Redis at %s:%d: %s(redisConnect err=%d.)\n", host, port, redisContext->errstr, redisContext->err);
    if (! repl)
    {
      redisFree(redisContext);
      return -1;
    }
  }
  if (! repl)
  {
    redisReply = redisCommandArgv(redisContext, argc, argv, NULL);
    printf("%s\n", redisReply->str);
    freeReplyObject(redisReply);
  }
  else 
  {
    buffer_t buffer;
    buffer_init(&buffer, INIT_SIZE);

    for (; ;)
    {
      stdin_prefix(host, port, redisContext);

      while(1)
      {
        int i, r_offs = buffer.r_offs;

        fgets(buffer.data + buffer.r_offs, buffer.size - buffer.r_offs, stdin);
        buffer.r_offs += buffer.size - buffer.r_offs - 1;
        for (i = r_offs; i < buffer.r_offs; i++)
        {
          if (buffer.data[i] == '\n')
          {
            buffer.data[i] = 0;
            break;
          }
        }
        if (i < buffer.r_offs)
        {
          break;
        }
        else
        {
          buffer.size += INIT_SIZE;
          buffer.data = realloc(buffer.data, buffer.size);
        }
      }

      if (strcmp(buffer.data, "quit") == 0)
      {
        break;
      }

      if (! redisContext || redisContext->err)
      {
        if (redisContext)
        {
          printf("Could not connect to Redis at %s:%d: %s(redisConnect err=%d.)\n", host, port, redisContext->errstr, redisContext->err);
          redisFree(redisContext);
        }
        else
        {
          printf("Could not connect to Redis at %s:%d: (redisConnect err.)\n", host, port);
        }
        redisContext = redisConnect(host, port);
        buffer_clear(&buffer);
        continue;
      }

      redisReply = redisCommand(redisContext, buffer.data);
      if (redisReply->str)
      {
        printf("%s\n", redisReply->str);
      }
      else 
      {
        printf("(nil)\n");
      }
      freeReplyObject(redisReply);
      buffer_clear(&buffer);

      /*
      redisReply = redisCommand(redisContext, "SET %s %s", "hello", "this is c");
      printf("%s\n", redisReply->str);
      freeReplyObject(redisReply);

      redisReply = redisCommand(redisContext, "GET %s", "hello");
      printf("%s\n", redisReply->str);
      freeReplyObject(redisReply);

      redisReply = redisCommand(redisContext, "GET hel");
      if (redisReply->str)
      {
        printf("%s\n", redisReply->str);
      }
      else 
      {
        printf("(nil)\n");
      }
      
      freeReplyObject(redisReply);
      */
    }
    buffer_destroy(&buffer);
  }
  redisFree(redisContext);
  return 0;
}

 

>.\redis_test.exe -h 127.0.0.1

Could not connect to Redis at 127.0.0.1:6379: Connection refused(redis

Connect err=1.)

not connected> quit

 

>.\redis_test.exe -h 127.0.0.1 -p 1234

 

Could not connect to Redis at 127.0.0.1:1234: Connection refused(redis

Connect err=1.)

not connected> quit

 

>.\redis_test.exe -h 127.0.0.1

Could not connect to Redis at 127.0.0.1:6379: Connection refused(redis

Connect err=1.)

not connected> get hello

Could not connect to Redis at 127.0.0.1:6379: Connection refused(redis

Connect err=1.)

not connected> get name

Could not connect to Redis at 127.0.0.1:6379: Connection refused(redis

Connect err=1.)

not connected> quit

 

>.\redis_test.exe -h 192.168.0.102

192.168.0.102:6379> quit

 

>.\redis_test.exe -h 192.168.0.102

192.168.0.102:6379> get hello

this is c

192.168.0.102:6379> get keya

valuea

192.168.0.102:6379> get name

luoxiaoyong

192.168.0.102:6379> set key b

OK

192.168.0.102:6379> get key

b

192.168.0.102:6379> quit

 

0
0
分享到:
评论

相关推荐

    C++ Redis 客户端简单使用

    本篇文章将深入探讨如何在C++中简单使用Redis客户端。 首先,为了在C++中与Redis进行交互,我们需要一个支持C++的Redis客户端库。常见的选择有`hiredis`,这是一个轻量级的C库,同时也提供了C++绑定。另一个是`cpp-...

    cpp_redis:C ++ 11轻量级Redis客户端:异步,线程安全,无依赖项,流水线,多平台-不再维护-请检查https:github.comcpp-rediscpp_redis

    cpp_redis cpp_redis是C ++ 11异步多平台轻量级Redis客户端,支持同步操作,流水线,标记和高可用性。需求cpp_redis没有依赖项。 它唯一的要求是C++11 。 它没有网络模块,因此您可以自由配置自己的模块,也可以使用...

    Lettuce-Redis高级客户端详解1

    【Lettuce-Redis高级客户端详解1】 Lettuce是一个高度优化的Java编写的Redis驱动程序,它在Redis社区中获得了广泛的认可,特别是在Spring生态体系中。作为Spring-Data-Redis的一部分,Lettuce取代了早期版本的Jedis...

    redis集群客户端管理工具

    redis集群客户端管理工具

    redis桌面客户端管理工具.zip

    "redis桌面客户端管理工具.zip"就是这样一个压缩包,包含了一个帮助用户可视化地查看和管理Redis服务器数据的软件。 这个压缩包中的主要文件是"redis桌面客户端管理工具.exe",这通常是一个可执行程序,用于在...

    redis mac 客户端

    在Mac操作系统上,为了方便地管理和操作Redis数据库,我们通常会使用特定的客户端工具。"Redis Desktop Manager for Mac 0.9.3.39"就是这样一个专为Mac用户设计的图形化界面工具,它提供了直观、高效的方式来浏览、...

    redis远程客户端管理工具

    Redis远程客户端管理工具是用于连接并管理远程Redis服务器的软件,它们通常提供图形用户界面(GUI),使得数据库的操作和监控更加直观和方便。这些工具可以帮助开发者执行命令、查看数据、进行备份和恢复,以及进行...

    ServiceStack .Redis3.9.60 Redis.NET客户端无限制版

    Redis推荐的最好的.Net客户端。 ServiceStack.Redis 4.0 已经收费 并且有每小时6000次插入的限制。这个是ServiceStack.Redis 3系版本的最终最新版本3.9.60,无使用限制, Redis.NET客户端无限制版

    redis客户端连接工具 RedisDesktopManager

    下面将详细介绍Redis、Redis客户端以及RedisDesktopManager的相关知识点。 **一、Redis简介** 1. **什么是Redis**:Redis是一个开源的、基于键值对的数据存储系统,支持多种数据结构,如字符串、哈希、列表、集合...

    redis windows客户端

    redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis windows 客户端 redis ...

    redis桌面客户端管理工具(免费).zip

    在进行Redis的开发和运维时,一个强大的桌面客户端管理工具能够极大地提升效率。 本资源提供的是一个免费的Redis桌面客户端管理工具,这对于开发者和DBA来说是一大福音,因为市面上很多此类工具都是收费的。这个...

    交互式Redis:具有自动完成功能和语法突出显示功能的Redis终端客户端。-Python开发

    IRedis是具有自动完成功能和语法突出显示功能的redis终端客户端。 IRedis使您可以流畅地键入Redis命令,交互式Redis:具有自动完成功能和语法突出显示功能的Redis Cli。 IRedis是具有自动完成功能和语法突出显示功能...

    redis客户端

    RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面...

    Redis协议客户端模块.rar

    通过深入理解Redis协议和易语言的特性,开发者可以构建一个高效、稳定的Redis客户端模块,为应用程序提供强大的数据存储和处理能力。在实际项目中,应结合具体需求对模块进行定制和优化,确保其满足性能和功能的要求...

    redis中文客户端

    Redis中文客户端是为了解决 Redis 数据库在中文环境下的使用需求而设计的工具,它提供了友好的用户界面,使得操作 Redis 数据库对于中文用户来说更加便捷。本文将深入探讨 Redis 中文客户端的相关知识点,包括其功能...

    redis客户端工具(绿色版)

    RedisClient作为Redis的客户端工具,为开发者提供了一个图形化的界面来与Redis服务器交互,使得管理和操作Redis数据库变得更加直观和便捷。 RedisClient的特性: 1. **图形化界面**:RedisClient采用GUI设计,使得...

    Redis图形化桌面客户端

    **Redis图形化桌面客户端详解** Redis,全称Remote Dictionary Server,是一种开源的、基于内存的键值存储系统,常用于数据库、缓存和消息中间件等场景。它以其高性能、低延迟以及丰富的数据结构而备受青睐。为了...

    redis客户端免安装版

    本资源提供的“redis客户端免安装版”是一个便捷的Redis管理工具,无需安装过程,解压后即可直接运行,方便用户快速地进行Redis服务器的数据操作与管理。 Redis Desktop Manager是这款客户端的名称,它是一个跨平台...

    Redis Go客户端.zip

    这个压缩包中的"说明.txt"可能是对如何配置和使用Go Redis客户端的指导,而"go-redis_master.zip"则可能是一个Go语言实现的Redis客户端源代码仓库。 Go Redis客户端库,如`go-redis`,提供了一种方便的方式来与...

    cpp_redis:C ++ 11轻量级Redis客户端:异步,线程安全,无依赖项,流水线,多平台

    cpp_redis cpp_redis是C ++ 11异步多平台轻量级Redis客户端,支持同步操作,流水线,标记和高可用性。需求cpp_redis没有依赖项。 它唯一的要求是C++11 。 它没有网络模块,因此您可以自由配置自己的模块,也可以使用...

Global site tag (gtag.js) - Google Analytics