【SpringBoot13】SpringBoot中整合Redis实现热点数据缓存

2023-05-16

我们以IDEA + SpringBoot作为 Java中整合Redis的使用 的测试环境

  • 首先,我们需要导入Redis的maven依赖
<!-- Redis的maven依赖包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
  • 其次,我们需要在配置文件中配置你的Redis配置信息,我使用的是 .yml文件格式 
# redis配置
spring:
  redis:
    # r服务器地址
    host: 127.0.0.1
    # 服务器端口
    port: 6379
    # 数据库索引(默认0)
    database: 0
    # 连接超时时间(毫秒)
    timeout: 10s
    jedis:
      pool:
        # 连接池中的最大空闲连接数
        max-idle: 8
        # 连接池中的最小空闲连接数
        min-idle: 0
        # 连接池最大连接数(使用负值表示没有限制)
        max-active: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1
  • 对 redis 做自定义配置
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfigurer extends CachingConfigurerSupport {

    /**
     * redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        // 设置序列化
        Jackson2JsonRedisSerializer<Object> redisSerializer = getRedisSerializer();
        // key序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // value序列化
        redisTemplate.setValueSerializer(redisSerializer);
        // Hash key序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // Hash value序列化
        redisTemplate.setHashValueSerializer(redisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    /**
     * 设置Jackson序列化
     */
    private Jackson2JsonRedisSerializer<Object> getRedisSerializer() {
        Jackson2JsonRedisSerializer<Object> redisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
        redisSerializer.setObjectMapper(om);
        return redisSerializer;
    }
}
  • 然后,我们需要创建一个RedisUtil来对Redis数据库进行操作
package com.zyxx.test.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * @ClassName RedisUtil
 * @Author 
 * @Date 2019-08-03 17:29:29
 * @Version 1.0
 **/
@Component
public class RedisUtil {

    @Autowired
    private RedisTemplate<String, String> template;

