作者:袋飼養員
來源:https://www.cnblogs.com/GodHeng/p/9301330.html
springboot整合jedis實現redis緩存

我們在使用springboot搭建微服務的時候,在很多時候還是需要redis的高速緩存來緩存一些數據,存儲一些高頻率訪問的數據,如果直接使用redis的話又比較麻煩,在這裏,我們使用jedis來實現redis緩存來達到高效緩存的目的,接下來,讓我們一起來使用jedis來實現redis緩存

1.在pom.xml文件中添加依賴



redis.clients
jedis
2.8.2

2. 在springboot的配置文件中加入redis的配置信息

#redis jedis配置
# Redis數據庫索引(默認爲0)
spring.redis.database=0
# Redis服務器地址
spring.redis.host=10.100.140.84
# Redis服務器連接端口
spring.redis.port=6379
# Redis服務器連接密碼(默認爲空)
#spring.redis.password=
# 連接池最大連接數(使用負值表示沒有限制)
spring.redis.pool.max-active=200
# 連接池最大阻塞等待時間(使用負值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的最大空閒連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閒連接
spring.redis.pool.min-idle=0
# 連接超時時間(毫秒)
spring.redis.timeout=0
#spring-session 使用
spring.session.store-type=none

3.創建jedis配置文件,配置文件的作用是在項目啓動的時候將jedis注入,接着我們就可以在其他類中獲取到JedisPool類的信息

@Configuration
public class JedisConfig extends CachingConfigurerSupport{
private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
/**
* SpringSession 需要注意的就是redis需要2.8以上版本,然後開啓事件通知,在redis配置文件裏面加上
* notify-keyspace-events Ex
* Keyspace notifications功能默認是關閉的(默認地,Keyspace 時間通知功能是禁用的,因爲它或多或少會使用一些CPU的資源)。
* 或是使用如下命令:
* redis-cli config set notify-keyspace-events Egx
* 如果你的Redis不是你自己維護的,比如你是使用阿里雲的Redis數據庫,你不能夠更改它的配置,那麼可以使用如下方法:在applicationContext.xml中配置
*
* @return
*/
@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-active}")
private int maxActive;
@Value("${spring.redis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.pool.max-wait}")
private long maxWaitMillis;
@Bean
public JedisPool redisPoolFactory(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisPoolConfig.setMaxTotal(maxActive);
jedisPoolConfig.setMinIdle(minIdle);
JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout,null);
logger.info("JedisPool注入成功!");
logger.info("redis地址:" + host + ":" + port);
return jedisPool;
}
}

接下來,我們啓動項目,gogogo

springboot整合jedis實現redis緩存

Jedis注入成功了!!!

然後我們可以定義一個工具類,用於對redis進行各種操作

springboot整合jedis實現redis緩存

這裏我們通過@Autowired將JedisPool注入到工具類中,其他兩個是命名、序列化的類

這裏,我們列舉一下平常最常用的幾個方法

//給某個key設值
public void set(String key, Object value) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
byte[] valueBytes = serializer.serializeValue(value);
client.set(keyBytes, valueBytes);
} finally {
returnJedis(client);
}

}

//根據key獲取value
public Object get(String key) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
byte[] valueBytes = client.get(keyBytes);
return serializer.deserializeValue(valueBytes);
} finally {
returnJedis(client);
}
}

//根據鍵值獲取value
public Object hashGet(String key, String field) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
byte[] fieldBytes = serializer.serializeKey(field);
byte[] valueBytes = client.hget(keyBytes, fieldBytes);
return serializer.deserializeValue(valueBytes);
} finally {
returnJedis(client);
}

}

public void hashSet(String key, String field, Object value) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
byte[] fieldBytes = serializer.serializeKey(field);
byte[] valueBytes = serializer.serializeValue(value);
client.hset(keyBytes, fieldBytes, valueBytes);
} finally {
returnJedis(client);
}

}


public Map hashAllGet(String key) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
Map map = client.hgetAll(keyBytes);
Map valueMap = Maps.newHashMap();
Set> valueSet = map.entrySet();
for (Map.Entry entry : valueSet) {
valueMap.put(serializer.deserializeKey(entry.getKey()), serializer.deserializeValue(entry.getValue()));
}
return valueMap;
} finally {
returnJedis(client);
}

}

//判斷key是否存在
public boolean existKey(String key) {
Jedis client = getJedis();
try {
byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));
return client.exists(keyBytes);
} finally {
returnJedis(client);
}
}

在該項目中,我們發送短信驗證碼後會將驗證碼存在redis中去,然後校驗的時候會判斷用戶輸入的驗證碼和緩存中的驗證碼是否一致,達到目的。

springboot整合jedis實現redis緩存

springboot整合jedis實現redis緩存

相关文章