您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“springboot如何使用redis實(shí)現(xiàn)從配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“springboot如何使用redis實(shí)現(xiàn)從配置”吧!
概述
準(zhǔn)備工作
使用
springboot通常整合redis,采用的是RedisTemplate的形式,除了這種形式以外,還有另外一種形式去整合,即采用spring支持的注解進(jìn)行訪問緩存.
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數(shù)據(jù)庫索引(默認(rèn)為0) spring.redis.database=0 # Redis服務(wù)器地址 spring.redis.host=127.0.0.1 # Redis服務(wù)器連接端口 spring.redis.port=6379 # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制) spring.redis.pool.max-active=8 # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制) spring.redis.pool.max-wait=-1 # 連接池中的最大空閑連接 spring.redis.pool.max-idle=8 # 連接池中的最小空閑連接 spring.redis.pool.min-idle=0 # 連接超時(shí)時(shí)間(毫秒) 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; } }
可以看出,我們這里主要配置了兩個(gè)東西,cacheManager方法配置了一個(gè)緩存名稱,它的名字叫做thisredis,當(dāng)我們要在方法注解里面使用到它的時(shí)候,就要根據(jù)名稱進(jìn)行區(qū)分不同緩存.同時(shí)設(shè)置了緩存的過期時(shí)間.redisTemplate則是比較常見的,我們?cè)O(shè)置了RedisTemplate,因此在代碼里面,我們也可以通過@Autowired注入RedisTemplate來操作redis.
接下來就是如何使用注解啦,這一步反而是最簡(jiǎn)單的.其實(shí)只用到了兩個(gè)注解,@Cacheable和@CacheEvict.第一個(gè)注解代表從緩存中查詢指定的key,如果有,從緩存中取,不再執(zhí)行方法.如果沒有則執(zhí)
行方法,并且將方法的返回值和指定的key關(guān)聯(lián)起來,放入到緩存中.而@CacheEvict則是從緩存中清除指定的key對(duì)應(yīng)的數(shù)據(jù).使用的代碼如下:
//有參數(shù) @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刪除"); } //無參數(shù) @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表達(dá)式,可以通過方法參數(shù)產(chǎn)生可變的key(見findUser方法),也可以通過其指定在什么情況下,使用/不使用緩存(見delUser方法).
到此,相信大家對(duì)“springboot如何使用redis實(shí)現(xiàn)從配置”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。