这是redis,管道的功能。以前使用它,但今天我测试这个功能。它不起作用。
public List<Object> hgetpipeline(List<String> keys) {
List<Object> results = redisTemplate.executePipelined(
new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
for(int i=0; i< keys.size(); i++) {
stringRedisConn.hGetAll(keys.get(i)+"");
}
return null;
}
});
return results;
}
此行发生了一些错误
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
有错误信息
java.lang.ClassCastException:
com.sun.proxy.$Proxy219 cannot be cast to org.springframework.data.redis.connection.StringRedisConnection
主要班级的宣布
@SpringBootApplication
@EnableAsync
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
@EnableScheduling
@RestController
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
@RequestMapping("/")
public String index() {
return "Server started!";
}
}
答案 0 :(得分:0)
尝试
public List<Object> hgetpipeline(List<String> keys) {
List<Object> results = redisTemplate.executePipelined(
new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
for(int i=0; i< keys.size(); i++) {
redisTemplate.hGetAll(keys.get(i)+"");
}
return null;
}
});
return results;
}
答案 1 :(得分:0)
我认为在方法doInRedis中只使用连接而不是redisTemplate。
public List<Object> hgetpipeline(List<String> keys) {
int i = 0;
List<Object> results = redisTemplate.executePipelined(
new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
return connection.hGetAll(keys.get(i++).getBytes());
}
});
return results;
}
答案 2 :(得分:0)
您必须使用 stringRedisTemplate。 例如:
@Resource
private StringRedisTemplate stringRedisTemplate;
public List<Object> hgetpipeline(List<String> keys) {
List<Object> results = stringRedisTemplate.executePipelined(
new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
for(String key:keys)
{
stringRedisConn.get(key);
}
return null;
}
});
return results;
}