    /**
     * 读取数据
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return template.opsForValue().get(key);
    }

    /**
     * 写入数据
     */
    public boolean set(final String key, String value) {
        boolean res = false;
        try {
            template.opsForValue().set(key, value);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 根据key更新数据
     */
    public boolean update(final String key, String value) {
        boolean res = false;
        try {
            template.opsForValue().getAndSet(key, value);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 根据key删除数据
     */
    public boolean del(final String key) {
        boolean res = false;
        try {
            template.delete(key);
            res = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
    
	/**
     * 是否存在key
     */
    public boolean hasKey(final String key) {
        boolean res = false;
        try {
            res = template.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

	/**
     * 给指定的key设置存活时间
     * 默认为-1,表示永久不失效
     */
    public boolean setExpire(final String key, long seconds) {
        boolean res = false;
        try {
            if (0 < seconds) {
                res = template.expire(key, seconds, TimeUnit.SECONDS);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

    /**
     * 获取指定key的剩余存活时间
     * 默认为-1,表示永久不失效,-2表示该key不存在
     */
    public long getExpire(final String key) {
        long res = 0;
        try {
            res = template.getExpire(key, TimeUnit.SECONDS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

	/**
     * 移除指定key的有效时间
     * 当key的有效时间为-1即永久不失效和当key不存在时返回false,否则返回true
     */
    public boolean persist(final String key) {
        boolean res = false;
        try {
            res = template.persist(key);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
    
}

  • 最后,我们可以使用单元测试来检测我们在RedisUtil中写的操作Redis数据库的方法
package com.zyxx.test;

import com.zyxx.test.utils.RedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;

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

    @Resource
    private RedisUtil redisUtil;

    @Test
    public void setRedis() {
        boolean res = redisUtil.set("jay", "周杰伦 - 《以父之名》");
        System.out.println(res);
    }

    @Test
    public void getRedis() {
        String res = redisUtil.get("jay");
        System.out.println(res);
    }


    @Test
    public void updateRedis() {
        boolean res = redisUtil.update("jay", "周杰伦 - 《夜的第七章》");
        System.out.println(res);
    }

    @Test
    public void delRedis() {
        boolean res = redisUtil.del("jay");
        System.out.println(res);
    }

	@Test
    public void hasKey() {
        boolean res = redisUtil.hasKey("jay");
        System.out.println(res);
    }

	@Test
    public void expire() {
        boolean res = redisUtil.setExpire("jay", 100);
        System.out.println(res);
    }

    @Test
    public void getExpire() {
        long res = redisUtil.getExpire("jay");
        System.out.println(res);
    }

	@Test
    public void persist() {
        boolean res = redisUtil.persist("jay");
        System.out.println(res);
    }
    
}

 

  • 推荐使用Redis客户端(redis-desktop-manager)来查看Redis数据库中的数据
  • 至此,我们在日常项目中整合Redis的基本使用操作就完成了,但在实际项目中,可能会涉及到更复杂的用法,可以根据你的业务需求调整Redis的使用即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SpringBoot13】SpringBoot中整合Redis实现热点数据缓存 的相关文章

  • SSO单点登录教程(二)单点登录流程分析

    一 简介 单点登录 xff08 Single Sign On xff09 xff0c 简称为 SSO xff0c 是目前比较流行的企业业务整合的解决方案之一 SSO的定义是在多个应用系统中 xff0c 用户只需要登录一次就可以访问所有相互信
  • 学习实践1]docker中安装gitLab,gitLab报错502,初始密码设置

    1 安装启动Docker 1 1 安装docker 1 2 3 4 5 6 7 8 9 10 1 yum包更新 yum update 2 安装需要的软件包 xff0c yum util 提供yum config manager功能 xff0
  • DSO(5)——零空间的计算与推导

    写在前面 这部分的代码着实很难 xff0c 一方面论文中几乎没有提这个事情 xff0c 另一方面这部分的参考资料也确实是比较少 xff0c 网上能搜索到的基本都是讨论FEJ对零空间的保持问题 xff0c 所以笔者在看这一部分的时候 xff0
  • Cartographer ROS安装记录

    Reference https google cartographer ros readthedocs io en latest compilation html building installationhttps github com
  • PyCharm无法引用matplotlib的问题解决方案

    序 笔者今天用PyCharm安装了一些数据分析的时候比较有用的模块 xff0c 系统是ubuntu xff0c 说实话 xff0c ubuntu xff08 linux xff09 在这方面还真是很方便 xff0c 几条语句就把这几个模块下
  • ubuntu下安装CLion并激活,亲测好用

    写在前面 最近因为重新装了虚拟机 xff0c 各种软件都重装了一遍 xff0c 恨下心都使用了最新的版本 xff0c 但是有一个很严重的弊端就是资料少啊 xff1a 本帖就是在ubuntu14 04下的Clion 2017 3 2的安装 x
  • ROS与GAZEBO实时硬件仿真(3)——将gazebo和ros连接起来

    写在前面 通过上两节的博客 xff0c 相信朋友们已经对gazebo的一些标签有了较为深入的认识 xff0c 但是特别是上一节 xff0c 程序写完了之后发现并没有什么特别的变化 着实 xff0c 到目前为止 xff0c 我们只是很执拗的在
  • VSCode使用Remote VSCode插件进行远端文件同步

    写在前面 最近在云端申请了服务器进行DL训练 xff0c 使用ssh的方式进行远端的登陆 xff0c 但是两端的代码同步是一个比较大的问题 xff0c 当然 xff0c 最笨的方法可以双端走git的方式进行 xff0c 但是其实这样也好麻烦
  • lin通信过程的理解

    uart接收和发送消息时 xff0c 都会产生中断 xff0c 即产生中断信号 xff0c 运行一次中断服务函数 中断函数中根据寄存器的标志位 xff0c 首先判断是否收到头部报文 xff0c 再 根据PID判断是lin传送还是lin接受
  • ESKF(error-state Kalman Filter)总结

    写在前面 前段时间看了一下ESKF的相关知识 xff0c VIO中 xff08 VINS xff09 用的还是挺多的 xff0c 特此总结 先验知识 四元数 四元数的基本表示形式 xff0c 这个还是蛮重要的 xff0c 主要有以下几种表示
  • AI-IMU Dead-Reckoning论文总结

    AI IMU Dead Reckoning Martin 论文出处 论文 xff1a https arxiv org abs 1904 06064 代码 xff1a https github com mbrossar ai imu dr 整
  • Unity VR游戏开发干货教程:优化VR体验

    简介 对于VR应用来说 xff0c 如果想要让用户获得好的用户体验 xff0c 特别是免除恶心眩晕的困扰 xff0c 在VR开发中进行优化是必不可少的 xff0c 惟其如此才能达到我们期望的游戏运行帧速 和其它平台上的开发不同 xff0c
  • kali-linux docker桌面版部署

    Dockerfile 构建镜像参考 kali desktop kali docker 桌面版Dockerfile 部署方式 docker run privileged name kali desktop p 5901 5901 p 6080
  • C语言isalpha函数介绍、示例和实现

    文章目录 1 包含头文件2 函数声明3 功能说明4 示例5 自定义的isalpha函数的实现方法6 获取视频教程7 版权声明 isalpha函数用于判断字符是否为字母 xff08 a z和A Z xff09 在本文中 xff0c 我们先来介
  • C语言isalnum函数介绍、示例和实现

    文章目录 1 包含头文件2 函数声明3 功能说明4 示例5 自定义的isalnum函数的实现方法6 获取视频教程7 版权声明 C语言isalnum函数用于判断字符是否为字母 xff08 a z和A Z xff09 或数字 xff08 0 9
  • 企业对C/C++程序员的技能要求

    一个人应该具备对事物的思考能力 xff0c 否则容易被忽悠 对大部分未入门或刚入门的菜鸟来说 xff0c 很难搞明白C语言能做什么和C程序员在做什么这两个问题 如果你打算种菜 xff0c 必须先了解行情 xff08 包括销量和价钱 xff0
  • HBase详解(对hbase集群搭建、读写流程、hbase的javaApi等细致入微的讲解与保姆级的图解)

    学HBase的意义是什么 我本想用MySQL来与HBase作比较 xff0c 但发现他们两者毫无可比性 xff0c 因为两者运用领域不同 xff0c 各自有各自的优点 xff0c 就好比爬山穿登山鞋 xff0c 潜水穿脚蹼一般 一门技术的兴
  • 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2” 原因

    使用VS2012版本引用外部的lib进行编译时候提示 xff1a 1 gt libprotobuf lib common obj error LNK2038 检测到 ITERATOR DEBUG LEVEL 的不匹配项 值 0 不匹配值 2
  • 写给大侄女

    老姑从你上高中开始 xff0c 就想写点东西给大侄女看 xff0c 不过老姑理科出身 xff0c 文笔比较差 不知道该不该提你在学校看手机的事情 xff0c 老姑没有责备你的意思 xff0c 只是和你探讨一下 xff0c 毕竟谁没有年轻的时
  • centos安装lspci工具

    背景 由于centos6 3迷你安装版上没有带lspci工具 在定制内核时 无法用此工具查询硬件相关信息 具体步骤如下 1 下载 pci包 xff1a http www kernel org pub software utils pciut

随机推荐

  • 软件性能测试方法论

    软件性能测试过程详解与案例分析 xff08 段念 编著 xff09 学习笔记三 1 SEI负载测试计划过程 SEI load Testing Planning Process是一个关注于负载测试计划的方法 xff0c 其目标是产生 清晰 易
  • 2011年总结&2012年展望

    再有几天就2012了 xff0c 工作三年多了 xff0c 之前也没写过总结 xff0c 感觉总结这东西写写也挺好的 xff0c 可以思考下过去和未来 xff0c 留个底 xff0c 可以作为日后的对比 xff1b 总结我的2011年 xf
  • Linux查看端口使用状态、关闭端口方法

    前提 xff1a 首先你必须知道 xff0c 端口不是独立存在的 xff0c 它是依附于进程的 某个进程开启 xff0c 那么它对应的端口就开启了 xff0c 进程关闭 xff0c 则该端口也就关闭了 下次若某个进程再次开启 xff0c 则
  • 查找列表中某个值的位置(python)

    p 61 list index value list为列表的名字 value为查找的值 p为value在list的位置 以下内容引自 xff1a http www linuxidc com Linux 2012 01 51638 htm P
  • python 等待一定时间后继续执行其后的程序

    简单示例 xff1a import time print 39 11 39 time sleep 10 print 39 22 39 先打印11 xff0c 等待10秒后 xff0c 打印22
  • Linux下用于查看系统当前登录用户信息的4种方法

    作为系统管理员 xff0c 你可能经常会 xff08 在某个时候 xff09 需要查看系统中有哪些用户正在活动 有些时候 xff0c 你甚至需要知道他 xff08 她 xff09 们正在做什么 本文为我们总结了4种查看系统用户信息 xff0
  • TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义

    TCP SYN ACK FIN RST PSH URG简析 三次握手Three way Handshake 一个虚拟连接的建立是通过三次握手来实现的 1 B gt SYN gt A 假如服务器A和客户机B通讯 当A要和B通信时 xff0c
  • [转载]一次 JMeter 脚本请求错误 HTTP Status 415 的解决笔记

    录制好脚本以后 xff0c 使用 JMeter 打开 xff0c 直接运行测试 xff0c 发现有个 Ajax 提交表单的时候出错了 服务器返回信息如下 xff1a HTTP Status 415 type Status report me
  • python list转换字符串报错TypeError: sequence item 0: expected str instance, int found

    今天敲小例子 xff0c 报了错TypeError sequence item 0 expected str instance int found 小例子 xff1a list1 61 1 39 two 39 39 three 39 4 p
  • Linux下使用 xrandr 命令设置屏幕分辨率

    最近在Linux下修改屏幕分辨率的时候 xff0c 发现了一个非常有用的命令 xff1a xrandr 使用这个命令 xff0c 可以方便的设置您显示器的的分辨率 尤其是当你使用了一些需要或者会自动改动您屏幕分辨率的程序以后 您可以使用如下
  • windows7触屏编程

    每当用户触摸触敏式 Windows 7 设备时 xff0c Windows 7 多点触控平台都会向您的应用程序发送手势消息 WM GESTURE 这是现成的免费行为 xff0c 如果您希望停止接收此类消息 xff0c 则需要选择退出 手势被
  • 工业级串口Modbus数据绘制曲线及上位机监控软件DotTrend

    工业级串口Modbus数据绘制曲线及上位机监控软件DotTrend 1 软件概述 DotTrend是一款全新设计开发的软件 xff08 原创 xff09 xff0c 理论上可用于监控所有遵守Modbus标准协议的设备 xff0c 便于开发
  • 串口设备模拟器DevSimulate

    万能串口设备模拟器 DevSimulate xff08 支持Modbus及自定义协议 xff09 DevSimulate是一款可以在电脑上模拟一个或多个从设备的串口工具软件 xff0c 并且可以通过设计数学公式对任意点位进行逻辑关系的自定义
  • 工业级串口Modbus曲线记录监控工具——DotTrend

    工业级串口Modbus数据曲线记录监控工具 DotTrend 1 软件版本更新 自Modbus点位数据监控曲线DotTrend推出以来 xff0c 极大方便了工程技术人员的日常研发与测试工作 xff0c 广泛受到了社会同行的一致好评 xff
  • DotTrend使用说明手册

    DotTrend使用说明手册 1 DotTrend建立通信与绘制曲线2 工程打开与保存3 历史曲线保存与打开4 曲线导出excel文件 传统的串口工具大多只能查看16进制的通信数据 xff0c 想看十进制恐怕要自己算了 xff1b 即使有的
  • Modbus串口设备模拟器-DevSimulate(Slave+自定义逻辑)

    串口Modbus设备模拟器 DevSimulate DevSimulate是一款可以在电脑上模拟一个或多个从设备的串口工具软件 xff0c 并且可以通过设计数学公式对任意点位进行逻辑关系的自定义 即实现Slave 43 用户自定义逻辑功能
  • 串口Modbus从设备模拟器-DevSimulate

    1 项目场景 xff1a 例如 xff1a 项目场景 xff1a 兹有西门子PLC控制器一台 xff0c 需要控制四方变频器VFD xff0c 来带动三相交流电机作加速 xff08 频率递增 xff09 xff0c 保持 xff08 频率保
  • 解直线方程小软件

    解直线方程软件 软件说明 自己写的一个求解直线方程的小软件 xff0c 例如知道两点的xy坐标 xff0c 可以求得该直线的k值 xff0c b值 给点任意一点的x坐标 xff0c 可以求得该点的y坐标 反过来也可以求已知直线上的任意一点
  • ROS学习笔记(一):在ROS中使用USB网络摄像头传输图像

    在现实中 xff0c 我们一般是使用摄像头来获取图像 xff0c 这次要实现在ROS中使用摄像头传输图像 xff0c 我使用的是usb网络摄像头 xff08 不需要驱动 xff0c 我使用的是不需要驱动的usb摄像头 xff09 xff0c
  • 【SpringBoot13】SpringBoot中整合Redis实现热点数据缓存

    我们以IDEA 43 SpringBoot作为 Java中整合Redis的使用 的测试环境 首先 xff0c 我们需要导入Redis的maven依赖 lt Redis的maven依赖包 gt lt dependency gt lt grou