您的位置:首页 > 数据库 > Redis

多用户以一个Map方式缓存带来的性能问题

2016-04-06 22:50 585 查看
环境

Intel(R) Xeon(R) CPU E7-4850 v3 @ 2.20GHz

CentOS release 6.4 (Final)

2.6.32-358.el6.x86_64

16335964 kB

单机下多redis服务集群

问题描述

保存用户信息相应时间过长(11861ms)。

其中调用service的save方法的方法体逻辑(保存业务表、更新ldap、同步投资理财等业务系统)共耗时1802ms,但这个save方法执行完到返回controller的时间却用了9762ms

原因

对用户等信息的CRUD操作进行了AOP拦截以更新redis缓存。而用户信息的缓存是将所有用户存储到一个HashMap中,这样用户量比较大时对redis存储和获取的序列化和反序列化比较耗时。此次测试共92,393个用户。所以上面save方法执行完后的aop方法比较耗时。

每个用户单独存redis缓存

User user = (User) RedisUtils.getObject(id);


而不是整体存储

Map<String,User> userMap =  (Map<String,User>) RedisUtils.getMap(key);


修改后整体时间缩短为2627ms,AOP缓存处理时间缩短为241ms

测试方法

long a0 = System.currentTimeMillis();
......
long ddd = System.currentTimeMillis();
spendTimeLog.warn("****************service.save前总时间:"+(ddd-a0));


linux系统硬件配置查看方法  

http://blog.163.com/yang_jianli/blog/static/1619900062010391127338/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  缓存 redis 架构设置