1.下載redis以及redis可視化工具的安裝包
鏈接(https://download.csdn.net/download/qq_27081015/12005531)
默認安裝就可以了
2.導入redis在springboot的相關依賴
<!-- redis組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
3. 在yaml文件中添加配置
spring:
redis:
database: 0
# cluster:
# nodes:
# - 127.0.0.1:6379 如果是redis集羣 則新加 格式爲 - host:port
# jedis:
lettuce:
pool:
# 連接池中的最大空閒連接 默認8
max-idle: 8
# 連接池中的最小空閒連接 默認0
min-idle: 0
# 連接池最大連接數 默認8 ,負數表示沒有限制
max-active: 8
# 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認-1
max-wait: -1
timeout: 30000
host: 127.0.0.1 #如果是集羣則註釋掉當前host與port
port: 6379
4 .添加redis工具類(也可不添加 直接使用)@Autowired private StringRedisTemplate redisTemplate;
package com.hanhuide.hhde.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @program: maven
* @description: redis工具類
* @author: 韓惠德
* @create: 2019-11-29 14:23
* @version: 1.0
**/
@Component
public class RedisUtil {
@Value("${jwt.token.expirationSeconds}")
private int expirationSeconds;
/*常量,各種實現方式都行,這裏讀取application.yml*/
@Value("${jwt.token.validTime}")
private int validTime;
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 查詢key,支持模糊查詢
*
* @param key 傳過來時key的前後端已經加入了*,或者根據具體處理
*/
public Set<String> keys(String key) {
return redisTemplate.keys(key);
}
/**
* 字符串獲取值
*
* @param key
*/
public Object get(String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 字符串存入值
* 默認過期時間爲2小時
*
* @param key
*/
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value, 7200, TimeUnit.SECONDS);
}
/**
* 字符串存入值
*
* @param expire 過期時間(毫秒計)
* @param key
*/
public void set(String key, String value, Integer expire) {
redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
}
/**
* 刪出key
* 這裏跟下邊deleteKey()最底層實現都是一樣的,應該可以通用
*
* @param key
*/
public void delete(String key) {
redisTemplate.opsForValue().getOperations().delete(key);
}
/**
* 添加單個
* 默認過期時間爲兩小時
*
* @param key key
* @param filed filed
* @param domain 對象
*/
public void hset(String key, String filed, Object domain) {
redisTemplate.opsForHash().put(key, filed, domain);
}
/**
* 添加單個
*
* @param key key
* @param filed filed
* @param domain 對象
* @param expire 過期時間(毫秒計)
*/
public void hset(String key, String filed, Object domain, Integer expire) {
redisTemplate.opsForHash().put(key, filed, domain);
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
/**
* 添加HashMap
*
* @param key key
* @param hm 要存入的hash表
*/
public void hset(String key, HashMap<String, Object> hm) {
redisTemplate.opsForHash().putAll(key, hm);
}
/**
* 如果key存在就不覆蓋
*
* @param key
* @param filed
* @param domain
*/
public void hsetAbsent(String key, String filed, Object domain) {
redisTemplate.opsForHash().putIfAbsent(key, filed, domain);
}
/**
* 查詢key和field所確定的值
*
* @param key 查詢的key
* @param field 查詢的field
* @return HV
*/
public Object hget(String key, String field) {
return redisTemplate.opsForHash().get(key, field);
}
/**
* 查詢該key下所有值
*
* @param key 查詢的key
* @return Map<HK, HV>
*/
public Object hget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* 刪除key下所有值
*
* @param key 查詢的key
*/
public void deleteKey(String key) {
redisTemplate.opsForHash().getOperations().delete(key);
}
/**
* 判斷key和field下是否有值
*
* @param key 判斷的key
* @param field 判斷的field
*/
public Boolean hasKey(String key, String field) {
return redisTemplate.opsForHash().hasKey(key, field);
}
/**
* 判斷key下是否有值
*
* @param key 判斷的key
*/
public Boolean hasKey(String key) {
return redisTemplate.opsForHash().getOperations().hasKey(key);
}
/**
* 判斷此token是否在黑名單中
*
* @param token
* @return
*/
public Boolean isBlackList(String token) {
return hasKey("blacklist", token);
}
/**
* 將token加入到redis黑名單中
*
* @param token
*/
public void addBlackList(String token) {
hset("blacklist", token, "true");
}
/**
* 查詢token下的刷新時間
*
* @param token 查詢的key
* @return HV
*/
public Object getTokenValidTimeByToken(String token) {
return redisTemplate.opsForHash().get(token, "tokenValidTime");
}
/**
* 查詢token下的刷新時間
*
* @param token 查詢的key
* @return HV
*/
public Object getUsernameByToken(String token) {
return redisTemplate.opsForHash().get(token, "username");
}
/**
* 查詢token下的刷新時間
*
* @param token 查詢的key
* @return HV
*/
public Object getIPByToken(String token) {
return redisTemplate.opsForHash().get(token, "ip");
}
/**
* 查詢token下的過期時間
*
* @param token 查詢的key
* @return HV
*/
public Object getExpirationTimeByToken(String token) {
return redisTemplate.opsForHash().get(token, "expirationTime");
}
public void setTokenRefresh(String token, String username, String ip) {
//刷新時間
Integer expire = validTime * 24 * 60 * 60 * 1000;
hset(token, "tokenValidTime", DateUtil.getAddDayTime(validTime), expire);
hset(token, "expirationTime", DateUtil.getAddDaySecond(expirationSeconds), expire);
hset(token, "username", username, expire);
hset(token, "ip", ip, expire);
}
}
5. 新建controller 測試redis是否連接成功
package com.hanhuide.hhde.controller;
import com.hanhuide.hhde.utils.RedisUtil;
import com.hanhuide.hhde.utils.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/**
* @program: maven
* @description: 測試redis集羣
* @author: 韓惠德
* @create: 2019-11-29 15:49
* @version: 1.0
**/
@RestController
@RequestMapping("redis")
public class RedisController {
@Autowired
private RedisUtil redisUtil;
@PostMapping("index")
public Map<String, Object> ceshiRedis() {
redisUtil.set("測試", "dlfdsjfldsjfldsjfldsjfldsjflsdjf");
return ResultUtil.success();
}
}
6. 測試
7. 打開redis可視化工具