SpringBoot(十)_springboot集成Redis

简介: Redis 介绍Redis是一款开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存也可持久化的日志型、Key-Value高性能数据库。数据模型Redis 数据模型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键-值数据存储。

Redis 介绍

Redis是一款开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存也可持久化的日志型、Key-Value高性能数据库。

数据模型

Redis 数据模型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键-值数据存储。Redis 数据类型类似于编程语言的基础数据类型,所以开发人员感觉很自然。每个数据类型都支持适用于其类型的操作。受支持的数据类型包括:

  • string(字符串)
  • hash(哈希)
  • list(列表)
  • set(集合)
  • zset(sorted set:有序集合)
关键优势

Redis 的优势包括它的速度、它对富数据类型的支持、它的操作的原子性,以及它的通用性:

  • 读速度为110000次/s,写速度为81000次/s,性能极高。
  • 丰富的数据类型,Redis 对大多数开发人员已知道的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决。
  • 原子性,因为所有 Redis 操作都是原子性的,所以多个客户端会并发地访问一个 Redis 服务器,获取相同的更新值。
  • 丰富的特性,Redis 是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据(如 Web 会话、Web 页面命中计数)等。

springboot集成Redis

1、创建集成redis的springboot项目

我直接用idea创建一个新的工程,在创建的时候,直接集成Redis,如下图
enter image description here

2.application 配置(application.yml)
spring:
  redis:
    # Redis 服务器地址
    host: 192.168.142.128
    # Redis 服务器连接端口
    port: 6379
    # Redis 服务器连接密码(默认为空)
    password:
    # Redis 数据库索引(默认为0)
    database: 1
    jedis:
      pool:
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
        # 连接池中的最大空闲连接
        max-idle: 8
3、Redis 对多种数据类型的操作

