猿问

请教各位一个问题,求解答:缓存穿透问题跪求!

if(redis中是否存在key){ if(get(key)!=''){  返回redis数据 }}else{ 查询数据库查到了就放到redis去查不到也写到redis去key=''}这个是我解决如果一个key不存在的时候让他不去访问数据库在高并发的时候不至于挂掉
但是同时也有一个问题了如果有人恶意请求很多不存在的key那么我的内存会生成很多key=''key1=''这样的数据会占用我内存的空间针对这个要如何处理呢
慕尼黑5688855
浏览 239回答 2
2回答

人到中年有点甜

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

哔哔one

你的设计本身没问题,但是对这个问题,考虑考虑引入规则引擎或者类似风控等的系统解决了。查数据库的时候,可以加个锁,避免同一条记录的并发访问。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答