作者平台:
| CSDN:https://blog.csdn.net/qq_41153943
| 掘金:https://juejin.cn/user/651387938290686
| 知乎:https://www.zhihu.com/people/1024-paper-96
| GitHub:https://github.com/JiangXia-1024?tab=repositories
| 微信公众号:1024笔记
本文大约5260字,预计阅读时长11分钟
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
1、基于内存运行,性能高效
2、支持分布式,理论上可以无限扩展
3、key-value存储系统
4、开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
5、单进程单线程模型
6、丰富的数据类型
7、操作具有原子性
8、持久化
9、高并发读写
Redis越来越受欢迎,也有越来越多的公司加入了Redis的使用大军中,今天就简单说说Springboot如何集成Redis。
本文的代码的前提是SpringBoot开发Restful风格的接口实现CRUD功能项目的代码,具体可以参考之前的文章,代码源码下载地址在文章的最后!
SpringBoot集成Redis的第一步首先需要在本地下载安装好Redis,关于Redis的安装和使用可以参考之前的文章:分布式缓存中间件Redis入门。
如果已经在准备好所有的上述步骤之后,我们需要在pom文件中加入redis依赖,如下:
org.springframework.boot
spring-boot-starter-data-redis
加入Redis的依赖之后,还需要在配置文件application.yml中加入redis的相关配置,具体如下:
#redis配置
redis:
#redis数据库索引(默认为0)
database: 0
#redis服务器地址
host: 127.0.0.1
#redis端口
post: 6379
#Redis服务器连接密码(默认为空)
password:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0
# 连接超时时间毫秒
timeout: 1000
接着就是真正的代码部分,需要写一个redis的工具类用于处理redis的数据,比如判断是否存在某个key,设置缓存时间等等,这些其实redis都已经有了具体的对应方法,这里是对其进行一个简单的封装处理,具体代码如下:
@Service
public class RedisUtil {
@Autowired
private RedisTemplate redisTemplate;
/**
* 写入缓存
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
boolean result = false;
try {
ValueOperations operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 写入缓存设置时效时间
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value, Long expireTime ,TimeUnit timeUnit) {
boolean result = false;
try {
ValueOperations operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, expireTime, timeUnit);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 批量删除对应的value
* @param keys
*/
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
/**
* 批量删除key
* @param pattern
*/
public void removePattern(final String pattern) {
Set keys = redisTemplate.keys(pattern);
if (keys.size() > 0){
redisTemplate.delete(keys);
}
}
/**
* 删除对应的value
* @param key
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
/**
* 判断缓存中是否有对应的value
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}
/**
* 读取缓存
* @param key
* @return
*/
public Object get(final String key) {
Object result = null;
ValueOperations operations = redisTemplate.opsForValue();
result = operations.get(key);
return result;
}
/**
* 哈希 添加
* @param key
* @param hashKey
* @param value
*/
public void hmSet(String key, Object hashKey, Object value){
HashOperations hash = redisTemplate.opsForHash();
hash.put(key,hashKey,value);
}
/**
* 哈希获取数据
* @param key
* @param hashKey
* @return
*/
public Object hmGet(String key, Object hashKey){
HashOperations hash = redisTemplate.opsForHash();
return hash.get(key,hashKey);
}
/**
* 列表添加
* @param k
* @param v
*/
public void lPush(String k,Object v){
ListOperations list = redisTemplate.opsForList();
list.rightPush(k,v);
}
/**
* 列表获取
* @param k
* @param l
* @param l1
* @return
*/
public List
最后就是改造一下之前的一个controller接口方法,是一个根据用户名查询用户信息的接口,具体如下:
//根据用户名查询数据
@RequestMapping(value = "/user", method = RequestMethod.GET)
public User findByUserName(@RequestParam(value = "userName", required = true) String userName) {
System.out.println("根据用户名查询数据:");
//判断缓存是否存在
boolean hasKey = redisUtil.exists(userName);
if(hasKey){
logger.info("==========通过redis缓存获取信息================");
//获取缓存
Object object = redisUtil.get(userName);
return (User) object;
}else{
//查询数据库,并且存入缓存
logger.info("==========通过数据库查询信息并且存入redis================");
User user = userService.findUserByName(userName);
//数据插入缓存(set中的参数含义:key值,user对象,缓存存在时间10(long类型),时间单位)
redisUtil.set(userName,user,10L, TimeUnit.MINUTES);
return user;
}
}
接着就是测试验证部分,首先启动Redis,然后使用RedisDesktopManagerRedis工具可以发现本地的Redis数据库中是没有任何数据:
然后我们在浏览器中输入链接地址,调用上面的根据用户名查询用户信息的接口,
可以发现控制台打印了以下的日志内容:
然后重新刷新redis数据库,发现数据已经存进来了:
再在浏览器中刷新页面,重新调用一遍上述接口,查看控制台的日志信息如下,可以发现这次调用接口数据查询是通过Redis缓存信息进行查询,不再是连接本地MySQL数据库进行数据查询了。
通过以上步骤则就能够简单的进行Springboot整合Redis进行开发了,Redis的使用其实比较简单,主要的一些操作部分就在RedisUtil这个类中。
有任何问题欢迎交流讨论,一起学习!
最后本文的源码在:
https://github.com/JiangXia-1024/SpringBootWorkSpace
相关推荐:
Springboot+Vue整合笔记【超详细】
Spring Boot开发图片上传并添加水印接口
SpringBoot整合ElasticSearch实战
SpringBoot开发Restful风格的接口实现CRUD功能
SpringBoot整合JPA进行数据访问