RedisTemplate序列化

SpringBoot整合Redis,配置RedisTemplate序列化。如果使用StringRedisTemplate,那么不需要配置序列化,但是StringRedisTemplate只能存储简单的String类型数据,如图:


如果使用StringRedisTemplate存储一个常规对象,只能转换成JSON字符串存储,取出后再把JSON字符串转成需要的对象,比较麻烦,所以一般使用RedisTemplate。

一、RedisTemplate配置使用

使用RedisTemplate之前一般需要配置序列化方式,这里以单节点Redis为例:

1、添加maven依赖

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


2、添加配置

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.StringRedisSerializer;

/**
 * Redis配置
 */
@Slf4j
@Configuration
public class RedisConfig {

    /**
     * 实例化 RedisTemplate 对象
     * 设置序列化方式
     * 默认序列化为:JdkSerializationRedisSerializer
     * JdkSerializationRedisSerializer       占用空间小,序列化速度慢,客户端可读性差
     * GenericJackson2JsonRedisSerializer    占用空间大,序列化速度快,客户端可读性好
     *
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        log.info("redisTemplate init. serializer=GenericJackson2JsonRedisSerializer");
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 设置 key 的序列化器 StringRedisSerializer
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        // 设置 value 的序列化器 GenericJackson2JsonRedisSerializer
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setConnectionFactory(factory);
        return redisTemplate;
    }


3、使用
 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;

/**
 * Redis常用方法
 */
@Component
public class RedisCache {

    /**
     * 1分钟,单位:秒
     */
    private static final long ONE_MINUTE = 60;

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 存储
     * @param key   唯一键
     * @param value     值
     * @param expireTime    过期时间,单位:秒
     * @param <T>
     */
    public <T> void set(String key, T value, long expireTime) {
        redisTemplate.opsForValue().set(key, value, expireTime, TimeUnit.SECONDS);
    }

