今天我们来在Springboot中集成下Redis,下面我们开始来集成。
第一步:
在pom.xml中添加如下配置,这里的版本不是唯一,可以根据当前springboot自身版本进行调整。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
第二步:
添加yml配置,我这里是application.yml,如果是properties同理
spring:
redis:
database: 0
host: localhost
port: 6379
timeout: 30000
第三步:
添加接口类
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @ClassName RedisService
* @Deacription Redis接口
* @Author Monkey
* @Date 2020/9/9实现
* @Version 1.0
**/
public interface RedisService {
/**
* 获取key
*
* @param key
* @return
*/
String get(String key);
/**
* 删除key
*
* @param key
*/
void del(String key);
/**
* 设置key值
*
* @param key key
* @param value value
*/
void set(String key, String value);
/**
* SetNX ,如果已经有值,则返回falae ,如果设置成功则返回ture
*
* @param key key
* @param value Value
* @return false 设置失败,该key已经有值, true,设置成功
*/
boolean setnx(String key, String value);
/**
* 设置key值,同时加上失效时间
*
* @param key key
* @param value value
* @param expireTime 失效时间,单位 秒
*/
void set(String key, String value, long expireTime);
/**
* 给key加失效时间
*
* @param key key
* @param expireTime 失效时间,单位 秒
*/
void expire(String key, long expireTime);
/**
* 单个key递增
*
* @param key key
* @param delta 递增值
* @return 递增后的值,
*/
long incr(String key, long delta);
/**
* Hash设置值得操作
*
* @param key
* @param field
* @param value
*/
void hset(String key, String field, String value);
/**
* 批量写入Hash表
*
* @param key
* @param values
*/
void hmset(String key, Map<String, String> values);
/**
* 返回哈希表key所有的字段和值
*
* @param key
* @return
*/
Map<Object, Object> hgetAll(String key);
/**
* Hash获取值操作
*
* @param key
* @param field
* @return
*/
String hget(String key, String field);
/**
* Hash判断值是否存在
*
* @param key
* @param field
* @return
*/
boolean hexists(String key, String field);
/**
* Hash删除一个值
*
* @param key
* @param field
* @return
*/
long hdel(String key, Object... field);
/**
* 为哈希表 key 中的域 field 的值加上增量 increment
*
* @param key
* @param field
* @param increment
* @return
*/
long hincrby(String key, String field, long increment);
/**
* Set 新增数据
*
* @param key
* @param value
* @return
*/
long sadd(String key, String... value);
/**
* Set 判断value值是否存在
*
* @param key
* @param value
* @return
*/
boolean sismember(String key, String value);
/**
* Set 删除元素,不存在的会被忽略
*
* @param key
* @param value
* @return
*/
long srem(String key, Object... value);
/**
* Set 随机从set里取值<br>
* count 为正数,取值不会重复,如果count大于set的基数,返回值整个set<br>
* count 为负数,取值可能重复,如果count 的绝对值大于集合的基数,那么返回的数组的长度为 count 的绝对值
*
* @param key
* @param count
* @return
*/
List<String> srandmember(String key, long count);
/**
* 获取set所有值
*
* @param key
* @return
*/
Set<String> smembers(String key);
/**
* 根据参数 count 的值,移除列表中与参数 value 相等的元素。
*
* @param key key
* @param count 数量
* @param value 值
*/
void lrem(String key, int count, String value);
/**
* 返回列表 key 中,下标为 index 的元素。
*
* @param key key
* @param index 下标
* @return 该位置上的值
*/
String lindex(String key, int index);
/**
* 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
*
* @param key key
* @param value 值
*/
void lrpush(String key, String value);
/**
* 判断key是否存在
*
* @param key key
* @return true存在, false 不存在
*/
boolean exists(String key);
}
第四步:
添加接口实现类
import com.ruisitech.mabi.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @ClassName RedisService
* @Deacription Redis接口实现
* @Author Monkey
* @Date 2020/9/9实现
* @Version 1.0
**/
@Service("redisService")
public class RedisServiceImpl implements RedisService {
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
@Override
public void del(String key) {
redisTemplate.delete(key);
}
@Override
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
@Override
public boolean setnx(String key, String value) {
return redisTemplate.opsForValue().setIfAbsent(key, value);
}
@Override
public void set(String key, String value, long expireTime) {
redisTemplate.opsForValue().set(key, value);
this.expire(key, expireTime);
}
@Override
public void expire(String key, long expireTime) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
@Override
public long incr(String key, long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}
@Override
public void hset(String key, String field, String value) {
redisTemplate.opsForHash().put(key, field, value);
}
@Override
public Map<Object, Object> hgetAll(String key) {
return redisTemplate.opsForHash().entries(key);
}
@Override
public void hmset(String key, Map<String, String> values) {
redisTemplate.opsForHash().putAll(key, values);
}
@Override
public String hget(String key, String field) {
Object value = redisTemplate.opsForHash().get(key, field);
return value == null ? null : value.toString();
}
@Override
public boolean hexists(String key, String field) {
return redisTemplate.opsForHash().hasKey(key, field);
}
@Override
public long hincrby(String key, String field, long increment) {
return redisTemplate.opsForHash().increment(key, field, increment);
}
@Override
public long hdel(String key, Object... field) {
return redisTemplate.opsForHash().delete(key, field);
}
@Override
public long sadd(String key, String... value) {
Long result = redisTemplate.opsForSet().add(key, value);
return result == null ? 0L : result;
}
@Override
public boolean sismember(String key, String value) {
Boolean result = redisTemplate.opsForSet().isMember(key, value);
return result != null && result;
}
@Override
public long srem(String key, Object... value) {
Long result = redisTemplate.opsForSet().remove(key, value);
return result == null ? 0L : result;
}
@Override
public List<String> srandmember(String key, long count) {
return redisTemplate.opsForSet().randomMembers(key, count);
}
@Override
public Set<String> smembers(String key) {
return redisTemplate.opsForSet().members(key);
}
@Override
public void lrem(String key, int count, String value) {
redisTemplate.opsForList().remove(key, count, value);
}
@Override
public String lindex(String key, int index) {
return redisTemplate.opsForList().index(key, index);
}
@Override
public void lrpush(String key, String value) {
redisTemplate.opsForList().rightPush(key, value);
}
@Override
public boolean exists(String key) {
return redisTemplate.hasKey(key);
}
}
第五步:
测试redis的使用
@RestController
@RequestMapping(value = "/frame")
@Api(tags = "登出功能")
public class LogoutController extends BaseController {
@Autowired
private RedisService redisService;
@GetMapping(value="/logout")
@ApiOperation(value = "用户登出")
public @ResponseBody Object logout(HttpServletRequest request){
//删除token
String token = request.getHeader("token");
if (StringUtils.isNotBlank(token)){
redisService.del(token);
}
return super.buildSucces();
}
}