记录一次redis rdb爆满,导致服务器崩溃
先谈一下我使用到redis的业务:需要预先将数据库成绩缓存到redis中,数据也不大,二万多条记录,但是到了期末,学生查成绩那是疯狂啊,小服务器的数据库承载不了怎么多访问。刚开始,将数据写入缓存发现很慢很慢,因为服务器是虚拟机而数据库在物理机上,以为是通信问题,用了管道技术Jedis jedis = JedisUtil.getJedis();Pipeline pi...
·
先谈一下我使用到redis的业务:需要预先将数据库成绩缓存到redis中,数据也不大,二万多条记录,但是到了期末,学生查成绩那是疯狂啊,小服务器的数据库承载不了怎么多访问。刚开始,将数据写入缓存发现很慢很慢,因为服务器是虚拟机而数据库在物理机上,以为是通信问题,用了管道技术
Jedis jedis = JedisUtil.getJedis();
Pipeline pipeline = jedis.pipelined();
for(Map.Entry<String, Object> entry : map.entrySet()){
pipeline.set(entry.getKey(), JSONArray.toJSONString(entry.getValue()));
// pipeline.expire(entry.getKey(), 60*60*5); //缓存 5个小时
}
pipeline.sync();
JedisUtil.close(jedis);
发现问题依然没解决,然后线上小程序突然就崩溃了,顿时有点慌,然后去看redis日志大概报错日志就是RDB满了 ,我顿时进入redis.cil客户端查看 输入info 查看redis内存,发现17G的内存都满了,才2万多条记录不至于吧。
最后发现是 代码问题,set进去的数据呈几何式增长。
唉,大意了。。。
说一下这次的解决思路:
1.首先发现写入数据很慢, 采用了redis Pipeline技术没有解决
2.发现内存爆满,set进去的数据有问题,修改代码逻辑即可
更多推荐
已为社区贡献2条内容
所有评论(0)