SpringBoot简单连接redis数据库, 返回stringjson等类型数据
Posted 独为我唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot简单连接redis数据库, 返回stringjson等类型数据相关的知识,希望对你有一定的参考价值。
目录
一、环境
springboot:2.7.3
jdk:1.8
idea:2021.3
redis:这里使用Windows版本
redis Windows版本和postman下载链接
链接:https://pan.baidu.com/s/1n3vrx74Hc-6QWsS0s9v3Lg?pwd=0886
提取码:0886
二、springboot前期准备
1.新建一个module:名为1-springboot-redis,设置jdk为1.8,并选中Spring Web和redis依赖
2.检测依赖添加成功: 在pom.xml查看,其中下方的spring-boot-starter-data-redis是redis的起步依赖,这使得可以直接在项目中使用RedisTemplate(或StringRedisTemplate),然后springboot就可以创建RedisTemplate对象在容器中,使用注解自动注入后可使用。
3.配置文件:在application.properties文件中设置好redis访问端口和主机,这里是Windows所以是localhost,如果是linux按照主机地址写入即可。这样redis就可以成功连接到springboot。
三、字符串传到redis实现过程
(一)redis:安装好redis的Windows版本(链接里),分别打开redis服务器端和客户端。
(二)springboot(4种方式,完整代码在最下方):
1.新建controller。
版本一:使用RedisTemplate对象且不使用RESTful风格(在controller写死数据)。添加字符串。
编写添加字符串到redis代码。先使用RedisTemplate对象,采用PostMapping请求,传入一个name字符串以及它的值value。即先获取对象,再添加数据,这里是“name”、“zhangsan”。
@Resource
private RedisTemplate redisTemplate;
// 添加数据到redis
@PostMapping("/redis/addstring")
public String addToRedis(String name, String value)
// 操作redis中的string类型的数据, 先获取ValueOperation对象
ValueOperations valueOperations = redisTemplate.opsForValue();
// 添加数据到redis
valueOperations.set("name", "zhangsan");
return "向redis添加string类型的数据成功";
结果:这里是在postman(链接里有)上运行的,启动项目后在网页同样可以使用。因为写死数据,所以只能传入"name"和"张三"。务必要写成name= 和value= ,即和方法里的参数String name, String value对应。
查看结果:在打开的redis客户端上查看数据。 因为RedisTemplate是JDK编码,所以存在显示问题
版本二:使用StringRedisTemplate对象且使用RESTful风格。依然是添加String字符串。
这里区别上个方法使用了StringRedisTemplate对象,仍然传入一个name字符串以及它的值value。因为使用RESTful风格,必须加入PathVariable注解,也使得值不需要写死。
@Resource
private StringRedisTemplate stringRedisTemplate;
@PostMapping("/redis/k/v")
public String addStringKV(@PathVariable String k,
@PathVariable String v)
// 使用StringRedisTemplate
stringRedisTemplate.opsForValue().set(k, v);
return "使用StringRedisTemplate对象 ";
结果:使用postman测试 要写成/redis/k值/v值
结果显示:使用redis客户端查看,发现添加成功
版本三:设置RedisTemplate序列化。
因为RedisTemplate有JDK编码问题,所以将其string序列化。使其避免编码问题。
@PostMapping("/redis/addstr")
public String addString(String k, String v)
// 使用RedisTemplate
// 先设置key 使用String的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 设置value的序列化
redisTemplate.setValueSerializer(new StringRedisSerializer());
// 后添加数据
redisTemplate.opsForValue().set(k, v);
// 使用中文的话有编码问题
return "定义RedisTemplate对象的key,value的序列化";
结果:同样要将url写成k=和v=,保持和public String addString(String k, String v)中的k、v对应
版本四:使用json序列化,把java对象转为json存储。
过程:新建一个名为Student的Bean,创建id、age和name三个属性。key使用string序列化,value使用Jackson2JsonRedisSerializer格式的序列化,从而转化为json格式。(写死数据)
@PostMapping("/redis/addjson")
public String addJson()
Student student = new Student();
student.setId(1001);
student.setAge(20);
student.setName("zhangsan");
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 把值作为json序列化
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
redisTemplate.opsForValue().set("mystudent", student);
return "json序列化";
结果:在redis客户端 查看key为"mystudent"的值
完整Controller层代码:
package com.bjpowernode.controller;
import com.bjpowernode.vo.Student;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class RedisController
/**
* 注入RedisTemplate
*
* 3种情况:
* RedisTemplate<String, String>
* RedisTemplate<Object, Object>
* RedisTemplate
*
* 注意:RedisTemplate对象的名称必须是redisTemplate
*/
@Resource
private RedisTemplate redisTemplate;
@Resource
private StringRedisTemplate stringRedisTemplate;
// 添加数据到redis
@PostMapping("/redis/addstring")
public String addToRedis(String name, String value)
// 操作redis中的string类型的数据, 先获取ValueOperation对象
ValueOperations valueOperations = redisTemplate.opsForValue();
// 添加数据到redis
valueOperations.set("name", "zhangsan");
return "向redis添加string类型的数据";
@GetMapping("/redis/getk")
public String getData(String k)
ValueOperations valueOperations = redisTemplate.opsForValue();
Object v = valueOperations.get(k);
return "key是" + k + ", 它的值是: " + v;
@PostMapping("/redis/k/v")
public String addStringKV(@PathVariable String k,
@PathVariable String v)
// 使用StringRedisTemplate
stringRedisTemplate.opsForValue().set(k, v);
return "使用StringRedisTemplate对象 ";
@GetMapping("/redis/getstr/k")
public String getStringValue(@PathVariable String k)
String v = stringRedisTemplate.opsForValue().get(k);
return "k的value; " + v;
// 设置RedisTemplate 序列化
/**
* 可以设置key的序列化,也可以设置value序列化
* 也可以同时设置key和value的序列化
*/
@PostMapping("/redis/addstr")
public String addString(String k, String v)
// 使用RedisTemplate
// 先设置key 使用String的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 设置value的序列化
redisTemplate.setValueSerializer(new StringRedisSerializer());
// 后添加数据
redisTemplate.opsForValue().set(k, v);
// 使用中文的话有编码问题
return "定义RedisTemplate对象的key,value的序列化";
/**
* 使用json序列化, 把java对象转为json存储
*/
@PostMapping("/redis/addjson")
public String addJson()
Student student = new Student();
student.setId(1001);
student.setAge(20);
student.setName("zhangsan");
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 把值作为json序列化
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
redisTemplate.opsForValue().set("mystudent", student);
return "json序列化";
@PostMapping("/redis/getjson")
public String getJson()
redisTemplate.setKeySerializer(new StringRedisSerializer());
// 把值作为json序列化
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Student.class));
Object obj = redisTemplate.opsForValue().get("mystudent");
return "json反序列化=" + obj.toString();
以上是关于SpringBoot简单连接redis数据库, 返回stringjson等类型数据的主要内容,如果未能解决你的问题,请参考以下文章