Closed yuikns closed 9 years ago
你说的是 zrembyscan
, 不计划增加这个命令. 目前你只能在客户端做:
keys = zscan(z);
multi_zdel(z, keys);
在贵文档中,我若设值如下:
zset a00 01 10 文档对其命名为: zset: 命令 a00: name 01: key 10 : value
我只找到zscan api如下 URL: http://ssdb.io/docs/zh_cn/php/content.html#m-zscan
说明
列出 zset 中处于区间 (key_start+score_start, score_end] 的 key-score 列表. 如果 key_start 为空, 那么对应权重值大于或者等于 score_start 的 key 将被返回. 如果 key_start 不为空, 那么对应权重值大于 score_start 的 key, 或者大于 key_start 且对应权重值等于 score_start 的 key 将被返回.
也就是说, 返回的 key 在 (key.score == score_start && key > key_start || key.score > score_start), 并且 key.score <= score_end 区间. 先判断 score_start, score_end, 然后判断 key_start.
("", ""] 表示整个区间.
参数
name - zset 的名字. key_start - score_start 对应的 key. score_start - 返回 key 的最小权重值(可能不包含, 依赖 key_start), 空字符串表示 -inf. score_end - 返回 key 的最大权重值(包含), 空字符串表示 +inf. limit - 最多返回这么多个元素.
返回值
如果出错则返回 false, 否则返回包含 key-score 的关联数组.
示例
$ssdb->zscan('z', '', 1, 100, 10);
我的理解是,假定我已经知道zset的name(也就是,我已经知道name是a00了),查询里面的key.
但现在需求是,若我只知道name的prefix(我实际上只知道name的prefix为a,而不是确定的值a00 ),我是否可以找到对应所有的zset的name?
在redis中,set中的key和zset的name是同级的,因此我scan会遍历所有的key-value中的key和所有zset的name.但在ssdb中,zset的name和key-value中的key完全不是一个系统,不知是否我太不细心,以至于没有找到对应的api.
用 zlist
多谢.是这个.
目前使用scan方法只能遍历key-value类型的key list. 但我现在需要存储一些zset,zset的数量很多,我希望能以prefix批量删除. 比如
如上是一个zset的数据集,我想要删掉所有name为a开头的.