SpringBoot组件系列02-内存数据库Redis
1.redis介绍
Redis相信大家应该都知道,已经出来很多年了,应用也非常广泛,在nosql这块市场份额挺高,依据自身是单线程的并且将数据存储在内存中,并支持分布式部署,被广泛应用在当前最流行的大数据应用中,主要解决高并发数据同步问题,分布式事务等大数据项目中常见问题。
2.maven需要的包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.我自己写的redis工具类(附带解决静态方法调用外部注入问题)
@Component
public class RedisUtil {
@Autowired
StringRedisTemplate stringRedisTemplate;
public static RedisUtil redisUtil;
@PostConstruct
public void init() {
redisUtil = this;
}
/**
* 设置redis字符串
*
* @param k key
* @param v value
* @param l 过期时间
* @param timeUnit 时间类型
*/
public static void setString(String k, String v, long l, TimeUnit timeUnit) {
redisUtil.stringRedisTemplate.opsForValue().set(k, v, l, timeUnit);
}
/**
* 设置redis字符串
*
* @param k key
* @param v value
*/
public static void setString(String k, String v) {
redisUtil.stringRedisTemplate.opsForValue().set(k, v);
}
/**
* 获取redis字符串
*
* @param k key
* @return 返回键值
*/
public static String getString(String k) {
return redisUtil.stringRedisTemplate.opsForValue().get(k);
}
/**
* 获取key的过期时间
*
* @param k key
* @return
*/
public static Long getExpire(String k) {
return redisUtil.stringRedisTemplate.getExpire(k);
}
/**
* 根据key获取过期时间并换算成指定单位
*
* @param k key
* @return
*/
public static Long getExpire(String k, TimeUnit timeUnit) {
return redisUtil.stringRedisTemplate.getExpire(k, timeUnit);
}
/**
* 根据key删除缓存
*
* @param k key
*/
public static void delete(String k) {
redisUtil.stringRedisTemplate.delete(k);
}
/**
* 检查key是否存在
*
* @param k key
* @return
*/
public static boolean hasKey(String k) {
return redisUtil.stringRedisTemplate.hasKey(k);
}
/**
* 设置过期时间
*
* @param k key
* @param l 过期时间
* @param timeUnit 过期时间单位
* @return
*/
public static boolean expire(String k, long l, TimeUnit timeUnit) {
return redisUtil.stringRedisTemplate.expire(k, l, timeUnit);
}
/**
* 设置指定时间过期
*
* @param k key
* @param d date
* @return
*/
public static boolean expireAt(String k, Date d) {
return redisUtil.stringRedisTemplate.expireAt(k, d);
}
/**
* 将字符串添加到集合尾部
*
* @param k key
* @param v value
*/
public static void listPush(String k, String v) {
redisUtil.stringRedisTemplate.opsForList().rightPush(k, v);
}
/**
* 添加集合到redis
*
* @param k key
* @param list list
*/
public static void listPushAll(String k, List<String> list) {
redisUtil.stringRedisTemplate.opsForList().rightPushAll(k, list);
}
/**
* 获取集合中单个元素
*
* @param k key
* @param l index
* @return
*/
public static String listGet(String k, long l) {
return redisUtil.stringRedisTemplate.opsForList().index(k, l);
}
/**
* 获取集合的大小
*
* @param k key
* @return
*/
public static Long listSize(String k) {
return redisUtil.stringRedisTemplate.opsForList().size(k);
}
/**
* 获取集合所有元素
*
* @param k
* @return
*/
public static List<String> listAll(String k) {
return redisUtil.stringRedisTemplate.opsForList().range(k, 0, -1);
}
}
4.测试
@RestController
public class RedisController {
/**
* 设置数据到redis
*
* @return
*/
@RequestMapping("/set")
public Object redisSet() {
String k = "test";
String v = "测试";
long time = 1;
TimeUnit unit = TimeUnit.MINUTES;
//设置一个字符串到redis中,过期时间为1分钟
RedisUtil.setString(k, v, time, unit);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("key", k);
resultMap.put("value", v);
resultMap.put("time", unit.toSeconds(time) + "秒");
return resultMap;
}
/**
* 从redis中获取数据
*
* @return
*/
@RequestMapping("/get")
public Object redisGet() {
String k = "test";
//根据key从redis中获取字符串
String v = RedisUtil.getString(k);
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("key", k);
resultMap.put("value", v);
return resultMap;
}
}
剩下就可以在浏览器中直接测试了,测试之前记得把redis客户端开启,详细源码可以参考我的码云项目:https://gitee.com/dongdingzhuo/boot.git
windows的redis绿色版客户端工具我直接放在项目中,可以直接用
先用cd命令切换到redis客户端所在路径,然后启动客户端服务即可