解决Spring Data Redis Pipeline执行hGet返回null的问题
我来帮你搞定这个Pipeline里hGet返回null的问题!先从几个常见的坑入手排查:
1. 缺少Hash Field参数(最容易忽略的点)
Redis的HGET命令需要两个核心参数:key 和 对应的field,但你的代码里只传了key,这明显不符合命令要求!Spring Data Redis的RedisConnection.hGet()方法签名是:
byte[] hGet(byte[] key, byte[] field);
如果只传一个key,要么编译报错,要么实际执行的命令不完整,自然返回null。
修复方式:补充field参数,并且要和RedisTemplate的序列化器匹配(比如如果用String序列化,就把field转成对应byte[]):
getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
// 用RedisTemplate的序列化器把字符串转成byte[]
byte[] keyBytes = getRedisTemplate().getKeySerializer().serialize("your-target-key");
byte[] fieldBytes = getRedisTemplate().getHashKeySerializer().serialize("your-target-field");
connection.hGet(keyBytes, fieldBytes);
return null; // Pipeline中这个返回值会被Spring忽略,结果由executePipelined方法返回
}
});
2. 没有接收executePipelined的返回结果
你可能误以为RedisCallback的返回值是hGet的结果,但实际上executePipelined()方法的返回值List