目录
一、环境
二、springboot前期准备
三、字符串传到redis实现过程
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
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的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
* RedisTemplate