![cover](https://img-blog.csdnimg.cn/img_convert/2134e9b05a4f7bc04fe58d1ec215195d.png)
springboot框架学习 service层使用redis缓存实现查询与插入
昨天实现了springboot框架集成redis并实现redis数据库的基本操作:Linux黑窗口使用的部分redis基础命令:get key 获取key的值set key v 设置key的值del key 删除key(应用于所有类型)incr key 将储存的值加上1decr key 将储存的值减去1incrby key amout 加上整数amountdecrby key amout 减去整数
昨天实现了springboot框架集成redis并实现redis数据库的基本操作:
Linux黑窗口使用的部分redis基础命令:
get key 获取key的值
set key v 设置key的值
del key 删除key(应用于所有类型)
incr key 将储存的值加上1
decr key 将储存的值减去1
incrby key amout 加上整数amount
decrby key amout 减去整数amount
append key v 将值追加到key当前储存值的末尾
而我们借助Redistemplate模板提供的opsForValue()里的方法实现对redis键值对的增删改查操作,昨天已经把源码追溯给小伙伴们看了,今天的主要内容是在springboot正常开发的MVC架构里将redis操作的方法添加到service层的接口中,为了达到快速测试的目的我们并不配置dao层的mysql数据库操作。其次由于昨天实现的测试中我们get到的keyvalue的格式不是json数据导致出现不认识的硬编码,我们还要自定义RedisTemplate类并用@Bean以供springboot实现它的自动注入装配。昨天的文章地址如下:http://t.csdn.cn/JVXxZ
跟着昨天的配置来:
一、User实体
package com.hlc.pojo;
import lombok.Data;
import java.io.Serializable;
@Data
/*这个serializable是将对象的各个数据序列化*/
public class User implements Serializable {
private Integer userId;
private String username;
private String address;
}
二、UserService与它的实现类
public interface UserService {
void save(String key,String keyValue);
Object queryKey(String key);
}
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
/*插入新的键值对*/
@Override
public void save(String key, String keyValue) {
redisTemplate.opsForValue().set(key,keyValue);
}
@Override
public Object queryKey(String key) {
return redisTemplate.opsForValue().get(key);
}
}
三、UserController
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("saveKey")
public ModelAndView save(){
return new ModelAndView("saveKey");
}
@RequestMapping("insertKey")
public ModelAndView insert(String key, String keyValue){
userService.save(key,keyValue);
return new ModelAndView("success");
}
@GetMapping("query")
public ModelAndView query(){
return new ModelAndView("query");
}
@RequestMapping("queryKey")
@ResponseBody
/*这里返回的是一条json数据没有具体的页面*/
public Object queryKey(String key) {
return userService.queryKey(key);
}
}
四、测试controller映射路由用的前端页面(采用thymeleaf模板引擎实现跳转)
saveKey页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>提交新键值对页面</title>
</head>
<style type="text/css">
nav{
height: 100px;
}
body{
margin: 5px;
padding: 5px;
background-attachment: fixed;
background-position: center;
background-size: cover;
}
div{
text-align: center;
font-size: 20px;
background-color: aliceblue;
color: black;
}
input{
text-align: center;
background-color: beige;
border:2px solid black;
border-radius: 4px;
}
</style>
<body>
<nav></nav>
<div>
<div>
<form action="/insertKey" method="post">
<div><h3>请输入你要保存的key值对</h3></div>
<div>Enterkey:<input type="text" name="key"></div>
<div>keyValue:<input type="text" name="keyValue"></div>
<div><button type="submit">提交</button></div>
</form>
</div>
</div>
</body>
</html>
success页面就是出一条插入新键值对成功的语句。
五、redis_config配置类
/*自定义的RedisTemplate模板配置实现键值的json数据序列化*/
@Configuration
public class redis_config {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
/*定义方法的返回值,泛型自动匹配,后面的可以省略*/
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
/*1.创建Jackson工具对象*/
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
/*2.为创建的工具对象设置Object映射*/
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
/*将key与hashKey设置为String的序列化方式*/
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
query页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询key键值对</title>
</head>
<style type="text/css">
nav{
height: 100px;
}
div{
margin: 10px;
text-align: center;
font-size: 20px;
background-color: aliceblue;
color: black;
}
input{
background-color: beige;
border:2px solid black;
border-radius: 4px;
}
</style>
<body>
<nav></nav>
<div>
<div>
<form action="/queryKey" method="post">
<div>queryKey:<input type="text" name="key"></div>
<div><button type="submit">查询</button></div>
</form>
</div>
</div>
</body>
</html>
查询成功就会弹出一条相关的json数据
redis数据库键值对:
![](https://img-blog.csdnimg.cn/3690253f767440da802a01c3edcc6d5f.png)
插入页面:
查询页面:
查询user结果:
yml相关配置:
#redis的配置
spring:
redis:
host: 192.168.20.150
# redis服务器连接端口默认6379
port: 6379
# 数据库索引默认为0号数据库这里选取1号数据库
database: 1
lettuce:
pool:
max-active: 50
max-wait: 3000
max-idle: 20
min-idle: 2
# 连接超时时间
timeout: 5000
password: hlc
thymeleaf:
mode: HTML5
cache: false
server:
port: 81
拜拜了兄弟们!明天开始学习怎么用spring cache 直接将redis与mysql实现同步更改持久化。
更多推荐
所有评论(0)