本文主要研究一下如何使用RedisTemplate(lettuce類庫
)讀取slowloghtml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.3</version> </dependency>
@Test public void testGetSlowlog(){ List<Object> slowlogs = redisTemplate.execute(new RedisCallback<List<Object>>() { @Override public List<Object> doInRedis(RedisConnection connection) throws DataAccessException { System.out.println(connection.getClass()); RedisAsyncCommands redisAsyncCommands = (RedisAsyncCommands) connection.getNativeConnection(); RedisFuture<List<Object>> future = redisAsyncCommands.slowlogGet(10); try { return future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return null; } }); List<Slowlog> result = slowlogs.stream() .map(e -> Slowlog.from(e)) .collect(Collectors.toList()); System.out.println(result); }
@Data @Builder public class Slowlog { private long id; private long timeStamp; private long executionTime; private List<String> args; @Tolerate public Slowlog() { } public static Slowlog from(Object object){ List data = (List)object; List<byte[]> args = (List<byte[]>) data.get(3); Slowlog slowlog = Slowlog.builder() .id(Long.parseLong(data.get(0).toString())) .timeStamp(Long.parseLong(data.get(1).toString())) .executionTime(Long.parseLong(data.get(2).toString())) .args(args.stream().map(e -> new String(e)).collect(Collectors.toList())) .build(); return slowlog; } }
redisTemplate並無提供現成的api來獲取slowlog,所以須要經過execute方法獲取底層的client實現,而後執行相關的操做來獲取slowlog。redis