昨天实现了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数据库键值对:

 插入页面:

 查询页面:

 查询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实现同步更改持久化。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