请教:如何写一个这样的复读机(自动提醒,和旧信息保留)
-
假如, 我们想复读机 可以 指令查询, 指令的结果 取决于是否有 新的消息, 如果没有新的消息,复读机就返回旧的 内容。例如
甲: 天气,
复读机:晴. #(因为这是最新的结果来自网络API)
乙: 天气,
复读机:晴. #(因为还是天晴没有发生改变)
复读机:有太阳. #(复读机需要主动提醒, 因为有新的内容来自API)
乙: 天气,
复读机:有太阳. #(因为还是天晴没有发生改变)大大们这样的复读机, 需要如何造呢?
-
每次收到指令,bot都会查询API(假设API为HTTP),并记下查询者和查询结果,安排定时复查。到时间后或者有再次向API查询的指令则尝试获取更新,如果有更新,则对记录过的查询者发送更新。
这样如何?
-
由于目前的天气API多半不支持主动推送数据的更改,所以只能用缓存解决问题。
可以在第一次指令执行之后缓存结果,第二次执行直接取出结果发送;过一段时间时候缓存过期重新获取数据 -
@rainchan 目前我们知道这个天晴API是有 自动推送API 功能的, 那么设计会有改变吗?
-
@samarium150 “并记下查询者和查询结果,安排定时复查。” 这个安排定时复查 不是很符合使用场景啊 . API 会自动提醒的呢。
-
有自动推送的话就不需要判断缓存是否过期了
-
@kixeb23099 有自动提醒就按websocket类似的方法处理囖
-
来自曾经redis缓存使用的经验
cache 开两个组。一个key 缓存了每个进行过查询的用户,一个key缓存api的查询结果。每次采集或接收到api数据变更,就对缓存的所有用户主动把新的消息推出去
- 缓存用户的key要设置过期时间
- api结果的缓存可以在每次查询的时候,也可以定时刷新,但在只要触发缓存刷新,就根据你缓存过的用户推消息
如果你的天气api可以主动推送,那很好。用户查直接读缓存,缓存更新时根据缓存发用户