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
将内部调用转换为 SUNION
、SDIFF
和 SINTER
,并转换为 SDIFFSTORE
、SINTERSTORE
和 SUNIONSTORE
以执行底层操作,并负责生成和删除任何临时键。
最外层的命令可以是任何集合操作,例如
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"