需要用到的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
ava通过Jedis类库连接操作Redis
<aop:aspectj-autoproxy/>
<context:annotation-config/>
<context:component-scan base-package="com.ketai.liudun"/>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive" value="20"></property>
<property name="maxIdle" value="10"></property>
<property name="maxWait" value="1000"></property>
<property name="testOnBorrow" value="true"></property>
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg index="1" value="127.0.0.1" />
<constructor-arg index="2" value="6379" />
<!-- timeout -->
<constructor-arg index="3" value="2000" />
<!-- password -->
<constructor-arg index="4" value="IT_training_CZKT_is_Best!" />
</bean>
<import resource="spring-mybatis.xml"/>
配置AOP切面
/** * 更新的时候添加切入点(update) */ @Pointcut("execution(* com.ketai.liudun.service..*Service.update*(com.ketai.liudun.entity.User))") public void updateCachePointcut(){} @Around("updateCachePointcut()") public int updatearound(ProceedingJoinPoint joinPoint){ //先获取目标方法参数 User user= null; Object[] args = joinPoint.getArgs(); if (args != null && args.length > 0) { user = (User)args[0]; } //得到一个具有唯一性的缓存key String redisKey = getRedisKey(joinPoint, user.getUserId().toString()); log.debug("进入环绕增强前半部分,尝试从redis查询,生成的缓存key:"+redisKey); //根据key获取从redis中查询到的对象 Object data = redisCache.getFromCache(redisKey); //如果查询到了执行更新操作 if(null != data){ log.debug("["+redisKey+"]】更新:"+data); redisCache.save(redisKey,user); log.debug("从redis覆盖已存在的数据,并更新到数据库..."+data); } //没有查到,那么查询数据库 try { joinPoint.proceed();//执行目标方法(service中的update*方法) } catch (Throwable e) { e.printStackTrace(); return 0; } //后置:无 //将查询到的数据返回 return 1; }
Test部分
@Test
public void testUpdateUser() {
User u = userService.findUser(1);//先获取到用户
u.setUserName("姓名");//修改数据
int i = userService.updateUser(u);//调用更新,会自动调用AOP配置的透明缓存
assertNotNull(i);//检测结果
System.out.println("更新成功"+i);
}