3 个版本

使用旧的 Rust 2015

0.1.2 2015 年 8 月 23 日
0.1.1 2015 年 8 月 23 日
0.1.0 2015 年 8 月 23 日

#1557数据库接口


用于 ohmers

自定义许可

11KB
114

stal-rs

基于 Rust 的 Redis 集合代数求解器,基于 Stal.

描述

stal-rs 提供集合操作并在 Redis 中解决。

用法

stal-rs 没有依赖项。它生成一个必须由用户运行的 Redis 操作向量。

extern crate stal;

let foobar = stal::Set::Inter(vec![stal::Set::Key(b"foo".to_vec()), stal::Set::Key(b"bar".to_vec())]);
let foobar_nobaz = stal::Set::Diff(vec![foobar, stal::Set::Key(b"baz".to_vec())]);
let foobar_nobaz_andqux = stal::Set::Union(vec![stal::Set::Key(b"qux".to_vec()), foobar_nobaz]);

assert_eq!(
    stal::Stal::new("SMEMBERS".to_string(), foobar_nobaz_andqux).solve(),
    (
     vec![
         vec![b"MULTI".to_vec()],
         vec![b"SINTERSTORE".to_vec(), b"stal:2".to_vec(), b"foo".to_vec(), b"bar".to_vec()],
         vec![b"SDIFFSTORE".to_vec(), b"stal:1".to_vec(), b"stal:2".to_vec(), b"baz".to_vec()],
         vec![b"SUNIONSTORE".to_vec(), b"stal:0".to_vec(), b"qux".to_vec(), b"stal:1".to_vec()],
         vec![b"SMEMBERS".to_vec(), b"stal:0".to_vec()],
         vec![b"DEL".to_vec(), b"stal:0".to_vec(), b"stal:1".to_vec(), b"stal:2".to_vec()],
         vec![b"EXEC".to_vec()],
     ],
     4
    ));

stal-rs 将内部调用转换为 SUNIONSDIFFSINTER,并转换为 SDIFFSTORESINTERSTORESUNIONSTORE 以执行底层操作,并负责生成和删除任何临时键。

最外层的命令可以是任何集合操作,例如

extern crate stal;
let myset = stal::Set::Key(b"my set".to_vec());
stal::Stal::new("SCARD".to_string(), myset).solve();

如果您想预览 Stal 将发送以生成结果的命令,您可以使用 Stal.explain

extern crate stal;

assert_eq!(
stal::Stal::new("SMEMBERS".to_string(),
        stal::Set::Inter(vec![
            stal::Set::Union(vec![
                stal::Set::Key(b"foo".to_vec()),
                stal::Set::Key(b"bar".to_vec()),
                ]),
            stal::Set::Key(b"baz".to_vec()),
            ])
        ).explain(),
vec![
    vec![b"SUNIONSTORE".to_vec(), b"stal:1".to_vec(), b"foo".to_vec(), b"bar".to_vec()],
    vec![b"SINTERSTORE".to_vec(), b"stal:0".to_vec(), b"stal:1".to_vec(), b"baz".to_vec()],
    vec![b"SMEMBERS".to_vec(), b"stal:0".to_vec()],
]
)

所有命令都包装在一个 MULTI/EXEC 事务中。

安装

[dependencies]
stal = "0.1.0"

无运行时依赖