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通过6379端口无法连接服务器(redis-server.exe闪退)
May 08 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
解析redis hash应用场景和常用命令
Aug 04 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
源码分析Redis中 set 和 sorted set 的使用方法
Mar 22 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
解决 redis 无法远程连接
May 15 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
Redis keys命令的具体使用
Jun 05 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购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python登录注册验证功能实现
2018/06/18 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
用Python实现职工信息管理系统
2020/12/30 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
优秀求职自荐信怎样写
2013/12/18 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
诚信承诺书
2015/01/19 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL