springboot使用redis實現從配置到實戰
概述
springboot通常整合redis,采用的是RedisTemplate的形式,除瞭這種形式以外,還有另外一種形式去整合,即采用spring支持的註解進行訪問緩存.
準備工作
pom.xml
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <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配置類
package cn.chenlove.config; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport{ @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.pool.max-idle}") private int maxIdle; @Value("${spring.redis.pool.max-wait}") private long maxWaitMillis; @Bean public JedisPool redisPoolFactory() { Logger.getLogger(getClass()).info("JedisPool註入成功!!"); Logger.getLogger(getClass()).info("redis地址:" + host + ":" + port); JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout); return jedisPool; } }
可以看出,我們這裡主要配置瞭兩個東西,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刪除"); } //無參數 @RequestMapping("/get") @Cacheable(value="thisredis") @ResponseBody public List<User> xx(){ return userMapper.selectAll(); } @RequestMapping("/get3") @CacheEvict(value="thisredis") @ResponseBody public String xx3(){ return "ok"; }
可以看出,我們用@Cacheable的value屬性指定具體緩存,並通過key將其放入緩存中.這裡key非常靈活,支持spring的el表達式,可以通過方法參數產生可變的key(見findUser方法),也可以通過其指定在
什麼情況下,使用/不使用緩存(見delUser方法).
Gitee碼雲:https://gitee.com/lyc96/projects
到此這篇關於springboot使用redis實現從配置到實戰的文章就介紹到這瞭,更多相關springboot使用redis 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringBoot集成redis實現分佈式鎖的示例代碼
- SpringBoot集成Redis並實現主從架構的實踐
- 使用註解實現Redis緩存功能
- SpringBoot淺析緩存機制之Redis單機緩存應用
- 一起來看看springboot集成redis的使用註解