多用户以一个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缓存
而不是整体存储
修改后整体时间缩短为2627ms,AOP缓存处理时间缩短为241ms
测试方法
linux系统硬件配置查看方法
http://blog.163.com/yang_jianli/blog/static/1619900062010391127338/
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安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- Redis和Memcache的区别总结
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析