redis生产环境中慎用keys模糊匹配方法

Redis是一个key-value存储系统。和Memcached类似,但性能远高于memcached。现在很多大型互联网公司都在使用redis作为自己的缓存实现,但是如果没有合理使用好redis,比如频繁调用keys,info等方法,那么会出现很严重的性能问题,以下就是我的真实情况。

  首先我的系统的中使用了spring data redis中的一个redisTemplate.keys()方法,用来模糊匹配,开始在测试时,满足一切的开发功能,部署到线上后,过了大概半天,服务器出现了很高的延迟,通过aws的console观察延迟比平时高七八倍左右。boss打电话来让我查看问题出现的原因在哪里。

  首先,我观察工程的日志,看到最多的就是jedis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool这个异常,而且很多是read timeout,首先我就是加大redis.clients.jedis.JedisPoolConfig中的maxTotal属性的值,改了后问题依旧,这时我就估计是不是redis.clients.jedis.JedisPoolConfig中的maxWaitMillis属性设置小了,我这边设置的是5000,加大后还是出现上面的异常问题,百思不得其解,我登陆到redis服务器上info命令下一切都比较正常,这时我注意到了cpu比平时高很多,达到了50以上,平时都在10左右,马上用monitor命令看了一下,出现了很多keys方法调用,马上搜索了下keys的性能问题,得到很多的回答就是

  KEYS * 命令,当数据规模较大时使用,会严重影响Redis性能,也非常危险立马改掉项目中使用redisTemplate.keys()这个方法,改了后立马cpu降下来,延迟恢复正常,而且控制台中也没有read time out,connect time out 等异常信息了。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值