利用Redis缓存解决ES查询延迟的问题

背景

因为ES的近实时性 所以insert和update es的数据 在短时间可能查询不到(1s左右)

参考上一篇博客https://www.cnblogs.com/ssskkk/p/15417053.html#_label0

这在开发中这是一个很头疼的问题.

解决方案

1.数据insert update到es只后 把数据放在Redis里面TTL设置3s 

2.查询数据的时候 先从redis查询,如果redis没有在查询es

解释 为什么TTL设置3s:1.因为es的延迟理论上最多3s,2.沒有解决缓存一致性的问题.

这里设置redis缓存的目的 不是为了提高查询速度(因为es的查询本来就很快)

而是为了解决es延迟

对比Redis做MySQL缓存

Redis作为MySQL的缓存时 因为需要保证缓存和DB的一致性 需要延迟双删 TTL一般8h

延迟双删: 1.删除redis缓存 2.update MySQL db, 3.sleep 1s 后在删除redis缓存

Redis作为ES缓存 是为了解决ES查询延迟的问题, 在并发情况下的缓存一致性问题并没有解决

可以用Redis的分布式缓存解决缓存一致性的问题,

但是TTL 还是设置3S 是因为设计之初 只是解决延迟问题, es查询没有问题.

 

posted @ 2023-09-04 00:06  palapala  阅读(303)  评论(0编辑  收藏  举报