求教:redis缓存策略缓存时间和缓存数据分离问题

Try2Rich4U 2018-07-17 09:12:35
公司项目使用到了redis,我心想是简单的存取,没有考虑缓存雪崩这样的问题。

在膜拜别人的博文的时候发现一个将缓存时间和缓存数据分离的方法。

大致是:
1.在去redis缓存服务器当中取数据的时候是先去取 【缓存时间】(key-time)中的数据
2.如果数据不存在或者怎么怎么样再去取【缓存数据】(key-data)当中的数据
假装补充】在取【缓存时间】数据的时候去数据库查询,设置最大连接时长,在这段时间内先取出【缓存数据】中的数据返回,并在从数据库查出对应数据之后更新到【缓存数据】当中

========================================================
迷惑的地方:
1.究竟什么是【缓存时间】、【缓存数据】
是否类似于redisTemplate.opsvalue.set(key,data,times,times_unit)中的times+time_unit缓存时长和data存储数据
2.工作流程具体是什么?
3.应当怎么做(可以的话麻烦批上示例代码)


没明白我意思的答主可以看下我去学习的博文
https://blog.csdn.net/Jin_Kwok/article/details/80099029

谢谢!
...全文
502 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-07-20
  • 打赏
  • 举报
回复
如果业务量不会到造成缓存雪崩的程度的话,建议简单的存取就可以了。
设计是根据业务来的,无端加上复杂的设计会使系统变得更糟糕。
Try2Rich4U 2018-07-20
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
他说的已经很清楚了,当然这只是一个方案,避免雪崩只要超时时间不凑一块就行了
但你貌似理解错误,重点在于失效时间和实际缓存值分离,实际缓存值是没有失效时间的(或者可以考虑失效时间比分离的失效时间长,更健壮一些)
当然这种方案只是缓解,而不是解决问题,或者说大多数性能调优方案都是缓解,更大并发依然会存在雪崩的场景,但说实话,绝大多数公司的产品连你说的那个雪崩都很难达到...



刚才按错了没有吧想说的说完,接着上面,顺便附一个图

1.黑色的就是我刚才表述的样子,但是这样好像会存在一种问题,就是在我有时效的失效之后,我的第二个数据就会一直保存在里面占用存储空间,造成资源浪费

2.就是我第二种理解,我在存储的时候就直接存储两个,使用同样的加密方式加入不同的盐获取的两个key值,然后设置不同的保存时长,在我时效较短的key失效之后,我去读取时效较长的key中的值,然后进行处理,在取第二个key的过程当中,我去数据库查询出最新的数据,然后再同步锁当中存入到redis里面
存储到redis的过程就类似于下面这种
Try2Rich4U 2018-07-20
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
他说的已经很清楚了,当然这只是一个方案,避免雪崩只要超时时间不凑一块就行了
但你貌似理解错误,重点在于失效时间和实际缓存值分离,实际缓存值是没有失效时间的(或者可以考虑失效时间比分离的失效时间长,更健壮一些)
当然这种方案只是缓解,而不是解决问题,或者说大多数性能调优方案都是缓解,更大并发依然会存在雪崩的场景,但说实话,绝大多数公司的产品连你说的那个雪崩都很难达到...


就是说实际缓存的值不存在失效时间,我用一个有实效时间的key保存的数据(value),其实是这个不存在失效时间的值得key是嘛
maradona1984 2018-07-18
  • 打赏
  • 举报
回复
他说的已经很清楚了,当然这只是一个方案,避免雪崩只要超时时间不凑一块就行了
但你貌似理解错误,重点在于失效时间和实际缓存值分离,实际缓存值是没有失效时间的(或者可以考虑失效时间比分离的失效时间长,更健壮一些)
当然这种方案只是缓解,而不是解决问题,或者说大多数性能调优方案都是缓解,更大并发依然会存在雪崩的场景,但说实话,绝大多数公司的产品连你说的那个雪崩都很难达到...

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