目录

一、环境

二、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     * 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();    }}

Copyright © maxssl.com 版权所有 浙ICP备2022011180号