spring 配置 cache 缓存使用 Redis(基于注解)
2019-08-19 14:48
387 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014615041/article/details/99725835
Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存。
Spring cache是代码级的缓存,一般是使用一个ConcurrentMap,也就是说实际上还是是使用JVM的内存来缓存对象的,这势必会造成大量的内存消耗。但好处是显然的:使用方便。
Redis 作为一个缓存服务器,是内存级的缓存。它是使用单纯的内存来进行缓存。
集群环境下,每台服务器的spring cache是不同步的,这样会出问题的,spring cache只适合单机环境。
Redis是设置单独的缓存服务器,所有集群服务器统一访问redis,不会出现缓存不同步的情况。
CacheManager负责对缓存的增删改查, CacheManager的缓存的介质可配置ConcurrentMap/EhCache/Redis等,这里我用的是redis配置
Redis配置类
@Configuration public class RedisConfiguration { @Bean @ConfigurationProperties(prefix = "session.redis") protected RedisConfigVo redisConfig() { return new RedisConfigVo(); } /** * 解决redis.clients.jedis.exceptions.JedisDataException: ERR unknown command ' CONFIG ' * * @return */ @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } /** * 创建连接工厂 * * @return */ @Bean public RedisConnectionFactory connectionFactory() { RedisConfigVo configVo = redisConfig(); JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(configVo.getHost()); jedisConnectionFactory.setPort(configVo.getPort()); jedisConnectionFactory.setTimeout(configVo.getTimeout()); if (configVo.getPassword() != null && !"".equals(configVo.getPassword())) { jedisConnectionFactory.setPassword(configVo.getPassword()); } jedisConnectionFactory.setDatabase(configVo.getDatabase()); jedisConnectionFactory.setPoolConfig(poolCofig(configVo)); jedisConnectionFactory.setUsePool(true); // 初始化连接pool jedisConnectionFactory.afterPropertiesSet(); return jedisConnectionFactory; } /** * 创建连接池配置 * * @return */ private static JedisPoolConfig poolCofig(RedisConfigVo configVo) { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(configVo.getMaxIdle() > 0 ? configVo.getMaxIdle() : GenericObjectPoolConfig.DEFAULT_MAX_IDLE); jedisPoolConfig.setMinIdle(configVo.getMinIdle() > 0 ? configVo.getMinIdle() : GenericObjectPoolConfig.DEFAULT_MIN_IDLE); jedisPoolConfig.setMaxTotal(configVo.getMaxTotal() > 0 ? configVo.getMaxTotal() : GenericObjectPoolConfig.DEFAULT_MAX_TOTAL); jedisPoolConfig.setMaxWaitMillis(configVo.getMaxWaitMillis() > 0 ? configVo.getMaxWaitMillis() : GenericObjectPoolConfig.DEFAULT_MAX_WAIT_MILLIS); jedisPoolConfig.setTestOnBorrow(configVo.isTestOnBorrow()); return jedisPoolConfig; } @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); //seconds rcm.setDefaultExpiration(5 * 60L); return rcm; } }
使用@Cacheable 注解
相关文章推荐
- spring 配置 cache 缓存使用 ConcurrentMap EhCache Redis
- Redis缓存实践:自定义注解、缓存工具类、基于Spring注解@cacheable
- Spring Boot 基于注解的 Redis 缓存使用详解
- Spring Boot 基于注解的 Redis 缓存使用
- SpringBoot使用Redis做缓存,@Cacheable、@CachePut、@CacheEvict等注解的使用
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- 基于注解的Spring AOP的配置和使用
- 基于注解的Spring AOP的配置和使用--转载
- Spring基于注解的缓存配置--web应用实例
- 基于注解的Spring AOP的配置和使用--转载
- 基于注解的Spring AOP的配置和使用
- 基于注解的Spring AOP的配置和使用--转载
- Spring缓存注解@Cache,@CachePut , @CacheEvict,@CacheConfig使用
- Spring基于注解的缓存配置--EHCache AND OSCache
- Spring缓存注解@Cache,@CachePut , @CacheEvict,@CacheConfig使用
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- Spring基于注解的缓存配置
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
- 基于注解的Spring AOP的配置和使用 (顶)
- spring事物配置,声明式事务管理和基于@Transactional注解的使用