程序对批量数据写入数据库的优化--引入Redis并通过定时器来触发
2016-03-15 16:40
661 查看
没错,还是上篇文章提到的那个SpringMVC+Mybatis的项目,在客户调我方接口,疯狂的给我们insert数据的时候,应该想到一些优化方案,于是Redis就被引用了。
关于Redis的客户端,服务端的一些用法引用了这篇微博http://blog.csdn.net/joyhen/article/details/47358999,这里我就不搬砖了,这个微博写的也算中规中矩,如果你不笨的话完全是可以搞定的。
我详细来讲一下程序里的调用好了。
这是一个Maven项目,于是在pom.xml里增加一下dependency,Spring.xml的配置就不上图了
这样,我们的redisson的jar包就有了,然后进行简单的调用,封装一个固定的方法,便于后期的维护。然后调用Redis时候只需 Redisson redisson =RedisConnect.connect();就可以
个人的一个肤浅的看法(勿喷,刚接触Redis,还没有高级点儿的理解):Redis就是一个放在内存或者说是缓存上的一个Map,通过<key,Value>来维护。于是就有了下面的写法:当controler传过来一个对象的时候,可以将对象的未来的主键作为Key,然后将对象转换成JSON放到Value中,期间我试过将对象作为Value放到map里,但是在我本地的windows系统下自己搭建的Redis服务器测试是没问题的,但是放到公司的Linux服务器上,如果在定时器处理时,如果没有插入到表里,map会无理由的将这条记录移出去,如果有同仁知道原因希望跟我联系。所以我选择了json格式,这样在服务器上是没有问题的。
然后看一下取数据的代码:
这样就可以通过定时器来定时出发这个方法,减少数据库连接池的压力,同时也提高效率。至于定时器,我想如果有空的话我写一个定时器的专栏,然后自己也试试不同的方法来实现
关于Redis的客户端,服务端的一些用法引用了这篇微博http://blog.csdn.net/joyhen/article/details/47358999,这里我就不搬砖了,这个微博写的也算中规中矩,如果你不笨的话完全是可以搞定的。
我详细来讲一下程序里的调用好了。
这是一个Maven项目,于是在pom.xml里增加一下dependency,Spring.xml的配置就不上图了
1 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>1.0.2</version> </dependency>
这样,我们的redisson的jar包就有了,然后进行简单的调用,封装一个固定的方法,便于后期的维护。然后调用Redis时候只需 Redisson redisson =RedisConnect.connect();就可以
public static final String CONF_RESOURCE = "resource"; public static final String redis_address = Resources.instance(CONF_RESOURCE).getAttributeValue("redis_address");//redis服务IP public static final String redis_password = Resources.instance(CONF_RESOURCE).getAttributeValue("redis_password");//redis密码 public static final Redisson connect(){ Config config = new Config(); config.setConnectionPoolSize(10); config.addAddress(redis_address); config.setPassword(redis_password); Redisson redisson = Redisson.create(config); return redisson; }
个人的一个肤浅的看法(勿喷,刚接触Redis,还没有高级点儿的理解):Redis就是一个放在内存或者说是缓存上的一个Map,通过<key,Value>来维护。于是就有了下面的写法:当controler传过来一个对象的时候,可以将对象的未来的主键作为Key,然后将对象转换成JSON放到Value中,期间我试过将对象作为Value放到map里,但是在我本地的windows系统下自己搭建的Redis服务器测试是没问题的,但是放到公司的Linux服务器上,如果在定时器处理时,如果没有插入到表里,map会无理由的将这条记录移出去,如果有同仁知道原因希望跟我联系。所以我选择了json格式,这样在服务器上是没有问题的。
public void redisAdd(Order order) { Redisson redisson =RedisConnect.connect(); ConcurrentMap<String,Object> newMap = redisson.getMap("newMap"); order.setPushCount(0); String params = FastJsonUtil.toJSONString(order); newMap.put(order.getOrderNo(), params); // 关闭连接 redisson.shutdown(); }
然后看一下取数据的代码:
Redisson redisson = RedisConnect.connect(); ConcurrentMap<String,Object> newMap = redisson.getMap("newMap"); Set<String> mapKey= newMap.keySet(); for(String orderNo : mapKey){ params = (String)newMap.get(orderNo); order = JSONObject.parseObject(params, Order.class); orderService.add(order); 9 newMap.remove(orderNo);//保存成功后将该条记录从map中删除 } redisson.shutdown();//关闭redis
这样就可以通过定时器来定时出发这个方法,减少数据库连接池的压力,同时也提高效率。至于定时器,我想如果有空的话我写一个定时器的专栏,然后自己也试试不同的方法来实现
相关文章推荐
- redis学习笔记1--安装、启动、关闭
- 10 个 Redis 建议/技巧
- Redis集群方案及实现
- Linux安装redis
- 初学Redis(3)——用Redis作为Mysql数据库的缓存
- 初学Redis(4)——简单实现Redis缓存中的排序功能
- 认识Redis
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- Linux下安装Redis
- Redis Sentinel 机制与用法(二)
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
- windows安装redis
- redis
- 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题
- 美团在Redis上踩过的一些坑-4.redis内存使用优化
- 美团在Redis上踩过的一些坑-3.redis内存占用飙升
- 美团在Redis上踩过的一些坑-2.bgrewriteaof问题
- 美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout
- 使用spring redisTemplate.getValueSerializer()遇到的问题
- redis