spring boot学习第七篇:通过spring boot使用redis

news2024/11/28 14:41:46

1、pom.xml文件里面增加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、yml文件增加如下配置:

  redis:
    host: localhost
    port: 6379
    password: heming
    database: 10

配置结构如下图所示: 

3、新增RedisConfiguration.java类


import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        //创建Template
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        //设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        //key和hashKey采用string序列化方式
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setHashKeySerializer(RedisSerializer.string());
        //value和hashValue采用Json序列化方式
        redisTemplate.setValueSerializer(jsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jsonRedisSerializer);
        return redisTemplate;
    }

}

 4、新增RedisTestController.java类


import com.hmblogs.backend.entity.Girl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

@RestController
@Slf4j
public class RedisTestController {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTest")
    public void getGirlList(){
        log.info("bbbbb");
        redisTemplate.opsForValue().set("name","小明"); // 设置k v
        String city = (String) redisTemplate.opsForValue().get("name"); // 拿到key为name的值
        log.info(city);
    }

    /**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestJson")
    public void redisTestJson(){
        log.info("ccccc");
        Girl girlData = new Girl();
        girlData.setId(1);
        girlData.setCupSize("xxxx");
        girlData.setAge(12);
        redisTemplate.opsForValue().set("user:100",girlData);
        Girl girl = (Girl) redisTemplate.opsForValue().get("user:100");
        log.info(girl.toString());
    }
}

4、验证

浏览器直接访问GET接口

http://localhost:8081/redisTest

然后查看数据

发现没有乱码。

访问GET接口http://localhost:8081/redisTestJson 

 查看redis数据,如下图所示:

5、操作哈希类型数据 

/**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestHash")
    public void redisTestHash(){
        log.info("ddddd");
        HashOperations hashOperations = redisTemplate.opsForHash();

        hashOperations.put("100","name","tom"); // 设置k为100,哈希k为name v为100
        hashOperations.put("100","age","20");

        String name = (String) hashOperations.get("100", "name"); // 获取k为100,hashk为name的v
        log.info(name);

        Set keys = hashOperations.keys("100"); // 获取k为100的集合k
        log.info(keys.toString());

        List values = hashOperations.values("100"); // 获取k为100的集合v
        log.info(values.toString());

        hashOperations.delete("100","age"); // 删除age字段
    }

访问http://localhost:8081/redisTestHash

 查看数据

6、操作列表类型数据 

/**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestList")
    public void redisTestList(){
        log.info("eeeee");
        //lpush lrange rpop llen
        ListOperations listOperations = redisTemplate.opsForList();

        listOperations.leftPushAll("mylist","a","b","c"); // 往k为mylist插入a,b,c
        log.info(listOperations.range("mylist", 0, -1).toString());

        listOperations.leftPush("mylist","d"); // 插入d
        List mylist = listOperations.range("mylist", 0, -1);
        log.info(mylist.toString()); // 输出

        listOperations.rightPop("mylist"); // 删除

        Long size = listOperations.size("mylist");
        log.info(size.toString());
        log.info(listOperations.range("mylist", 0, -1).toString());
    }

访问如下接口:http://localhost:8081/redisTestList

服务端console打印如下:

rpop的时候,移除了最先放入的a,规则就是先进先出。 

数据如下图所示:

7、操作集合类型数据

/**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestSet")
    public void redisTestSet(){
        log.info("fffff");
        //sadd smembers scard sinter sunion srem
        SetOperations setOperations = redisTemplate.opsForSet();

        setOperations.add("set1","a","b","c","d"); // 往set1 插入abcd
        setOperations.add("set2","a","b","x","y"); // 往set2 插入abxy

        Set members1 = setOperations.members("set1");
        log.info("set1:"+members1); // 输出

        Long size = setOperations.size("set1");
        log.info(size.toString()); // 输出

        Set members2 = setOperations.members("set2");
        log.info("set2:"+members2); // 输出

        Set intersect = setOperations.intersect("set1", "set2"); // 他们的交集
        log.info("inter:"+intersect);

        Set union = setOperations.union("set1", "set2");// 他们的并集
        log.info("union:"+union);

        setOperations.remove("set1","a","b"); // 在set1里面删除ab
    }

 查看服务端的console打印如下:

查看set1的数据,如下图所示:

查看set2的数据,如下图所示:

 

 8、操作有序集合类型数据

/**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestZSet")
    public void redisTestZSet(){
        log.info("ggggg");
        //zadd zrange zincrby zrem
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        zSetOperations.add("zset1","a",10); // 设置k为zset1v为a,分数为10
        zSetOperations.add("zset1","b",12); //同理
        zSetOperations.add("zset1","c",9); // 同理
        Set zset1 = zSetOperations.range("zset1", 0, -1);
        log.info(zset1.toString()); // 输出

        zSetOperations.incrementScore("zset1","c",10); // 为k为zset1v为c的加10分
        Set zsetAfter = zSetOperations.range("zset1", 0, -1);
        log.info(zsetAfter.toString()); // 输出

        zSetOperations.remove("zset1","a","b"); // 删除ab
        Set zsetDel = zSetOperations.range("zset1", 0, -1);
        log.info(zsetDel.toString()); // 输出

    }

查看console打印如下:

查看数据,如下图所示:

 9、通用命令操作

/**
     * redis test
     * @return
     */
    @GetMapping(value = "/redisTestCommon")
    public void redisTestCommon(){
        log.info("hhhhh");
        //keys exists type del
        Set keys = redisTemplate.keys("*"); // 查找所有符合给定模式( pattern)的 key
        log.info(keys.toString());

        Boolean name = redisTemplate.hasKey("name");
        log.info(name.toString());
        Boolean set1 = redisTemplate.hasKey("set1");
        log.info(set1.toString());

        for (Object key : keys) {
            DataType type = redisTemplate.type(key); // 查找他们的类型是什么
            log.info(type.name());
        }

        redisTemplate.delete("mylist"); // 删除mylist
        log.info("删除后:");
        for (Object key : keys) {
            DataType type = redisTemplate.type(key); // 查找他们的类型是什么
            log.info(type.name());
        }
    }

查看console打印如下内容:

mylist被删掉了,截图如下:

