【Java】使用动态代理输出RedisTemplate命令执行日志

本文介绍如何利用Java动态代理技术,在执行RedisTemplate的get/set/pExpire等命令时,自动记录命令执行的日志,包括命令名称、参数和返回值,有助于调试和监控Redis操作。
摘要由CSDN通过智能技术生成

文章目录

一. 说明

  1. 功能:在 redisTemplate 命令执行前后 输出日志

  2. 原理

  1. 作用是输出 RedisTemplate 命令执行日志。包括:命令名称、参数、返回值等
  2. 原理是使用动态代理拦截类 redisConnectionFactory 的 getConnection() 方法,监控Redis命令
  3. 目前主要输出 get/set/pExpire/pSetEx 等命令日志,可根据需要扩展
  1. 示例
  • 单元测试
@Test
public void RedisTemplateTest() {
   

    String key = "testTemplate:1";

    this.redisTemplate.opsForValue().set(key, "testTemplatevalue1", 1000L, TimeUnit.MILLISECONDS);

    String value = this.redisTemplate.opsForValue().get(key);

}
  • 日志输出
// 输出日志
// 参数分别为:key、超时时间、value
Redis Log: method:pSetEx params:["testTemplate:1","1000","testTemplatevalue1"] result:

// 参数分别为:key 返回结果:result
Redis Log: method:get params:["testTemplate:1"] result:testTemplatevalue1

二. 源码

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.lang.reflect.Method;

// https://blog.csdn.net/youbl/article/details/109266634
// https://github.com/youbl/study/tree/master/demo-log-redis

/**
 * 本类的作用是输出 RedisTemplate 命令执行日志。包括:命令名称、参数、返回值等
 * 原理是使用动态代理拦截类 redisConnectionFactory 的 getConnection() 方法,监控Redis命令
 * 目前主要输出 get/set/pExpire/pSetEx 等命令日志,可根据需要扩展
 */
@Configuration
@Slf4j
public class RedisCommandLogBean implements BeanPostProcessor 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值