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基于Bitmap实现用户签到功能
Jun 20 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
Redis之RedisTemplate配置方式(序列和反序列化)
Mar 13 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 23 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/04 咖啡文化
thinkphp模板继承实例简述
2014/11/26 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
图解JS原型和原型链实现原理
2020/09/15 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Mac 上切换Python多版本
2017/06/17 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
Python发送邮件实现基础解析
2020/08/14 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
win10更新失败无限重启解决方法
2022/04/19 数码科技