 10、小结:

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

ValueOperations:string数据操作

SetOperations:set类型数据操作

ZSetOperations:zset类型数据操作

HashOperations:hash类型的数据操作

ListOperations:list类型的数据操作
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest -- 进阶使用详解

pytest-html⽣成报告 Pytest-HTML 是⼀个插件&#xff0c;它可以⽣成漂亮且易于阅读的 HTML 测试报告。 pytest-html ⽣成报告的步骤 ① 安装 pytest-html 插件&#xff1a; pip install pytest-html ② 运⾏测试并⽣成报告&#xff1a; file name:main.pyimport pytest&qu…

自动驾驶3.0时代,大模型将重塑竞争格局,谁将笑到最后?

“毫末DriveGPT发布200天左右的时间&#xff0c;已经完成了亿级公里量产驾驶数据训练&#xff0c;累积高达480万段Clips的高质量测试。” 在2023&#xff08;第七届&#xff09;高工智能汽车年会上&#xff0c;毫末智行上海研发中心负责人孙宣峰在发表《自动驾驶 3.0 时代&…

NAS入门(学习笔记)

文章目录 AutoMLNAS初期NAS当前NAS框架One-Shot NAS权重共享策略 Zero-Shot NASZen-NASNASWOTEPENAS 参考资料 AutoML 深度学习使特征学习自动化 AutoML 使深度学习自动化 自动化机器学习 (automated machine learning) 是一种自动化的数据驱动方法, 并做出一系列决策。 按…

Flutter 综述

Flutter 综述 1 介绍1.1 概述1.2 重要节点1.3 移动开发中三种跨平台框架技术对比1.4 flutter 技术栈1.5 IDE1.6 Dart 语言1.7 应用1.8 框架 2 Flutter的主要组成部分3 资料书籍 《Flutter实战第二版》Dart 语言官网Flutter中文开发者社区flutter 官网 4 搭建Flutter开发环境参考…

如何提高匹配的速度

基于形状的匹配&#xff0c;改进了无数次&#xff0c;其实已经很满意了。 想起刚入门机器视觉那会儿&#xff0c;我们写的代码&#xff0c;无论c还是c#的&#xff0c;都是调用人家的函数&#xff0c;从来没想过&#xff0c;自己有一天把这些函数代替了。 那时候调用evision的…

GaussDB技术解读系列:5分钟带您了解DRS录制回放

一、什么是DRS录制回放&#xff1f; DRS录制回放是将源数据库发生的真实业务流量&#xff0c;在目标数据库模拟执行&#xff0c;从而观察和检验目标数据库的功能和性能表现。录制回放主要分为录制、回放两个阶段&#xff0c;录制过程是从源数据库上将所需时间段内的全部SQL原语…

3、深入解析Redis Cluster集群运维与核心原理

在今天的大规模分布式系统中&#xff0c;Redis Cluster已经成为了许多企业选择的分布式缓存方案之一。了解Redis Cluster的运维及核心原理对于确保系统的高可用性和性能至关重要。本文将深入探讨Redis Cluster集群的运维细节和核心原理&#xff0c;以帮助读者更好地理解和优化R…

rabbitmq基础教程(ui,java,springamqp)

概述&#xff1a;安装看我上篇文章Docker安装rabbitmq-CSDN博客 任务一 创建一个队列 这样创建两个队列 在amq.fanout交换机里面发送数据 模拟发送数据 发送消息&#xff0c;发现一下信息&#xff1a; 所以得出理论&#xff0c;消息发送是先到交换机&#xff0c;然后由交换机…

软件开发架构

【 一 】软件开发架构图 【 1】ATM和选课系统 三层的开发架构 前段展示台 后端逻辑层 数据处理层 【二】软件开发架构的步骤流程 需求分析&#xff1a;在软件开发架构设计之前&#xff0c;需要对应用系统进行需求分析&#xff0c;明确用户需求、功能模块、业务流程等内容。…

Java可视化物联网智慧工地综合云平台源码 私有化部署

智慧工地平台围绕建筑施工人、物、事的安全管理为核心&#xff0c;对应研发了劳务实名制、视频监控、扬尘监测、起重机械安全监测、安全帽监测等功能一体化管理的解决方案。 智慧工地是聚焦工程施工现场&#xff0c;紧紧围绕人、机、料、法、环等关键要素&#xff0c;综合运用…

MongoDB调优

三大导致 MongoDB 性能不佳的原因 1&#xff09;慢查询2&#xff09;阻塞等待3&#xff09;硬件资源不足1,2通常是因为模型/索引设计不佳导致的。排查思路&#xff1a;按1-2-3依次排查。 影响 MongoDB 性能的因素 MongoDB 性能监控工具 Free Monitoring 从版本 4.0 开始&am…

Template Engine-06-模板引擎 Handlebars 入门介绍

拓展阅读 java 表达式引擎 logstash 日志加工处理-08-表达式执行引擎 AviatorScriptMVELOGNLSpELJEXLJUELJanino QLExpress 阿里表达式引擎系统学习 什么是 Handlebars&#xff1f; Handlebars 是一种简单的模板语言。 它使用模板和输入对象生成 HTML 或其他文本格式。Ha…

C Primer Plus 第6版 编程练习 chapter 15

文章目录 1. 第1题1.1 题目描述1.2 编程源码1.3 结果显示 2. 第2题2.1 题目描述2.2 编程源码2.3 结果显示 3. 第3题3.1 题目描述3.2 编程源码3.3 结果显示 4. 第4题4.1 题目描述4.2 编程源码4.3 结果显示 5. 第5题5.1 题目描述5.2 编程源码5.3 结果显示 6. 第6题6.1 题目描述6.…

使用easyexcel 导出多级表头demo

先看效果&#xff1a; 1、引入maven依赖 <!--EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version> </dependency> 2、实体类 package com.…

c语言 编译与链接

编译与链接 翻译环境和执行环境翻译环境1.1预编译1.2编译1.3汇编&#xff08;ASM&#xff09;2.链接 执行环境最后给大家附上一张关于本节知识内容的图供大家更好理解~ ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/522d488885ba44d99aa504d6b21c88d5.png) &…

yolov8+deepsort的代码实现

按照官方描述&#xff0c;YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数&#xff0c;可以…

Python新手常见问题——列表中删不掉的0

1.测试代码 运行代码 nums1 [1,2,3,0,0,0] print(type(nums1))for i in nums1:if i 0:nums1.remove(i) print(nums1)效果如下 2.疑问&#xff1a; 上面代码&#xff0c;为什么把nums1里面的0移除不干净 3.原因&#xff1a; 在 Python 中&#xff0c;不建议在循环中直接…

蒙特卡洛概率抽样简介

蒙特卡罗方法是一类对概率分布进行随机抽样的技术。 在许多问题领域中&#xff0c;描述或估计概率分布相对简单&#xff0c;但计算所需的数量却很棘手。这可能是由于多种原因造成的&#xff0c;例如domain的随机性质或随机变量的指数级数量增长。 相反&#xff0c;可以通过使…

学校智慧能源消耗管理系统,破解学校节能降耗难题

随着碳达峰、碳中和工作的主要任务&#xff0c;学校作为能源集中地&#xff0c;且能源情况较为复杂的建筑&#xff0c;有效降低能源消耗、减少能源使用成本&#xff0c;已经成为学校一项紧迫的任务。 学校能耗痛点有哪些&#xff1f; 1、规模大 学校是集教学、科研、生活于一…

zabbix客户端配置及自定义监控

部署zabbix客户机 1.服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate -u ntp.aliyun.com 2.服务端和客户端都设置 hosts 解析 cat > /etc/hosts << EOF 172.16.23.16 localhost 172.16.23.17 zbx-server EOF 3.被监控端 //设置 zabbix 的下载源&…