频繁变化的数据如何有效的缓存?(redis,memcached)

机票航班信息是从第三方接口查询获得的(收费,且速度比较慢.),我们会将用户的查询结果缓存起来,降低成本,加快页面响应速度。
查询的条件有: 出发机场 目的地机场 准备预定的日期
返回结果有: 可预定的座位,价格,及其他信息XML
困惑的地方来了:
1.数据的过期时间多长合适? 长期的过期时间设置比较合理?

2.缓存的更新机制该怎么做?

1.数据的过期时间多长合适? 长期的过期时间设置比较合理?
题主描述的是频繁变化的数据,那就假设调用第三方接口的频率为1s/次,看起来貌似用不着缓存。但题注强调了这个接口很慢,猜想应该是在业务里同步调用这个接口来更新数据,并且写入缓存的。那解决方案如第一个答案一样,缓存数据不要设置过期时间,在线业务只从缓存读取数据,数据的同步交给离线脚本异步来做,这样就消除了第三方接口对在线业务的影响,可以很快的返回数据了。
2.缓存的更新机制该怎么做?
缓存的更新就是异步离线脚本,定时轮询API,获取新数据,存入缓存,只是这里需要记录需要更新数据的航班,毕竟不是所有航班都有人访问。
题主提到该接口收费,即希望尽可能少的调用,可以在业务端有人访问某个航班的时候做个记录,并且在数据同步脚本仅对有记录的且T时间内没有同步过数据的航班进行数据同步,T是航班同步间隔,自己根据业务来。

让第三方接口查询在后台操作,比如用crontab在后台定时取第三方接口数据,存储取到的数据到自己数据库或cache;如果要求实时性很高,crontable时间设置短一点。

作者:李波
链接:https://www.zhihu.com/question/22414215/answer/123868319
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(频繁变化的数据如何有效的缓存?(redis,memcached))