目录

一、环境

二、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;

@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();
    }

}


 

Logo

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

更多推荐