资讯专栏INFORMATION COLUMN

[case36]RedisTemplate读取slowlog

Sanchi / 2605人阅读

摘要:序本文主要研究一下如何使用类库读取这里使用的的方法获取不过这里返回的是,需要自己解析一下,具体详见下面的定义这里定义了的属性,其中还定义了从接口返回的的解析小结并没有提供现成的来获取,因此需要通过方法获取底层的实现,然后执行相

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

maven
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            org.apache.commons
            commons-pool2
            2.4.3
        
redisAsyncCommands.slowlogGet
    @Test
    public void testGetSlowlog(){
        List slowlogs = redisTemplate.execute(new RedisCallback>() {
            @Override
            public List doInRedis(RedisConnection connection) throws DataAccessException {
                System.out.println(connection.getClass());
                RedisAsyncCommands redisAsyncCommands = (RedisAsyncCommands) connection.getNativeConnection();
                RedisFuture> future = redisAsyncCommands.slowlogGet(10);
                try {
                    return future.get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                return null;
            }
        });

        List 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 args;

    @Tolerate
    public Slowlog() {
    }

    public static Slowlog from(Object object){
        List data = (List)object;
        List args = (List) 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;
    }
}

这里定义了slowlog的属性,其中还定义了从lettuce接口返回的Object的解析

小结

redisTemplate并没有提供现成的api来获取slowlog,因此需要通过execute方法获取底层的client实现,然后执行相关的操作来获取slowlog。

doc

lettuce api

spring-data-redis command-reference

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36817.html

相关文章

  • SpringBoot系列教程之RedisTemplate String数据结构使用教程

    摘要:更多文章,欢迎点击一灰灰专题目前常用的存储结构有五种,字符串,列表,集合,散列,有序集合本篇则主要集中在这个数据结构的读写操作之上对于的操作,除了常见的之外,还有一些比较有特色的功能,如用于实现分布式锁的方法用于实现计数的方法位图算法的经 更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 Redis目前常用的存储结构有五种,String字符串,List列表,Set集合...

    liangdas 评论0 收藏0
  • 180611-Spring之RedisTemplate配置与使用

    showImg(https://segmentfault.com/img/remote/1460000015254542); 文章链接:https://liuyueyi.github.io/hexblog/2018/06/11/180611-Spring之RedisTemplate配置与使用/ Spring之RedisTemplate配置与使用 Spring针对Redis的使用,封装了一个比较强大...

    Hancock_Xu 评论0 收藏0
  • Redis 数据库操作、配置以及慢查询

    摘要:默认使用号数据库。清除数据库自可用。版本提供了可选项,用于将该操作另启一个线程,可以起到异步释放的效果。返回值总是返回。语法说明清空当前数据库中的所有。 Redis 提供了几个面向 Redis 数据库的操作,例如之前已经介绍过或者使用过的 DBSIZE 、SELECT 、FLUSHDB/FLUSHALL 本节将通过具体的使用场景介绍这些命令。 切换数据库 SELECT 自1.0.0可...

    时飞 评论0 收藏0
  • 一次线上redis实例cpu占用率过高问题优化

    摘要:依然是占用率爆满。我几乎肯定占用率跟这种慢查询有很大关系了。结论优化主要避免了持久化,以及频繁主从全量同步带来的性能影响。 前情提要: 最近接了大数据项目的postgresql运维,刚接过来他们的报表系统就出现高峰期访问不了的问题,报表涉及实时数据和离线数据,离线读pg,实时读redis。然后自然而然就把redis也挪到我们这边优化了 -_-! 。在这次优化过程中也是再次深刻感受到re...

    BigTomato 评论0 收藏0
  • MySQL升级5.5.36升级5.6.37

    摘要:源码升级升级的方法一般有两类利用来直接导出文件,导入到新库中,这种方法是最省事儿的,也是最保险的,缺点的话,也显而易见,大库的费时费力。缺点的话,跨版本升级不推荐这么做,比如升级到升级到等。本文采用的是第二种方法升级。 mysql源码升级 升级的方法一般有两类: 1.利用mysqldump来直接导出sql文件,导入到新库中,这种方法是最省事儿的,也是最保险的,缺点的话,也显而易见,大库...

    zhangqh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<