Redis的恍惚查询在出产情形呈现严峻的机能题目
![]() Redis是一个高机能高服从的key-value存储的nosql数据库,因为数据是存储在内存中,因此会见速率很是快,因为项目涉及到数据库的查询很是多,而数据变大并不长短常频仍,以是在项目中回收Redis分管大部门MySQL的压力。 在项目中现实行使我用的Redis提供的客户端毗连器材包jedis,在项目中引入jedis.Jar即可
每当用户登录乐成之后,城市天生一个cookie,别离存在客户端和Redis数据库,cookie的key由cookie值+用户ID构成:cookie字符串+"_"+用户ID, 譬喻用户cookie为“d9fb0ea5955fcf0a2183c5076”,用户ID为 19092, 那Redis中存储的key就是 d9fb0ea5955fcf0a2183c5076_19092,最终的key-vlaue就是:
而在用户不绝的登录乐成,就不绝地发生这样的记录,久而久之,会蕴蓄出很是多的无用的key,挥霍redis的空间,也加重了redis查询的承担,因此想到行使Redis的恍惚查询来清掉无用的cookie的key 而Redis的客户端jedis操纵是通过jedis.keys(keys)来完成的,keys可以行使通配符来匹配Redis中的key 通配符声名: *: 0到恣意多个字符 eg: searchLike("test*") ?: 1个字符 好比此刻必要破除某个用户全部的无用的cookie的key,,则可以写成“ *_19092 ”
这样就可以查出全部这个用户的keys,挪用jedis提供的批量删除key的要领即可到达目标。
到这里从需求到逻辑到编码趁热打铁,简朴测试没什么题目后,就宣布到线上,因为平常网站的流量不算很是高,以是运行了几天也没产生什么非常,直到本日早上,拥有几十万粉丝的公家号发推文,推文的内容直接链接到网站,因此说刹时流量长短常高 ![]() 运行了约莫异常钟之后,运营溘然发狂的过来说网站会见很是慢,乃至呈现错误码,内心一慌,赶忙上去看日记,我了个乖乖啊,的确是吓人,error日记想流水一样蹦出来,但五一不破例都是下面图示的错误:从Redis池中获取不大毗连数,顿时上redis处事器查察,发明CPU已经达到了100%以上 ![]() 能让Redis的CPU到100%的,我想出了一下几个也许:
因为项目上线时刻已经好久,前三个也许根基都在平常查察Redis处事器机能的进程中解除去,因此很或许率是第四个,溘然想起前几天做的成果,有个恍惚查询,该不是这个题目吧?我到网站输入“Redis 恍惚查询 机能”,出来很是多关于redis恍惚查询机能急剧降落的的环境,并且提议出产情形下禁用redis的恍惚查询,于是我把恍惚查询这块营业直接注释掉,从头上线,运行了半天,再没呈现这个题目,因此可以断定就是恍惚查询搞的鬼。 【更换方案】 有题目必定是要办理的,既然恍惚查询行不通的,那就得想此外步伐到达目标,想到Redis有Set这这种存储布局,因此可以把用户的全部cookie key都放到一个用户专属的Set中,每次用户登录乐成之后,都把之前Set里的cookie key破除,然后再把最新的key放进去,这样就可以到达同样的目标了。 【责任编辑:庞桂玉 TEL:(010)68476606】 点赞 0, (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |