SpringBoot整合Redis實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)緩存的示例代碼
我們以IDEA + SpringBoot作為 Java中整合Redis的使用 的測試環(huán)境
首先,我們需要導(dǎo)入Redis的maven依賴
<!-- Redis的maven依賴包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
其次,我們需要在配置文件中配置你的Redis配置信息,我使用的是 .yml文件格式
# redis配置
spring:
redis:
# r服務(wù)器地址
host: 127.0.0.1
# 服務(wù)器端口
port: 6379
# 數(shù)據(jù)庫索引(默認(rèn)0)
database: 0
# 連接超時(shí)時(shí)間(毫秒)
timeout: 10s
jedis:
pool:
# 連接池中的最大空閑連接數(shù)
max-idle: 8
# 連接池中的最小空閑連接數(shù)
min-idle: 0
# 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
max-active: 8
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
max-wait: -1對(duì) redis 做自定義配置
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {
/**
* redisTemplate 序列化使用的jdkSerializeable, 存儲(chǔ)二進(jìn)制字節(jié)碼, 所以自定義序列化類
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
// 設(shè)置序列化
Jackson2JsonRedisSerializer<Object> redisSerializer = getRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// value序列化
redisTemplate.setValueSerializer(redisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
// Hash value序列化
redisTemplate.setHashValueSerializer(redisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 設(shè)置Jackson序列化
*/
private Jackson2JsonRedisSerializer<Object> getRedisSerializer() {
Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
redisSerializer.setObjectMapper(om);
return redisSerializer;
}
}
然后,我們需要?jiǎng)?chuàng)建一個(gè)RedisUtil來對(duì)Redis數(shù)據(jù)庫進(jìn)行操作
package com.zyxx.test.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
/**
* @ClassName RedisUtil
* @Author
* @Date 2019-08-03 17:29:29
* @Version 1.0
**/
@Component
public class RedisUtil {
@Autowired
private RedisTemplate<String, String> template;
/**
* 讀取數(shù)據(jù)
*
* @param key
* @return
*/
public String get(final String key) {
return template.opsForValue().get(key);
}
/**
* 寫入數(shù)據(jù)
*/
public boolean set(final String key, String value) {
boolean res = false;
try {
template.opsForValue().set(key, value);
res = true;
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 根據(jù)key更新數(shù)據(jù)
*/
public boolean update(final String key, String value) {
boolean res = false;
try {
template.opsForValue().getAndSet(key, value);
res = true;
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 根據(jù)key刪除數(shù)據(jù)
*/
public boolean del(final String key) {
boolean res = false;
try {
template.delete(key);
res = true;
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 是否存在key
*/
public boolean hasKey(final String key) {
boolean res = false;
try {
res = template.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 給指定的key設(shè)置存活時(shí)間
* 默認(rèn)為-1,表示永久不失效
*/
public boolean setExpire(final String key, long seconds) {
boolean res = false;
try {
if (0 < seconds) {
res = template.expire(key, seconds, TimeUnit.SECONDS);
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 獲取指定key的剩余存活時(shí)間
* 默認(rèn)為-1,表示永久不失效,-2表示該key不存在
*/
public long getExpire(final String key) {
long res = 0;
try {
res = template.getExpire(key, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
* 移除指定key的有效時(shí)間
* 當(dāng)key的有效時(shí)間為-1即永久不失效和當(dāng)key不存在時(shí)返回false,否則返回true
*/
public boolean persist(final String key) {
boolean res = false;
try {
res = template.persist(key);
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
}
最后,我們可以使用單元測試來檢測我們?cè)赗edisUtil中寫的操作Redis數(shù)據(jù)庫的方法
package com.zyxx.test;
import com.zyxx.test.utils.RedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTest {
@Resource
private RedisUtil redisUtil;
@Test
public void setRedis() {
boolean res = redisUtil.set("jay", "周杰倫 - 《以父之名》");
System.out.println(res);
}
@Test
public void getRedis() {
String res = redisUtil.get("jay");
System.out.println(res);
}
@Test
public void updateRedis() {
boolean res = redisUtil.update("jay", "周杰倫 - 《夜的第七章》");
System.out.println(res);
}
@Test
public void delRedis() {
boolean res = redisUtil.del("jay");
System.out.println(res);
}
@Test
public void hasKey() {
boolean res = redisUtil.hasKey("jay");
System.out.println(res);
}
@Test
public void expire() {
boolean res = redisUtil.setExpire("jay", 100);
System.out.println(res);
}
@Test
public void getExpire() {
long res = redisUtil.getExpire("jay");
System.out.println(res);
}
@Test
public void persist() {
boolean res = redisUtil.persist("jay");
System.out.println(res);
}
}
- 推薦使用Redis客戶端(redis-desktop-manager)來查看Redis數(shù)據(jù)庫中的數(shù)據(jù)
- 至此,我們?cè)谌粘m?xiàng)目中整合Redis的基本使用操作就完成了,但在實(shí)際項(xiàng)目中,可能會(huì)涉及到更復(fù)雜的用法,可以根據(jù)你的業(yè)務(wù)需求調(diào)整Redis的使用即可。
到此這篇關(guān)于SpringBoot中整合Redis實(shí)現(xiàn)熱點(diǎn)數(shù)據(jù)緩存的文章就介紹到這了,更多相關(guān)SpringBoot熱點(diǎn)數(shù)據(jù)緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java利用pdfbox+poi往pdf插入數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于java利用pdfbox+poi如何往pdf插入數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02
SpringBoot中properties,yml,yaml的區(qū)別及使用說明
這篇文章主要介紹了SpringBoot中properties,yml,yaml的區(qū)別及使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Spring?Boot存在路徑遍歷漏洞CVE-2021-22118的問題解析
CVE-2021-22118?是一個(gè)在?Spring?Boot?中發(fā)現(xiàn)的漏洞,該漏洞關(guān)系到?Spring?Boot?的開發(fā)者工具(Devtools)中的遠(yuǎn)程更新(Remote?Update)功能,這篇文章主要介紹了Spring?Boot存在路徑遍歷漏洞CVE-2021-22118,需要的朋友可以參考下2023-09-09
Mybatis不支持batchInsertOrUpdate返顯id問題
這篇文章主要介紹了Mybatis不支持batchInsertOrUpdate返顯id問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
詳解Java繼承中屬性、方法和對(duì)象的關(guān)系
這篇文章主要幫助大家詳細(xì)介紹了Java繼承中屬性、方法和對(duì)象的關(guān)系,感興趣的朋友可以參考一下2016-03-03

