目录
一、环境
二、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
二、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;@RestControllerpublic class RedisController { /** * 注入RedisTemplate * * 3种情况: * RedisTemplate * RedisTemplate