昨晚我们工程的redis告警,cpu占用率100%,运营人员把我们刚上线的工程给停了,后来排查是因为我们工程中使用了redis的keys命令,导致cpu占用率100%,还导致了其他系统连不上,多么痛的领悟。
根据官网对keys命令的解释发现,It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout. Don't use in your regular application code.
原文请见 http://redis.io/commands/keys
redis官网文档都说如果数据量大了,用keys命令会带来毁灭性灾难。
解决方法:
把要查询的这些redis的keys,以map的形式作为value组成一条记录放到redis中。如果这个集合中的有记录新增或者删除,用
cRedisTemplate.opsForHash().put("nationalGrid:task", taskno + ":" + mac, json);
或者
cRedisTemplate.opsForHash().delete("nationalGrid:task", tasknomac);
来刷新新增记录的value值。
参考文章:http://www.tuicool.com/articles/JrmYVzA