为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:缓存穿透问题各位有什么建议?

有没有童鞋遇到过同样的问题:缓存穿透问题各位有什么建议?

交互式爱情 2019-10-08 11:57:00
if(redis中是否存在key){ if(get(key)!=''){  返回redis数据 }}else{ 查询数据库查到了就放到redis去查不到也写到redis去key=''}这个是我解决如果一个key不存在的时候让他不去访问数据库在高并发的时候不至于挂掉但是同时也有一个问题了如果有人恶意请求很多不存在的key那么我的内存会生成很多key=''key1=''这样的数据会占用我内存的空间针对这个要如何处理呢
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

按你的描述,猜测你将不存在的key也写入缓存是想要减少对无效数据查询数据库的次数。这个可以使用一定的规则,对key进行验证。比如一个32位字符串,你加入一定的校验机制,即使是一个比较简单的校验都能帮你过滤很大一部分无效的key。另外可以将所有的无效key放在一个redis的hash当中。这个hash设置一个比较合理的过期时间,这样可以相对控制无效key的大小
                            
查看完整回答
反对 回复 2019-10-08
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

你的设计本身没问题,但是对这个问题,考虑考虑引入规则引擎或者类似风控等的系统解决了。查数据库的时候,可以加个锁,避免同一条记录的并发访问。
                            
查看完整回答
反对 回复 2019-10-08
  • 2 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信