redis抢购实现关键代码
2016-08-09 11:33
453 查看
在使用redis的时候如果redisTemplate.execute方法执行多条redis命令,则会出现资源无法释放的问题,如果改成redisTemplate.executePipelined则不会出现;
阅读更多
/**
* 更新用户信息并将股票余数减1
*
* @param ppkey
* 队列key:set+mobile
* @param upkey
* 股票余数
* @param rushuser
* @return
*/
protected boolean updateUserAndDecrStock(final String ppkey, final String upkey, final RushUser rushuser) {
boolean flag = false;
try {
redisTemplate.executePipelined(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
byte[] upkeyb = redisTemplate.getStringSerializer().serialize(upkey);
byte[] stockKey = redisTemplate.getStringSerializer().serialize(RedisCounterEnum.STOCK_COUNT.getCounterName());// 股权证编号(抢购成功时记录,从1开始递增)
byte[] ppkeyb = redisTemplate.getStringSerializer().serialize(ppkey);
connection.watch(upkeyb, stockKey);
connection.multi();
Object counter = redisTemplate.opsForValue().get(upkey);
Object stockNoObject = redisTemplate.opsForValue().get(RedisCounterEnum.STOCK_COUNT.getCounterName());
int count = Integer.valueOf(counter == null ? "0" : counter.toString());
int stock = Integer.valueOf(stockNoObject == null ? "0" : stockNoObject.toString());
if (count > 0) {
connection.decr(upkeyb);
String stockNo = (stock + 1) + "";
rushuser.setStockno(stockNo);// 设置股权证编号
String value = ZGUtil.objectToJson(rushuser);
connection.set(stockKey, redisTemplate.getStringSerializer().serialize(stockNo));
connection.set(ppkeyb, redisTemplate.getStringSerializer().serialize(value));
}
connection.exec();
return null;
}
});
flag = true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
flag = false;
}
return flag;
}
相关文章推荐
- redis3.0.0 集群安装详细步骤及jedis连接redis集群代码实现
- session 加入redis的实现代码
- [Cordova]JS和Native交互实现关键代码(iOS)
- Java实现Redis持久化到数据库的关键方法
- redis实现高并发下的抢购/秒杀功能
- 一步步实现滑动验证码,Java图片处理关键代码
- php结合redis实现高并发下的抢购、秒杀功能 (转载)
- redis集群环境搭建以及java中jedis客户端集群代码实现
- 仿 google 搜索框功能的实现关键代码
- php结合redis实现高并发下的抢购、秒杀功能
- 拓扑排序 关键路径的代码实现
- php结合redis实现高并发下的抢购、秒杀功能的实例
- Redis订阅&发布以及python代码实现
- Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路
- LZO词典压缩器实现(关键代码)
- php结合redis实现高并发下的抢购、秒杀功能
- redis发布订阅java代码实现
- redis事务处理抢购简单代码(已验证)
- C++实现关键路径的查找(代码)
- php结合redis实现高并发下的抢购、秒杀功能