前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RedisTemplate读取slowlog

RedisTemplate读取slowlog

作者头像
code4it
发布2018-09-17 17:28:25
7700
发布2018-09-17 17:28:25
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要研究一下如何使用RedisTemplate(lettuce类库)读取slowlog

maven

代码语言:javascript
复制
        <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>

redisAsyncCommands.slowlogGet

代码语言:javascript
复制
    @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);
    }
  • 这里使用lettuce的redisAsyncCommands的slowlogGet方法获取slowlog
  • 不过这里返回的是List,需要自己解析一下,具体详见下面的slowlog定义 slowlog @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。 doc
    • lettuce api
    • spring-data-redis command-reference
    • 这里定义了slowlog的属性,其中还定义了从lettuce接口返回的Object的解析
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • maven
  • redisAsyncCommands.slowlogGet
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档