在实际项目开发中,随着项目的需求或者用户访问量的增大,这时不得不考虑项目性能问题。其中,优化性能的方式有很多方面,从缓存方法入手,在项目中最为常见的一种方式。那么,缓存是个什么东西呢?在管理系统来看,缓存主要是对数据库查出来的数据进行保存到内存中,然后下次需要的时,直接从内存中获取出来,不需要再进行查询数据库的操作,从而节省从数据库查询数据的时间,达到优化性能效果。那么,该如何实现缓存呢?
在Spring中也提供了缓存的注解,但是主要是针对小型项目,如果在一些大型的项目中,该如何解决性能问题呢?现在主流的第三方缓存框架也有很多,都是针对一些大型项目的,其中包括Redis、Ehcache等缓存框架,下面主要针对Redis与Spring整合:
要使Spring与Redis框架整合,首先要下载相应的jar包和Redis服务端,其中与Spring整合的主要jar包和Redis的客户端、服务端如下:
jedis-2.7.2.jar
spring-data-redis-1.6.0.RELEASE.jar
要在项目中使用Redis必须启动Redis服务器(redis-server.exe),要不然使用不了,因为Redis本质就是一个非关系的数据库(Key-Value,键值对存储)。
- 创建一个属性文件redis.properties,配置redis的相关参数:
# Redis settings
#服务器ip地址
redis.host=127.0.0.1
#端口号
redis.port=6379
#服务器索引
redis.dbIndex=0
redis.expiration=3000
#最大空闲数
redis.maxIdle=300
redis.maxActive=600
#超时等待时间
redis.maxWait=1000
redis.testOnBorrow=true
- 创建KeyGenerator类,实现org.springframework.cache.interceptor.KeyGenerator接口,定义Redis中key的命名方式(类名+方法名+参数名)
package com.gx.common.utils;
import java.lang.reflect.Method;
public class KeyGenerator implements org.springframework.cache.interceptor.KeyGenerator {
@Override
public Object generate(Object o, Method method, Object... params) {
//规定 本类名+方法名+参数名 为key
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName());
sb.append("-");
sb.append(method.getName());
sb.append("-");
for (Object param : params) {
sb.append(param.toString());
}
return sb.toString();
}
}
- 创建RedisCacheConfig类,继承CachingConfigurerSupport类,自定义一些配置参数,代码如下:
package com.gx.common.utils;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
publ