redis管道模式批量存取数据

redis管道模式批量存取数据

管道模式概述

java程序中,对redis操作时,会自动创建连接。如果不加特殊处理,每次操作redis,就会创建连接。当需要处理较大的数据量时,会花费大量时间创建连接,显然,效率低下。

管道模式,就是把一个连接作为管道,连接redis,在这个管道内,对redis进行操作(存取等)。就是创建一个连接,多次使用这个连接,能极大地提高生产效率。

批量存入redis

#code
// 执行管道模式,创建内部类(已知要存入的key与value:mapList)
redisTemplate.executePipelined(new RedisCallback<List>() {
// 重写doInRedis方法,内部实现代码逻辑(批量存入)
@Override
public List doInRedis(RedisConnection redisConnection) throws DataAccessException {
// 循环从mapList里取出数据,转换类型,存入redis
for (Map<String, Object> map : mapList) {
// 拼接redis里的key值 此处为一个常量+:+数字 例如:order:1
String key = RedisConstants.REDIS_HASH_KEY_NAMESPACE + “:” + map.get(RedisConstants.REDIS_HASH_ORDERID);
// 转换类型
byte[] keyByte=key.getBytes();
// 转换类型
Map<byte[], byte[]> valueByteMap=map2ByteMap(map);
// 存入redis
redisConnection.hMSet(keyByte,valueByteMap);
}
// 此处不能按照solar规范更改,固定写法,必须返回null,更改将使程序不可用!
return null;
}
});

批量取出redis

#code
// 执行管道模式,创建内部类(已知redis中key:keyList)
List orderCacheVOList =redisTemplate.executePipelined(new RedisCallback() {
// 重写doInRedis方法,内部实现代码逻辑(批量取出)
@Override
public OrderCacheVO doInRedis(RedisConnection connection) throws DataAccessException {
// 循环取出key,然后从redis里根据key值取出value,将自动装入orderCacheVOList
for (String key : keyList) {
// 根据key值从redis中取出value
connection.hGetAll(key.getBytes());
}
// 此处不能按照solar规范更改,固定写法,必须返回null,更改将使程序不可用!
return null;
}
});

总结:

1.在需要用到管道模式时,直接执行redisTemplate.executePipelined创建内部类,在内部类里实现代码逻辑。
2.此处执行的hMSet方法进行存入,需要将key与value都转换成byte数组, hGetALL方法进行取出,需要将key转换成byte数组,取出来的value也是hash类型,需要将其转换成其他的实体类方可正常使用。也可以执行其他方法,只需注意key与value的类型。
这段代码可将hash转换成OrderCacheVO

OrderCacheVO orderCacheVO=JSON.parseObject(JSON.toJSONString(object),OrderCacheVO.class);

3.return null;// 此处不能按照solar规范更改,固定写法,必须返回null,更改将使程序不可用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值