这里我直接在Test类中进行操作,注入RedisTemplate

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemo01ApplicationTests {


    @Resource
    private RedisTemplate redisTemplate;


    @Test
    public void contextLoads() {
    }
  • String类型
    /**
     * 测试存储String
     */
    @Test
    public  void testString(){
        redisTemplate.opsForValue().set("maomao", "hello");
        System.out.println(redisTemplate.opsForValue().get("maomao").toString());
    }
    //输出hello
  • hash类型

hash set 的时候需要传入三个参数,第一个为 key,第二个为 field,第三个为存储的值。一般情况下 Key 代表一组数据,field 为 key 相关的属性,而 value 就是属性对应的值.

    /**
     * hash
     */
    @Test
    public void testHash() {
        HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
        hash.put("hash","hello","java");
        String value=(String) hash.get("hash","hello");
        System.out.println("hash value :"+value);
    }
    //输出 hash value :java
  • list类型

Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一。 使用 List 可以轻松的实现一个队列,List 典型的应用场景就是消息队列,可以利用 list 的 PUSH 操作,将任务存在 list 中,然后工作线程再用 POP 操作将任务取出进行执行。

    @Test
    public void testListPop() {
        String key="list";
        redisTemplate.delete(key);
        ListOperations<String, String> list = redisTemplate.opsForList();
        list.leftPush(key,"just");
        list.leftPush(key,"do");
        list.leftPush(key,"it");
        String value=list.leftPop(key);
        System.out.println("list value :"+value);
    }
    //输出结果 list value :it

使用 range 来读取,range 后面的两个参数就是插入数据的位置,输入不同的参数就可以取出队列中对应的数据。

    @Test
    public void testListRange() {
        String key="list";
        redisTemplate.delete(key);
        ListOperations<String, String> list = redisTemplate.opsForList();
        list.rightPush(key,"just");
        list.rightPush(key,"do");
        list.rightPush(key,"it");

        List<String> values=list.range(key,0,3);
        for (String v:values){
            System.out.println("list range :"+v);
        }
    }
    //输出结果
    //list range :just
    //list range :do
    //list range :it
  • set类型

Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。

    @Test
    public void testSet(){
        String key = "set";
        redisTemplate.delete(key);
        SetOperations<String,String> set = redisTemplate.opsForSet();
        set.add(key,"just");
        set.add(key,"do");
        set.add(key,"do");
        set.add(key,"it");
        Set<String> values = set.members(key);
        for (String value:values){
            System.out.println("set value :"+value);
        }
    }
    //输出结果
    //set value :just
    //set value :it
    //set value :do

Redis 为集合提供了求交集、并集、差集等操作,可以非常方便的使用

    @Test
    public void testSetMore() {
        SetOperations<String, String> set = redisTemplate.opsForSet();
        String key1="setMore1";
        String key2="setMore2";

        set.add(key1,"just");
        set.add(key1,"do");
        set.add(key1,"do");
        set.add(key1,"it");

        set.add(key2,"java");
        set.add(key2,"do");

        Set<String> diffs=set.difference(key1,key2);
        for (String v:diffs){
            System.out.println("diffs set value :"+v);
        }
        //输出 
        //diffs set value :it
        //diffs set value :just

        String key3="setMore3";
        String key4="setMore4";
        
        set.add(key3,"just");
        set.add(key3,"do");
        set.add(key3,"java");
        set.add(key4,"it");
        set.add(key4,"do");
        set.add(key4,"hello");
        
        Set<String> unions=set.union(key3,key4);
        for (String v:unions){
            System.out.println("unions value :"+v);
        }
        //输出
        //unions value :do
        //unions value :java
        //unions value :just
        //unions value :it
        //unions value :hello
    }
  • zset

Redis sorted set 的使用场景与 set 类似,区别是 set 不是自动有序的,而 sorted set 可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序,即自动排序。

    @Test
    public void testZset(){
        String key="zset";
        redisTemplate.delete(key);
        ZSetOperations<String, String> zset = redisTemplate.opsForZSet();
        zset.add(key,"just",1);
        zset.add(key,"now",5);
        zset.add(key,"it",4);
        zset.add(key,"do",3);

        Set<String> zsets=zset.range(key,0,3);
        for (String v:zsets){
            System.out.println("zset value :"+v);
        }
        //zset value :just
        //zset value :do
        //zset value :it
        //zset value :now


        Set<String> zsetB=zset.rangeByScore(key,0,3);
        for (String v:zsetB){
            System.out.println("zsetB value :"+v);
        }
        //zsetB value :just
        //zsetB value :do
    }
4.Redis 其他的操作
  • 超时失效

/**
     * 测试超时失效
     * @throws InterruptedException
     */
    @Test
    public void testExpire() throws InterruptedException {
        ValueOperations<String, String> operations=redisTemplate.opsForValue();
        operations.set("expire", "java",100,TimeUnit.MILLISECONDS);
        Thread.sleep(1000);
        boolean exists=redisTemplate.hasKey("expire");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
    }
    // 输出 exists is false
  • 删除数据
    /**
     * 删除数据
     */
    @Test
    public void testDelete() {
        ValueOperations<String, String> operations=redisTemplate.opsForValue();
        operations.set("deletekey", "springboot");
        redisTemplate.delete("deletekey");
        //判断key是否还在
        boolean exists=redisTemplate.hasKey("deletekey");
        if(exists){
            System.out.println("exists is true");
        }else{
            System.out.println("exists is false");
        }
    }
    //输出 exists is false
5、封装

在实际的使用过程中,不会给每一个使用的类都注入 redisTemplate 来直接使用,一般都会对业务进行简单的包装,最后提供出来对外使用. 这里就不在展示

完整代码下载:github

学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。
相关文章
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
868 5
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
1070 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
1077 0
|
存储 人工智能 NoSQL
SpringBoot整合Redis、ApacheSolr和SpringSession
本文介绍了如何使用SpringBoot整合Redis、ApacheSolr和SpringSession。SpringBoot以其便捷的配置方式受到开发者青睐,通过引入对应的starter依赖,可轻松实现功能整合。对于Redis,可通过配置RedisSentinel实现高可用;SpringSession则提供集群Session管理,支持多种存储方式如Redis;整合ApacheSolr时,借助Zookeeper搭建SolrCloud提高可用性。文中详细说明了各组件的配置步骤与代码示例,方便开发者快速上手。
317 11
|
NoSQL Java API
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis
本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。
2962 0
|
NoSQL Java Redis
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 安装
本教程介绍在 VMware 虚拟机(CentOS 7)或阿里云服务器中安装 Redis 的过程,包括安装 gcc 编译环境、下载 Redis(官网或 wget)、解压安装、修改配置文件(如 bind、daemonize、requirepass 等设置)、启动 Redis 服务及测试客户端连接。通过 set 和 get 命令验证安装是否成功。适用于初学者快速上手 Redis 部署。
599 0
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
708 0
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
1819 6
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
1356 4