首页 > 数据库 >RedisTemplate 泛型不同 指向的是同一个实例吗

RedisTemplate 泛型不同 指向的是同一个实例吗

时间:2023-07-20 19:06:58浏览次数:34  
标签:Redis 实例 template 泛型 new RedisTemplate

RedisTemplate 泛型不同 指向的是同一个实例吗

在使用 RedisTemplate 时,我们经常会遇到需要指定不同数据类型的情况。比如,我们可能需要将某个对象存储到 Redis 中,并且需要使用不同的数据类型进行序列化和反序列化。那么,RedisTemplate 在这种情况下会创建多个实例吗?本文将解答这个问题,并提供相关的代码示例。

RedisTemplate 简介

RedisTemplate 是 Spring Data Redis 提供的一个用于操作 Redis 的核心类。它封装了 Redis 的常见操作,包括存储、检索、删除等,使得我们可以方便地与 Redis 进行交互。RedisTemplate 是一个泛型类,它的类型参数决定了存储到 Redis 中的数据的类型。

RedisTemplate 泛型示例

我们可以通过以下方式创建一个 RedisTemplate 实例,并指定其泛型类型为 String 和 Object:

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

在上述代码中,我们创建了一个 RedisTemplate 实例,并将其泛型类型设置为 String 和 Object。这意味着我们可以使用该 RedisTemplate 实例来存储任意类型的对象到 Redis 中。

RedisTemplate 泛型不同的实例

当我们需要使用不同的类型进行序列化和反序列化时,可以创建多个 RedisTemplate 实例,并分别指定不同的泛型类型。例如,我们可以创建一个 RedisTemplate 实例,将泛型类型设置为 String 和 User 对象,然后创建另一个 RedisTemplate 实例,将泛型类型设置为 String 和 Order 对象:

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<String, User> userRedisTemplate() {
        RedisTemplate<String, User> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }

    @Bean
    public RedisTemplate<String, Order> orderRedisTemplate() {
        RedisTemplate<String, Order> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

在上述代码中,我们创建了两个不同的 RedisTemplate 实例,分别用于存储 User 对象和 Order 对象。这样,我们就可以使用不同的 RedisTemplate 实例来对不同类型的数据进行操作。

RedisTemplate 泛型相同的实例

在某些情况下,我们可能希望将多种类型的数据存储到同一个 RedisTemplate 实例中。这时,我们可以使用 Object 类型来作为泛型类型,并在实际使用时进行类型转换。例如,我们可以创建一个 RedisTemplate 实例,将泛型类型设置为 String 和 Object:

@Configuration
public class RedisConfig {

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

在上述代码中,我们创建了一个 RedisTemplate 实例,将泛型类型设置为 String 和 Object。这样,我们可以使用这个 RedisTemplate 实例来存储任意类型的对象到 Redis 中,但在实际使用时需要进行类型转换。

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void saveUser(User user) {
    redisTemplate.opsForValue().set(user.getUsername(), user);
}

public User getUser(String username) {
    return (User) redisTemplate.opsForValue().get(username);
}

在上述代码中,我们使用 RedisTemplate 实例来存储和检索 User 对象。在存储时,我们使用了 User 对象的用户名作为 Redis 的 key,User 对象作为 value。在检索时,我们将 Redis 的返回值进行了强制类型转换,以得到 User 对象。

结论

通过上

标签:Redis,实例,template,泛型,new,RedisTemplate
From: https://blog.51cto.com/u_16175493/6790003

相关文章

  • 搬运 -阮一峰的网络日志 --Flex 布局教程:实例篇
    原文链接:http://www.ruanyifeng.com/blog/2015/07/flex-examples.html语法: https://www.cnblogs.com/yuwen1995/p/17568483.html一、骰子的布局骰子的一面,最多可以放置9个点。下面,就来看看Flex如何实现,从1个点到9个点的布局。你可以到codepen查看Demo。如果不加说明,本节的......
  • DL100 PN替换 DL100 RS422调试实例
    第一部分:现场问题描述 客户使用DL100的422通讯,需要西门子PLC使用过多422模块,PLC接入模块数量有限。换成DL100的PN通讯,使用交换机来处理。同时之前的使用中,遇到了DL100烧坏的问题。 第二部分:现场工作内容 1. 产品自身功能和参数设置体现: 接线:422通讯的接......
  • 关于vue3使用setup语法糖获取不到组件实例内部的变量
    //子组件<template><div>{{count}}</div><template<scriptsetup>import{ref}from'vue'constcount=ref(0)</script>//父组件<template><div><Childref="child"/>......
  • mq json转换器 JSON泛型反序列化, 多层嵌套,使用 TypeReference
     需求解析JSON,并将其转换为对应的数据结构。例如:转换为Map<String,Object>  ......
  • GreatSQL通过错误日志信息判断数据库实例是如何关闭的
    背景概述在一次客户的数据库实例连接不上了,需要我们排查一下原因,通过查看数据库实例进程已经不存在了,在错误日志中没有发现其他报错信息,发现有shutdown的字样出现,怀疑是某个用户手动关闭了实例。我们通过以下测试,发现是由于用户关闭了主机所导致的。问题复现本次测试基于GreatS......
  • CLV620 高速读取条码调试实例
    ​ ​ 第一部分:现场问题描述 客户反馈SICKCLV620在低速下读取没有问题,在高速下大概3m/s以上就无法正常读取。客户要求实际速度在6m/s的应用场合。 现场观察现象确实如此,但原因却不是。 难点: 1,客户反馈的问题误导了排查思路; 2,现场条码质量较差无法满足实......
  • java list获取泛型
    如何在Java中获取泛型类型引言在Java中,泛型是一种用于创建可重用的代码的强大工具。它允许我们在编译时指定要操作的数据类型,从而提高代码的安全性和可读性。然而,有时我们需要在运行时获取泛型的类型信息。本文将介绍如何通过Java反射机制来获取泛型类型。步骤概述下面是我们获......
  • react项目中使用redux的实例
    当在React项目中使用Redux,你需要安装redux和react-redux库。下面是一个简单的示例,展示了如何在React项目中集成Redux:1.安装依赖库:npminstallreduxreact-redux2.创建Reduxstore:在项目的根目录下,创建一个名为store.js的文件,并编写以下代码:点击查看代码import{createSto......
  • 19.实例方法,类方法,静态方法
    python实例方法,类方法,静态方法目录python实例方法,类方法,静态方法实例方法类方法静态方法案例参考资料实例方法只能被被实例对象调用第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法方法内部可以传类的属性和方法类方法实......
  • redisTemplate 工具类
    RedisTemplate工具类简介Redis是一个基于内存的高性能键值存储数据库,它支持多种数据结构,如字符串、列表、哈希、集合等。在Java开发中,我们可以使用SpringDataRedis来操作Redis数据库。RedisTemplate是SpringDataRedis提供的一个核心类,用于简化Redis的操作。RedisTemplate提......