目前刚接触 Redis ,客户端用的 Python ,用于爬虫爬取的数据储存。
我准备在 redis 中用 hash 数据类型储存爬取的文章,主要结构为 artical:id 作为 key , 文章 title 文章链接 ulr 文章加入时间等作为 field 字段。
我在新插入文章的时候需要判断已有的文章里面是否已经有这篇文章了,通常通过 url 或者 title 来判断,但是我目前除了逐个遍历 key 然后逐个遍历其 title 字段来判断感觉很不合理,请问有没有其他操作方式,谢谢。
1
MiskoLee 2016-01-14 09:37:22 +08:00 1
首先,你得有索引的概念。
通常的,在你的设计中, url 与 title 的概念其实对应的是数据库理论中的唯一键,我们都知道 MYSQL 要做到某个字段唯一,那么需要添加 unique index 索引。 redis 作为一个非完全的数据库,是没有完整的数据库理论中的这些概念,这就要求我们自己来实现。 redis 实现一个索引也是简单的。按照题主的需求,我们完全可以构建这样的索引: artical:index:url:${url} id url 索引 artical:index:title:${title} id title 索引 aritical:index 为索引前缀 :url :title 为索引名 ${url} ${title} 为索引值 id 对应 artical:id 的值 然后我们可以用 url > title 的优先级顺序来做索引查询。 在 redis 这个特例中,为了解决原子性的问题,我们需要使用 pipeline 模式来模拟事务。 |
2
xiamingchong 2016-01-14 09:40:50 +08:00
将所有的标题放到 set 里,用 SISMEMBER 来判断是否存在
|
3
Zuckonit 2016-01-14 09:42:21 +08:00
楼上说的很详细。简单说一下: nosql 里面查询必然没有 mysql 灵活, nosql 查询只认一个东西 key 。把查询条件映射到 key 即可。
|
4
MiskoLee 2016-01-14 10:04:11 +08:00
|
5
xiamingchong 2016-01-14 12:19:15 +08:00
@MiskoLee 那就用一楼的方法好了
|