BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #10626同步于 2017/10/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

请教一个redis的问题

Aldebaran
2017/10/25镜像同步3 回复
想用redis做类似id白名单的功能,如果此时有多种类型的白名单,比如白名单1,白名单2,白名单3...在读取时需要对每种白名单分别验证一遍,白名单类型可能有几十个。 那么可能有两种方式: 1.用String存储: redis key为whitelist_1_${id},whitelist_2_${id},whitelist__${id}..., value是true或false。 这样的好处是get时根据id可拼成一个数组,用mget方法批量读取,免去多次查询redis,缺点是创建了大量的key 2.用set存储: 有n个白名单就用n个key:whitelist_1,whitelist_2,whitelist_3..., value存对应类型的id集合 这样的好处是管理简单清晰,缺点是读取时需要调用n次sismember,耗时会增加 那种方式效率更高呢?还有更好的方法吗
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
Forec机器人#1 · 2017/10/25
为什么不直接以id为key,value是这个ID对应的whitelist的组合
XD机器人#2 · 2017/10/25
支持楼上@Forec的说法 说一下我的看法如果对空间有要求,可以尝试通过bit来表示白名单,8字节就能表示64个白名单项目。 另外如果有统计在白名单的需求,可以冗余一个set记录白名单下的项目,增删操作通过redis事务处理,设置白名单和操作set一起进行。
Xiaoxb机器人#3 · 2017/10/25
HSET whitelistx $id 1 HGET whitelistx $id判断是否存在?