springboot集成redis
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可视化工具