    /**
     * 查询
     * @param key   唯一键
     * @param <T>
     * @return
     */
    public <T> T get(String key) {
        return (T) redisTemplate.opsForValue().get(key);
    }

4.总结

RedisTemplate默认使用的是JDK 序列化方式(JdkSerializationRedisSerializer) ,这种序列化方式可以不用在配置类里配置,默认即可,这种不推荐使用,这种方式对应客户端来说可读性差,不利于人工排查问题。

所以一般用JSON序列化,JSON序列化方式又有两种,GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializer,GenericJackson2JsonRedisSerializer配置更简单方便些。

对比一下JDK 序列化和JSON序列化的可读性,如图:

JDK 序列化:

JSON序列化:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python实现Ethernet/IP协议的客户端(三)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议&#xff0c;它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一&#xff0c;Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端&#xff0c;可…

灸哥问答:软件架构在软件研发中的作用

软件架构在软件开发中扮演着至关重要的角色。我们在软件研发的过程中&#xff0c;类比于建造一座公寓楼&#xff0c;而软件架构就像是盖楼之前的设计图纸&#xff0c;如果没有设计图纸就直接盖楼&#xff0c;可想而知带来的后果是什么。我对软件架构的作用表现总结如下&#xf…

Go语言TCP Socket编程

:::tip 声明 本文源于Go语言TCP Socket编程 | Tony Bai&#xff0c;可能会有稍微的修改。 ::: 文章目录 一、模型二、TCP连接的建立对于客户端而言&#xff0c;连接的建立会遇到如下几种情形&#xff1a;1、网络不可达或对方服务未启动2、对方服务的listen backlog满3、网络延…

【重磅新品】小眼睛科技推出紫光同创盘古系列FPGA开发板套件,盘古200K开发板,紫光同创PG2L200H,Logos2系列

FPGA&#xff0c;即现场可编程门阵列&#xff0c;作为可重构电路芯片&#xff0c;已经成为行业“万能芯片”&#xff0c;在通信系统、数字信息处理、视频图像处理、高速接口设计等方面都有不俗的表现。近几年&#xff0c;随着国家战略支持和产业发展&#xff0c;国产FPGA迎来迅…

PyTorch官网demo解读——第一个神经网络(4)

上一篇&#xff1a;PyTorch官网demo解读——第一个神经网络&#xff08;3&#xff09;-CSDN博客 上一篇我们聊了手写数字识别神经网络的损失函数和梯度下降算法&#xff0c;这一篇我们来聊聊激活函数。 大佬说激活函数的作用是让神经网络产生非线性&#xff0c;类似人脑神经元…

Python算法例33 删除数字

1. 问题描述 给出一个字符串A&#xff0c;表示一个n位的正整数&#xff0c;删除其中k位数字&#xff0c;使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数&#xff0c;本例将找到删除k个数字之后的最小正整数&#xff0c;其中n≤240&#xff0c;k≤n。 2. 问题示例 …

HarmonyOS4.0系统性深入开发10卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口…

性能优化(CPU优化技术)-ARM Neon详细介绍

本文主要介绍ARM Neon技术&#xff0c;包括SIMD技术、SIMT、ARM Neon的指令、寄存器、意图为读者提供对ARM Neon的一个整体理解。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09…

IRQ Handler 的使用——以USART串口接收中断分别在标准库与HAL库版本下的举例

前言&#xff1a; 1.中断系统及EXTI外部中断知识点见我的博文&#xff1a; 9.中断系统、EXTI外部中断_eirq-CSDN博客文章浏览阅读301次&#xff0c;点赞7次&#xff0c;收藏6次。EXTI&#xff08;Extern Interrupt&#xff09;外部中断EXTI可以监测指定GPIO口的电平信号&…

关于镜头景深的计算

1、问题背景 在调试项目的过程中&#xff0c;我们需要知道所搭配镜头的对焦距离、景深范围是多少&#xff0c; 这属于基本的项目信息&#xff0c;很多时候往往就因为忽略了这些小的信息&#xff0c;而导致一系列问题。 比如之前调试的一款化妆镜的设备&#xff0c;客户反馈了…

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户&#xff0c;以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能&#xff1a; 房源发布&#xff1a;房地产代理网…

git解决冲突场景

文章目录 git解决冲突场景 git解决冲突场景 假设我们在公司开发了一个功能修改了一个文件 我们现在模拟修改文件之后提交一个版本到本地&#xff0c;但是不上传到远程仓库 假设我们现在回到家开发代码&#xff0c;需要拉去最新的代码 提示已经更新。根本没有最新的代码改动&am…

Android Studio 如何申请免费的api接口之聚合数据--建议收藏备用!

目录 前言 一、申请接口 二、使用接口 三、总结 四、更多资源 前言 在开发应用程序过程中&#xff0c;获取免费的 API 接口和数据源是非常重要的。它们可以为你的应用程序提供各种功能和数据&#xff0c;使其更加实用和丰富。本文将介绍如何申请免费的 API 接口以及一些建…

【图像拼接】源码精读:Seam-guided local alignment and stitching for large parallax images

第一次来请先看这篇文章&#xff1a;【图像拼接&#xff08;Image Stitching&#xff09;】关于【图像拼接论文源码精读】专栏的相关说明&#xff0c;包含专栏内文章结构说明、源码阅读顺序、培养代码能力、如何创新等&#xff08;不定期更新&#xff09; 【图像拼接论文源码精…

Vue3全局属性app.config.globalProperties

文章目录 一、概念二、实践2.1、定义2.2、使用 三、最后 一、概念 一个用于注册能够被应用内所有组件实例访问到的全局属性的对象。点击【前往】访问官网 二、实践 2.1、定义 在main.ts文件中设置app.config.globalPropertie import {createApp} from vue import ElementPl…

BLP模型

本篇文章是调研了许多资料后对 BLP 模型的一个总结 首发公号&#xff1a;Rand_cs MLS&#xff0c;Multi-level Security&#xff0c;主要关心的是数据机密性 D. Elliott Bell 和 Leonard J. LaPadula 在 1996 年提出了基本的 BLP 模型&#xff0c;主要有两个性质&#xff1a;…

【Spring实战】16 Profile

文章目录 1. 定义2. 使用2.1 定义 Profile2.2 激活 Profile 3. 演示3.1 properties文件3.2 打印日志3.3 启动服务&验证3.4 修改 active3.5 重启服务&验证 4. 应用场景4.1 数据库配置4.2 日志配置 5. 代码详细总结 Spring 框架提供了一种强大的机制&#xff0c;允许在不…

Github 2024-01-01 开源项目月报 Top20

根据Github Trendings的统计&#xff0c;本月(2024-01-01统计)共有20个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5TypeScript项目3JavaScript项目3非开发语言项目2Java项目2HTML项目2Jupyter Notebook项目2PHP项目…

Linux系统驱动要如何学习

1.你将获得&#xff1a; 快速上手 Linux 操作系统&#xff1b; 掌握Linux 内核工作原理&#xff1b; 掌握Linux 内核调试手段&#xff1b; 掌握复杂驱动&#xff1a;USB、PCIE、V4L2等 这门课程旨在为你打开Linux内核驱动的大门&#xff0c;让你在探索Linux内核的旅程中获得前…

【STM32F103】SysTick系统定时器延时函数

SysTick SysTick是Cortex-M3内核中的一个外设&#xff0c;内嵌在NVIC中&#xff0c;叫系统定时器。 当处理器在调试期间被喊停时&#xff0c;SysTick也将暂停运作。 一共有四个寄存器&#xff0c;不过我们通常用前三个&#xff0c;不需要校准。下图出自《STM32F10xxx Cortex…