SpringBoot 內默認引用了jedis版本。所以我們直接引入jedis 依賴 無需在配置 jedis的版本號了。
一、引入jar包,pom文件
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
二、配置文件application,配置redis
#設置服務啓動的端口號默認8080
server.port=8089
#設置請求發生錯誤時顯示的頁面
server.error.path=/error
#redis
spring.redis.database=0
spring.redis.host=
spring.redis.password=
spring.redis.port=6379
# 數據庫連接超時時間,2.0 中該參數的類型爲Duration,這裏在配置的時候需要指明單位
spring.redis.timeout=5000
# 連接池配置,2.0中直接使用jedis或者lettuce配置連接池
# 最大活躍連接數,負數爲不限制
spring.redis.jedis.pool.max-active=8
# 等待可用連接的最大時間,負數爲不限制
spring.redis.jedis.pool.max-wait=-1
# 最大空閒連接數
spring.redis.jedis.pool.max-idle=8
# 最小空閒連接數
spring.redis.jedis.pool.min-idle=0
三、JedisConfig配置類
@Configuration
@Slf4j
public class JedisConfig {
//private Logger logger = LoggerFactory.getLogger(JedisConfig.class);
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Bean
public JedisPool jedisPool(){
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setMaxTotal(maxActive);
// 是否啓用pool的jmx管理功能, 默認true
jedisPoolConfig.setJmxEnabled(true);
JedisPool jedisPool=new JedisPool(jedisPoolConfig,host,port,timeout,password);
log.info("JedisPool連接成功:"+host+":"+port);
return jedisPool;
}
}
測試JedisConfig配置成功
@SpringBootTest
public class JedisConfigTest {
@Autowired
private JedisPool jedisPool;
@Test
public void conextLoads() {
System.out.println(jedisPool);
Jedis jedis = jedisPool.getResource();
jedis.set("name1","zjw");
String name = jedis.get("name1");
System.out.println(name);
jedis.close();
}
}
四、工具類,JedisUtils,可以封裝一些redis的操作,這裏面只有獲取資源和釋放連接
@Component
public class JedisUtils {
@Autowired
private JedisPool jedisPool;
/*獲取Jedis資源*/
public Jedis getJedis() {
return jedisPool.getResource();
}
/*釋放Jedis連接*/
public void close(Jedis jedis) {
if(jedis!=null) {
jedis.close();
}
}
}
五、具體實例JedisServiceImpl.java
@Service
@Log
public class JedisServiceImpl {
@Autowired
private JedisUtils jedisUtils;
/*
測試String
*/
public String getString(String key) {
Jedis jedis = jedisUtils.getJedis();
String val = null;
if (!jedis.exists(key)) {
val = "黎明的光和影";
log.info(key + "在MYSQL數據庫中進行查詢的結果是:" + val);
jedis.set(key, val);
log.info(key + "存入Redis中的值是:" + val);
} else {
val = jedis.get(key);
log.info(key + "是在Redis中查詢的數據。值是:" + val);
}
jedisUtils.close(jedis); //釋放資源
return val;
}
/**
* 測試 jedis 操作hash類型
* * 根據用戶ID查詢用戶信息
* * 先判斷Redis中是否存在,
* * 如果不存在,數據庫中查詢。並存到Redis中
* * 如果存在,直接查詢Redis 並返回
*/
public User selectBy(String id) {
String key = "user:"+id; //根據規則生成相同規範的key
User user = new User();
Jedis jedis = jedisUtils.getJedis();
if (!jedis.exists(key)) { //數據庫中查詢,並進行存
user.setId(id);
user.setName("RedisHash");
user.setAge(22);
log.info("數據庫中查詢的用戶信息是:" + user);
Map<String, String> map = new HashMap();
map.put("id", user.getId());
map.put("name", user.getName());
map.put("age",user.getAge().toString());
jedis.hset(key, map);
log.info(key + "成功存入Redis:" + user);
} else {
Map<String, String> map = jedis.hgetAll(key);
user.setId(map.get("id"));
user.setName(map.get("name"));
System.out.println("map中的age"+map.get("age"));
user.setAge(Integer.valueOf(map.get("age")));
log.info(key + "Redis中查詢出來的是:" + map);
}
Map<String, String> userVal = jedis.hgetAll(key);
System.out.println(userVal+"mapUserVal");
jedisUtils.close(jedis);
return user;
}
/*
redis數據庫存儲
*/
public String select() {
Jedis jedis = jedisUtils.getJedis();
return "zhangjingwen";
}
}
測試:
@SpringBootTest
public class JedisUtilsTest {
@Autowired
private JedisServiceImpl jedisService;
@Test
public void t1() {
String val = jedisService.getString("name1");
String val2= jedisService.getString("age");
String val3= jedisService.getString("name");
System.out.println(val+ val2+val3);
}
@Test
public void test() {
User user = jedisService.selectBy("2");
System.out.println(user);
}
}