func (c *Client) BLPop(timeout uint64, keys ...string) ([]string, error) {
	var ret []string
	args := make([][]byte, len(keys)+2)
	args[0] = []byte("BLPOP")
	i := 0
	for _, key := range keys {
		i++
		args[i] = to.Bytes(key)
	}
	args[1+i] = to.Bytes(timeout)
	err := c.command(&ret, args...)
	return ret, err
}
/*
BLPOP is a blocking list pop primitive. It is the blocking version of LPOP
because it blocks the connection when there are no elements to pop from any of
the given lists. An element is popped from the head of the first list that is
non-empty, with the given keys being checked in the order that they are given.

http://redis.io/commands/blpop
package redis
import (
	"errors"
	"fmt"
	"io"
	"menteslibres.net/gosexy/to"
	"strings"
)
func (c *Client) Append(key string, value interface{}) (int64, error) {
	var ret int64
	err := c.command(
		&ret,
		[]byte("APPEND"),
		[]byte(key),
		to.Bytes(value),
	)
	return ret, err
}
func (c *Client) Auth(password string) (string, error) {
	var ret string
	err := c.command(
		&ret,
		[]byte("AUTH"),
		[]byte(password),
	)
	return ret, err
}
func (c *Client) BgRewriteAOF() (string, error) {
	var ret string
	err := c.command(
		&ret,
		[]byte("BGREWRITEAOF"),
	)
	return ret, err
}
func (c *Client) BgSave() (string, error) {
	var ret string
	err := c.command(
		&ret,
		[]byte("BGSAVE"),
	)
	return ret, err
}
func (c *Client) BitCount(key string, params ...int64) (int64, error) {
	var ret int64
	args := make([][]byte, len(params)+2)
	args[0] = []byte("BITCOUNT")
	args[1] = []byte(key)
	for i := range params {
		args[2+i] = to.Bytes(params[i])
	}
	err := c.command(&ret, args...)
	return ret, err
}
func (c *Client) BitOp(op string, dest string, keys ...string) (int64, error) {
	var ret int64
	args := make([][]byte, len(keys)+3)
	args[0] = []byte("BITOP")
	args[1] = []byte(op)
	args[2] = []byte(dest)
	for i := range keys {
		args[3+i] = to.Bytes(keys[i])
	}
	err := c.command(&ret, args...)
	return ret, err
}