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 相关文章推荐
Django使用redis配置缓存的方法
Jun 01 Redis
Windows中Redis安装配置流程并实现远程访问功能
Jun 07 Redis
Redis 彻底禁用RDB持久化操作
Jul 09 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
Redis 常见使用场景
Aug 30 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
Jedis操作Redis实现模拟验证码发送功能
Sep 25 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
关于使用Redisson订阅数问题
Jan 18 Redis
面试分析分布式架构Redis热点key大Value解决方案
Mar 13 Redis
Redis批量生成数据的实现
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
收音机的保养
2021/03/01 无线电
isset和empty的区别
2007/01/15 PHP
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
jQuery基于正则表达式的表单验证功能示例
2017/01/21 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
js实现选项卡效果
2020/03/07 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Django进阶之CSRF的解决
2018/08/01 Python
python 解压pkl文件的方法
2018/10/25 Python
用Python实现职工信息管理系统
2020/12/30 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
Jar包的作用是什么
2014/03/30 面试题
什么是.net
2015/08/03 面试题
自我评价中英文语句
2013/11/30 职场文书
好的演讲稿开场白
2013/12/30 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
户外婚礼策划方案
2014/02/08 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书