redis - 如何将二进制值转换为Redis命令?

标签 redis rust

我想使用 [u8] 条板箱,使用以下代码调用二进制值redis-rs的Redis函数:

let _ : () = redis::cmd("...").arg("...").arg(data).query(&mut con)?;
但是,当dataVec<u8>时,会导致此错误:
the trait `redis::ToRedisArgs` is not implemented for `&std::vec::Vec<u8>`
data[u8]时出现此错误:
the trait `redis::ToRedisArgs` is not implemented for `[u8]`
当查看ToRedisArgs的文档时,Vec<T>应该有一个实现。

最佳答案

这是您的问题的可复制示例:

fn main() {
    let data: &std::vec::Vec<u8> = &Vec::new();
    let _ = redis::cmd("...").arg(data);
}
编译会导致此错误:
error[E0277]: the trait bound `&std::vec::Vec<u8>: redis::ToRedisArgs` is not satisfied
 --> src/main.rs:3:33
  |
3 |   let _ = redis::cmd("...").arg(data);
  |                                 ^^^^ the trait `redis::ToRedisArgs` is not implemented for `&std::vec::Vec<u8>`
  |
  = help: the following implementations were found:
            <std::vec::Vec<T> as redis::ToRedisArgs>
如错误消息所述,ToRedisArgs是针对Vec<T>实现的,而不是&Vec<T>实现的。为了解决这个问题,您可以克隆data以获得Vec<u8>:
fn main() {
    let data: &std::vec::Vec<u8> = &Vec::new();
    let _ = redis::cmd("...").arg(data.clone());
}
或者,您可以从向量中提取一个切片,因为ToRedisArgs是为切片实现的:
fn main() {
    let data: &std::vec::Vec<u8> = &Vec::new();
    let _ = redis::cmd("...").arg(data.as_slice());
}

关于redis - 如何将二进制值转换为Redis命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351736/

相关文章:

tcp - redis.conf 中的 "tcp-backlog"是什么

django - celery 调度错误: an integer is required

rust - 不能借用 X 作为不可变的,因为它在可变闭包中也被借用为可变的

static - 创建静态常量时出现内部编译器错误

rust - 在 Rust 中有没有办法将静态变量包含到其他文件中?

mysql - 如何确保内存消耗不随 redis 数据库的大小而缩放

linux - Redis sentinel - 如何让服务器脱离循环?

java - 从 redis SET 中获取成员是否会将所有内容都获取到内存中?

rust - 参数可变性

arrays - 尝试 const 数组中的 .find() 值时如何修复 "temporary value dropped here while still borrowed"?