Esempio n. 1
0
mrb_value mrb_redis_select(mrb_state *mrb, mrb_value self)
{
    mrb_value database;

    mrb_get_args(mrb, "o", &database);
    redisContext *rc = mrb_redis_get_context(mrb, self);

    if (mrb_type(database) != MRB_TT_FIXNUM) {
      mrb_raisef(mrb, E_TYPE_ERROR, "type mismatch: %S given", database);
    }

    redisReply *rs = redisCommand(rc, "SELECT %d", mrb_fixnum(database));
    freeReplyObject(rs);

    return  self;
}
Esempio n. 2
0
mrb_value mrb_redis_get(mrb_state *mrb, mrb_value self)
{
    mrb_value key;
    char *val;

    mrb_get_args(mrb, "o", &key);
    redisContext *rc = mrb_redis_get_context(mrb, self);
    redisReply *rs = redisCommand(rc, "GET %s", RSTRING_PTR(key));
    if (rs->type == REDIS_REPLY_STRING) {
        val = strdup(rs->str);
        freeReplyObject(rs);
        return mrb_str_new(mrb, val, strlen(val));
    } else {
        freeReplyObject(rs);
        return mrb_nil_value();
    }
}
Esempio n. 3
0
mrb_value mrb_redis_lrange(mrb_state *mrb, mrb_value self)
{
    int i;
    mrb_value list, array;
    mrb_int arg1, arg2;

    mrb_get_args(mrb, "oii", &list, &arg1, &arg2);
    redisContext *rc = mrb_redis_get_context(mrb, self);
    redisReply *rr = redisCommand(rc,"LRANGE %s %d %d", RSTRING_PTR(list), arg1, arg2);
    if (rr->type == REDIS_REPLY_ARRAY) {
        array = mrb_ary_new(mrb);
        for (i = 0; i < rr->elements; i++) {
            mrb_ary_push(mrb, array, mrb_str_new2(mrb, rr->element[i]->str));
        }
    } else {
        freeReplyObject(rr);
        return mrb_nil_value();
    }

    freeReplyObject(rr);

    return array;
}