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连接被拒绝的解决方案
Apr 12 Redis
浅谈Redis在直播场景的实践方案
Apr 27 Redis
redis三种高可用方式部署的实现
May 11 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
了解Redis常见应用场景
Jun 23 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
Redis 限流器
May 15 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
php图像验证码生成代码
2017/06/08 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
document.write的几点使用心得
2014/05/14 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
urllib2自定义opener详解
2014/02/07 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
浅谈Python基础—判断和循环
2019/03/22 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
电子商务专员岗位职责
2013/12/11 职场文书
结对共建工作方案
2014/06/02 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
政协调研汇报材料
2014/08/15 职场文书
英文升职感谢信
2015/01/23 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
安全教育培训制度
2015/08/06 职场文书