前端 Java Python等資源合集大放送
spring
概述數據庫
springboot一般整合redis,採用的是RedisTemplate的形式,除了這種形式之外,還有另一種形式去整合,即採用spring支持的註解進行訪問緩存 。編程
》準備工做緩存
pom.xml文件:springboot
<dependency>服務器
<groupId>redis.clients</groupId>微信
<artifactId>jedis</artifactId>app
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>RELEASE</version>
</dependency>
application.properties配置文件:
# REDIS (RedisProperties)
# Redis數據庫索引(默認爲0)
spring.redis.database=0
# Redis服務器地址
spring.redis.host=127.0.0.1
# Redis服務器鏈接端口
spring.redis.port=6379
# 鏈接池最大鏈接數(使用負值表示沒有限制)
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
Redis配置類
/**
* @author hulonghai
* redis配置類
*/
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport{
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
// 多個緩存的名稱,目前只定義了一個
rcm.setCacheNames(Arrays.asList("thisredis"));
//設置緩存過時時間(秒)
rcm.setDefaultExpiration(600);
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;
}
}
能夠看出,咱們這裏主要配置了兩個東西,cacheManager方法配置了一個緩存名稱,它的名字叫作thisredis,當咱們要在方法註解裏面使用到它的時候,就要根據名稱進行區分不一樣緩存。同時設置了緩
存的過時時間。redisTemplate則是比較常見的,咱們設置了RedisTemplate,所以在代碼裏面,咱們也能夠經過@Autowired注入RedisTemplate來操做redis.
使用
接下來就是如何使用註解啦,這一步反而是最簡單的。其實只用到了兩個註解,@Cacheable和@CacheEvict。第一個註解表明從緩存中查詢指定的key,若是有,從緩存中取,再也不執行方法。若是沒有則執
行方法,而且將方法的返回值和指定的key關聯起來,放入到緩存中。而@CacheEvict則是從緩存中清除指定的key對應的數據。使用的代碼以下:
@Cacheable(value="thisredis", key="'users_'+#id")
public User findUser(Integer id) {
User user = new User();
user.setUsername("hlhdidi");
user.setPassword("123");
user.setUid(id.longValue());
System.out.println("log4j2壞啦?");
logger.info("輸入user,用戶名:{},密碼:{}",user.getUsername(),user.getPassword());
return user;
}
@CacheEvict(value="thisredis", key="'users_'+#id",condition="#id!=1")
public void delUser(Integer id) {
// 刪除user
System.out.println("user刪除");
}
能夠看出,咱們用@Cacheable的value屬性指定具體緩存,並經過key將其放入緩存中。這裏key很是靈活,支持spring的el表達式,能夠經過方法參數產生可變的key(見findUser方法),也能夠經過其指定在
什麼狀況下,使用/不使用緩存(見delUser方法)。
本公衆號內回覆 「領取資源」, 下載各類編程資料;
以爲本文對你有幫助?請分享給更多人
關注「JAVA樂園」,提高IT技能
推薦閱讀:
更多精彩文章,請點擊下方:閱讀原文
本文分享自微信公衆號 - JAVA樂園(happyhuangjinjin88)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。