先谈一下我使用到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进去的数据有问题,修改代码逻辑即可

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