cd /home/wxp/opt/redis-stable/src
redis-server
- 2.项目相关 2.1. 配置RedisConfig 类 和 配置文件
application.properties 文件
# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
@Configuration
@EnableCaching
public class RedisConfig {
private org.slf4j.Logger log = LoggerFactory
.getLogger(RedisConfig.class);
//自定义缓存key生成策略
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
System.out.println(sb.toString());
return sb.toString();
}
};
}
//缓存管理器
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
//rcm.setDefaultExpiration(60);//秒
return rcm;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
- 2.2在service 中添加 redis 注解 @CacheConfig(cacheNames = "users"): 整个类的全局缓存名称 @Cacheable 会在其被调用后将返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。 @CachePut 标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。 @CacheEvict 用来标注在需要清除缓存元素的方法或类上的。 以上注解包含了 key ,value, condition 三个参数 分别表示 缓存空间名称中的KEY,缓存名称,条件 其中@CacheEvict 包含allEntries 参数,等于 true 的时候删除 此 缓存名称 下所有缓存
@Service
@CacheConfig(cacheNames = "users")
public class UserService {
@Resource
private UserMapper mapper;
@Cacheable(key ="T(String).valueOf(#userId)")
public User selectByPrimaryKey(Integer userId){
return mapper.selectByPrimaryKey( userId);
}
@CachePut(value="users",key ="T(String).valueOf(#record.userId)")
public int insert(User record){
return mapper.insert(record);
}
@CachePut(key ="T(String).valueOf(#record.userId)",condition = "#record.id != null ")
public User updateByPrimaryKey(User record){
mapper.updateByPrimaryKey(record);
System.out.println(record.toString());
return record;
}
@CacheEvict(key ="T(String).valueOf(#userId)")
public int deleteByPrimaryKey(Integer userId){
return mapper.deleteByPrimaryKey(userId);
}
}