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; }
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(); } }
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; }