[Crawler] Cache 在设计中的使用

@Ivan 提问

如果我们我们选择的方案是Redis + My SQL,假设一个简单的设计,我们有两个Server 分别连了两个Redis,然后最后连接到同一个数据库Server。对于某一数据, Server1的Redis cache里有个备份,然后Server2对这个数据做了一个写操作,那么Server1连接的redis 是怎么知道自己存的数据已经失效?这个是不同Redis之间会做沟通,还是有额外的机器专门处理?这方面 有什么资料可以学习下? 还有就是在cache的选择上是用Memcached还是Redis,有什么量化指标可以比较?比如说,我们需要在Cache-Aside+Write-Around和Read-Through+Write_Back中选择一个,他们都会有Inconsistent,前者的读写的performance 差一些,但是设计简单,我们如何能明确, 在某一个设计中应该选哪个?比如通过延迟和QPI要求可以排除Memcached?

你可以认为 Redis 是一个 Cluster. Redis 官方就有 Redis Cluster 的实现。在这种实现里用了 Master-slave,所以写总是去 Master,然后会被 Propergate 到 Slave。

在 Redis 和 Memcached 两者之间选择,一般来说 Redis 都是更好的选择,功能更加丰富,性能也足够好。

是不是可以这样理解,当用redis的时候,可以用redis cluster 去实现一个distriibute cache,redis cluster自己会去做sharding和replica。 然后我们设计的系统中的所有server都是连到一个redis cluster上?

是的,并且具体的 Sharding Key 用户可以自己定义。