0

0

Java SpringBoot操作Redis的方法是什么

PHPz

PHPz

发布时间:2023-06-03 18:01:45

|

635人浏览过

|

来源于亿速云

转载

    redis

    1、 添加redis依赖

    spring boot 提供了对 redis 集成的组件包:spring-boot-starter-data-redis,它依赖于 spring-data-redis 和 lettuce 。

    另外,这里还有两个小细节:

    • Spring Boot 1.x 时代,spring-data-redis 底层使用的是 Jedis;2.x 时代换成了 Lettuce 。

    • Lettuce依赖于 commons-pool2

    <!-- springboot整合redis--> 
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- 使用 lettuce 时要加这个包;使用 jedis 时则不需要。-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

    2、配置文件

    ## Redis 服务器地址
    spring.redis.host=localhost
    ## Redis 服务器连接端口
    spring.redis.port=6379
    ## Redis 数据库索引(默认为 0)
    spring.redis.database=0
    
    ## 以下非必须,有默认值
    ## Redis 服务器连接密码(默认为空)
    spring.redis.password=
    ## 连接池最大连接数(使用负值表示没有限制)默认 8
    spring.redis.lettuce.pool.max-active=8
    ## 连接池最大阻塞等待时间(使用负值表示没有限制)默认 -1
    spring.redis.lettuce.pool.max-wait=-1
    ## 连接池中的最大空闲连接 默认 8
    spring.redis.lett	uce.pool.max-idle=8
    ## 连接池中的最小空闲连接 默认 0
    spring.redis.lettuce.pool.min-idle=0

    3、操作redis API

    在这个单元测试中,我们使用 redisTemplate 存储了一个字符串 "Hello Redis" 。

    立即学习Java免费学习笔记(深入)”;

    Spring Data Redis 针对 api 进行了重新归类与封装,将同一类型的操作封装为 Operation 接口:

    专有操作 说明
    ValueOperations string 类型的数据操作
    ListOperations list 类型的数据操作
    SetOperations set 类型数据操作
    ZSetOperations zset 类型数据操作
    HashOperations map 类型的数据操作
    //解决中文乱码问题
    @Configuration
    public class RedisConfig {
        
        @Bean
        public RedisTemplate redisTemplateInit(RedisConnectionFactory redisConnectionFactory) {
    
            RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
    
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            //设置序列化Key的实例化对象
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            //设置序列化Value的实例化对象
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            /**
             *
             * 设置Hash类型存储时,对象序列化报错解决
             */
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            return redisTemplate;
        }
    }

    4、RedisTemplate 和 StringRedisTemplate

    RedisTemplate 看起来比 StringRedisTemplate 更『牛逼』一些,因为它不强求键和值的类型必须是 String 。

    但是很显然,这和 Redis 的实际情况是相违背的:在最小的存储单元层面,Redis 本质上只能存字符串,不可能存其它的类型。这么看来,StringRedisTemplate 更贴合 Redis 的存储本质。RedisTemplate是如何通过对值序列化来支持任何类型的呢?。

    而使用RedisTemplate 存储对象时会把对象的地址保存起来,以便反序列化,这样就大大浪费存储空间,解决这个问题使用StringRedisTemplate ,认为手动对对想序列化与反序化

     Users users = new Users();
     users.setId(2);
     users.setUsername("李四2");
     redisTemplate.opsForValue().set("user:2", JSON.toJSONString(users)); //存的时候序列化对象
     String u = redisTemplate.opsForValue().get("user:2");  //redis 只能返回字符串
     System.out.println("u="+ JSON.parseObject(u,Users.class));  //使用JSON工具反序化成对象

    springboot中没有引入spring-boot-starter-web依赖,需要加jackson 的依赖。

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

    5、SpringBoot操作String字符串

    a、键过期

    key的自动过期问题,Redis 在存入每一个数据的时候都可以设置一个超时间,过了这个时间就会自动删除数据。

    十天学会PHP教程
    十天学会PHP教程

    以前写了十天学会ASP,十天学会ASP.NET什么的,现在想想再写个PHP吧,也算比较全了。 PHP的调试方法我这里就不说了,外面很多文章都有介绍,也有很多不同的组合。我这里暂时是以 Apache web server 和 MY SQL 作为WEB服务器和数据库,在php-4.3.3下的环境做的程序。当然要简单的构建和访问查看数据库 PHPMYADMIN 不可少。

    下载

    常用的redis时间单位

    MINUTES:分钟

    SECONDS:秒

    DAYS: 天

    //给user对象设置10分钟过期时间
    redisTemplate.opsForValue().set("user:1", JSON.toJSONString(users),10,TimeUnit.MINUTES );
    b、删除数据
     //删除键
     redisTemplate.delete(key);
     //判断键是否存在
     boolean exists = redisTemplate.hasKey(key);

    6、SpringBoot操作Hash(哈希)

    一般我们存储一个键,很自然的就会使用 get/set 去存储,实际上这并不是很好的做法。Redis 存储一个 key 会有一个最小内存,不管你存的这个键多小,都不会低于这个内存,因此合理的使用 Hash 可以帮我们节省很多内存。

    	@Test
        public void testHash() {
            String key = "tom";
            HashOperations<String, Object, Object> operations = redisTemplate.opsForHash();
            operations.put(key, "name", "tom");
            operations.put(key, "age", "20");
            String value= (String) operations.get(key,"name");
            System.out.println(value);
        }

    根据上面测试用例发现,Hash set 的时候需要传入三个参数,第一个为 key,第二个为 field,第三个为存储的值。一般情况下 Key 代表一组数据,field 为 key 相关的属性,而 value 就是属性对应的值。

    7、SpringBoot操作List集合类型

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

    /**
         * 测试List
         * leftPush 将数据添加到key对应的现有数据的左边,也就是头部
         * leftPop  取队列最左边数据(从数据库移除)
         * rightPush 将数据添加到key对应的现有数据的右边,也就是尾部
         */
        @Test
        public void testList() {
            final String key = "list";
            ListOperations<String,Object> list = redisTemplate.opsForList();
            list.leftPush(key, "hello");
            list.leftPush(key, "world");
            list.leftPush(key, "goodbye");
          
            Object mete = list.leftPop("list");
            System.out.println("删除的元素是:"+mete); //删除 goodbye 
            String value = (String) list.leftPop(key);
    
            System.out.println(value.toString());
            
            // range(key, 0, 2) 从下标0开始找,找到2下标
            List<Object> values = list.range(key, 0, 2);
            for (Object v : values) {
                System.out.println("list range :" + v);
            }
        }
    }

    Redis List 的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis 内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

    8、SpringBoot操作Set集合类型

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

     /**
         * 测试Set
         */
        @Test
        public void testSet() {
            final String key = "set";
            SetOperations<String,Object> set = redisTemplate.opsForSet();
            set.add(key, "hello");
            set.add(key, "world");
            set.add(key, "world");
            set.add(key, "goodbye");
            Set<Object> values = set.members(key);
            for (Object v : values) {
                System.out.println("set value :" + v);
            }
           
            Boolean exist = set.isMember(key,"hello") //判断是否存在某个元素
            operations.move("set", "hello", "setcopy"); //把set集合中的hello元素放到setcopy 中
     
        }
    }

    9、SpringBoot操作ZSet集合类型

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

    	/**
         * 测试ZSet
         * range(key, 0, 3) 从开始下标到结束下标,score从小到大排序
         * reverseRange  score从大到小排序
         * rangeByScore(key, 0, 3); 返回Score在0至3之间的数据
         */
        @Test
        public void testZset() {
            final String key = "lz";
            ZSetOperations<String,Object> zset = redisTemplate.opsForZSet();
            zset.add(key, "hello", 1);
            zset.add(key, "world", 6);
            zset.add(key, "good", 4);
            zset.add(key, "bye", 3);
    
            Set<Object> zsets = zset.range(key, 0, 3);
            for (Object v : zsets) {
                System.out.println("zset-A value :"+v);
            }
            
            System.out.println("=======");
            Set<Object> zsetB = zset.rangeByScore(key, 0, 3);
            for (Object v : zsetB) {
                System.out.println("zset-B value :"+v);
            }
        }
    }

    相关文章

    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    spring框架介绍
    spring框架介绍

    本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

    156

    2025.08.06

    Java Spring Security 与认证授权
    Java Spring Security 与认证授权

    本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

    88

    2026.01.26

    spring boot框架优点
    spring boot框架优点

    spring boot框架的优点有简化配置、快速开发、内嵌服务器、微服务支持、自动化测试和生态系统支持。本专题为大家提供spring boot相关的文章、下载、课程内容,供大家免费下载体验。

    139

    2023.09.05

    spring框架有哪些
    spring框架有哪些

    spring框架有Spring Core、Spring MVC、Spring Data、Spring Security、Spring AOP和Spring Boot。详细介绍:1、Spring Core,通过将对象的创建和依赖关系的管理交给容器来实现,从而降低了组件之间的耦合度;2、Spring MVC,提供基于模型-视图-控制器的架构,用于开发灵活和可扩展的Web应用程序等。

    408

    2023.10.12

    Java Spring Boot开发
    Java Spring Boot开发

    本专题围绕 Java 主流开发框架 Spring Boot 展开,系统讲解依赖注入、配置管理、数据访问、RESTful API、微服务架构与安全认证等核心知识,并通过电商平台、博客系统与企业管理系统等项目实战,帮助学员掌握使用 Spring Boot 快速开发高效、稳定的企业级应用。

    73

    2025.08.19

    Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性
    Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性

    Spring Boot 是一个基于 Spring 框架的 Java 开发框架,它通过 约定优于配置的原则,大幅简化了 Spring 应用的初始搭建、配置和开发过程,让开发者可以快速构建独立的、生产级别的 Spring 应用,无需繁琐的样板配置,通常集成嵌入式服务器(如 Tomcat),提供“开箱即用”的体验,是构建微服务和 Web 应用的流行工具。

    147

    2025.12.22

    Java Spring Boot 微服务实战
    Java Spring Boot 微服务实战

    本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

    271

    2025.12.24

    Spring Boot企业级开发与MyBatis Plus实战
    Spring Boot企业级开发与MyBatis Plus实战

    本专题面向 Java 后端开发者,系统讲解如何基于 Spring Boot 与 MyBatis Plus 构建高效、规范的企业级应用。内容涵盖项目架构设计、数据访问层封装、通用 CRUD 实现、分页与条件查询、代码生成器以及常见性能优化方案。通过完整实战案例,帮助开发者提升后端开发效率,减少重复代码,快速交付稳定可维护的业务系统。

    32

    2026.02.11

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Kotlin 教程
    Kotlin 教程

    共23课时 | 4.3万人学习

    C# 教程
    C# 教程

    共94课时 | 11.1万人学习

    Java 教程
    Java 教程

    共578课时 | 80.6万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号