Springboot/Springcloud项目集成redis进行存取的过程解析


Posted in Redis onDecember 04, 2021

前言:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)。

一、redis去官网https://redis.io/download下载后解压

然后点击里面的redis-server.exe(windows平台)即可正常启动

Springboot/Springcloud项目集成redis进行存取的过程解析

二、在项目中添加redis依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

三、redis的使用

在需要使用redis的地方通过注解注入,比如在Controller中添加

@RestController
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;//只支持redis五大类型中的字符串类型
    @Autowired
    private RedisTemplate redisTemplate;//支持redis五大类型中的所有类型


}

四、字符串类型存取(k,v)

@RequestMapping("/setString")
    public Object  setString(){
        stringRedisTemplate.boundValueOps("s").set("辣椒");//存入

        return stringRedisTemplate.boundValueOps("s").get();//读取
    }

访问接口查看结果:

Springboot/Springcloud项目集成redis进行存取的过程解析

五、存取对象(k,object)

使用你自己的对象进行存取,我这里使用Person对象

package com.star.pojo;

import java.io.Serializable;

public class Person implements Serializable {
    private String name;
    private int age;
    private String Add;

    public Person() {
    }

    public Person(String name, int age, String add) {
        this.name = name;
        this.age = age;
        Add = add;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAdd() {
        return Add;
    }

    public void setAdd(String add) {
        Add = add;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", Add='" + Add + '\'' +
                '}';
    }
}

Person.java
@RequestMapping("/setPerson")
    public Object  setPerson(){
        Person person = new Person("鱼er", 151, "北京");
        redisTemplate.boundValueOps("p").set(person);//存入

        return redisTemplate.boundValueOps("p").get();//读取
    }

Springboot/Springcloud项目集成redis进行存取的过程解析

六、List类型(k,list)

@RequestMapping("/setList")
    public List<String> setListRedis(){
        List<String> list=new ArrayList<>();
        list.add("手头");
        list.add("苹果");
        list.add("辣椒");

        this.redisTemplate.boundValueOps("listk").set(list);//存入

        return (List<String>) this.redisTemplate.boundValueOps("listk").get();//读取
    }

Springboot/Springcloud项目集成redis进行存取的过程解析

七、Hash类型(K,k,value)

@RequestMapping("/setHash")
    public List<String> setHash(){
        List<String> list=new ArrayList<>();
        list.add("大书");
        list.add("酸菜");
        list.add("鸡蛋");

        this.redisTemplate.boundHashOps("thing").put("h",list);//存入
        return (List<String>) this.redisTemplate.boundHashOps("thing").get("h");//读取

    }

Springboot/Springcloud项目集成redis进行存取的过程解析

八、然后打开redis desktop manager工具可以看到你存储的数据

其安装及连接方式不用多说,基本是个人都会,实在不会可以去这里瞧瞧

Springboot/Springcloud项目集成redis进行存取的过程解析

九、如果想要在单元测试中进行存取

添加测试依赖,Junit必须4.12以上

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-test</artifactId>
</dependency>

<dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
       <scope>test</scope>
</dependency>

在要进行存取的类上添加注解@RunWith、@SpringBootTest,意思是启动单元测试时启动当前项目的启动类,因为启动类里面的@SpringBootApplication里面包含了包扫描@ComponentScan,不然注入StringRedisTemplate或RedisTemplate时注入失败报空指针,当然也可以在启动类里面返回new StringRedisTemplate或new RedisTemplate并且加注解@Bean的方式处理注入失败问题,这里直接通过加注解的方式处理。

@RunWith(value = SpringJUnit4ClassRunner.class)
//RedisApp为启动类名字
@SpringBootTest(classes = {RedisApp.class})
public class RedisAppTest {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void setStringRedis(){
        this.stringRedisTemplate.boundValueOps("name2").set("熊大");
        System.out.println("ok");
    }
    @Test
    public void getStringRedis(){
        String name = this.stringRedisTemplate.boundValueOps("name2").get();
        System.out.println("ok:"+name);
    }
}

在redis desktop manager工具中可以看到存储成功了,在控制台也可以读取

Springboot/Springcloud项目集成redis进行存取的过程解析

Springboot/Springcloud项目集成redis进行存取的过程解析

九、实际使用思路

@Autowired
    private RedisTemplate redisTemplate;
    /**
        * 首次访问时,如果redis没有数据,就访问数据库,然后把访问到的数据存到redis
        * 后续访问时,直接查询redis
        */
        @Override
        public List<Person> findByPersonId(Long id) {// 先查看缓存中有没有
            List<Person> list = (List<Person>) redisTemplate.boundValueOps(id).get();        if(list==null){
          System.out.println("redis中没有,开始从数据库中获取");
          .........          //查询数据库得到List<Person> list =xxxxxx;
                redisTemplate.boundValueOps(id).set(list);//将从数据库查到的数据添加到redis中以备下次查找
            }else{
                System.out.println("redis中存在,list是直接从缓存中获取的,没查数据库");
            }
            return list;
        }

到此这篇关于Springboot/Springcloud项目中集成redis进行存取的文章就介绍到这了,更多相关Springcloud集成redis存取内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
详解Redis瘦身指南
May 26 Redis
详解Redis集群搭建的三种方式
May 31 Redis
你真的了解redis为什么要提供pipeline功能
Jun 22 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
Redis安装使用RedisJSON模块的方法
Mar 23 Redis
Redis超详细讲解高可用主从复制基础与哨兵模式方案
Apr 07 Redis
解决 redis 无法远程连接
May 15 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis特殊数据类型Geospatial地理空间
Jun 01 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
使用RedisTemplat实现简单的分布式锁
Nov 20 #Redis
redis缓存存储Session原理机制
CentOS8.4安装Redis6.2.6的详细过程
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 #Redis
Window server中安装Redis的超详细教程
关于SpringBoot 使用 Redis 分布式锁解决并发问题
Redis Stream类型的使用详解
You might like
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
python导入时小括号大作用
2017/01/10 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
北京SQL新华信咨询
2016/09/30 面试题
新学期校长寄语
2014/01/18 职场文书
医疗纠纷协议书
2014/04/16 职场文书
校园运动会广播稿
2014/10/06 职场文书
关于工作经历的证明书
2014/10/11 职场文书
岗位聘任协议书
2015/09/21 职场文书