IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> java-redis java使用redisTemplate连接操作单台Redis -> 正文阅读

[大数据]java-redis java使用redisTemplate连接操作单台Redis

一、redisTemplate简介

“简化 Redis 数据访问代码的助手类。”在redisTemplate的官方API中是这样介绍的。
它的中心方法是execute,支持Redis访问代码实现RedisCallback接口。它提供了RedisConnection处理,因此RedisCallback实现和调用代码都不需要明确关心检索/关闭 Redis 连接或处理连接生命周期异常。对于典型的单步操作,有各种方便的方法。他底层是通过jedis或者lettuce两种连接器实现的。

二、创建连接

导入依赖

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

这时可直接注入一个redisTemplate实例超值redis,但是此时连接地址是local,端口是6379,如果需要配置其他地址可以在配置文件中配置

spring:
  redis:
    host: 192.168.1.12
    port: 6379

测试

@Resource
RedisTemplate redisTemplate;
@Test
public void redisTemplateConnectionRedisTest(){
    redisTemplate.opsForValue().set("aaa","fff");
    System.out.println(redisTemplate.opsForValue().get("aaa"));
}

测试结果
在这里插入图片描述
连接成功并且能够操作redis,我们再通过redis客户端去看一眼,发现好像事情不太对,在redis客户端中显示的key和value前面多了一串字节符号
在这里插入图片描述
我们通过控制台执行get命令也获取不到value
在这里插入图片描述
这是因为RedisTemplate默认采用的是jdk的序列化策略,存入的是字节数组,如果只需要用到redis的字符串类型,这时可以使用stringRedisTemplate,它采用的是String的序列化策略,存入的是字符串

@Resource
StringRedisTemplate stringRedisTemplate;

@Test
void contextLoads() {
    stringRedisTemplate.opsForValue().set("bbb","sss");
}

再通过redis客户端查看,发现这好像是我们预期的样子
在这里插入图片描述
那如果我们不只使用redis的string类型,还想使用其他类型怎么办呢,那我们只能修改redisTemplate的序列化策略了
我们这里使用Jackson2JsonRedisSerializer来序列化,因为这种形式的序列化效率较高,并且可以存储对象,
配置RedisTemplate使用Jackson2序列化配置类

@Configuration
public class RedisConfig_JacksonSerializer {

    @Resource
    RedisConnectionFactory redisConnectionFactory;
    @Bean
    public RedisTemplate<String, Object> jsonRedisTemplate() {
        // 创建 RedisTemplate 对象
        RedisTemplate<String, Object> template = new RedisTemplate<>();

        template.setConnectionFactory(redisConnectionFactory);

        //首先解决key的序列化方式
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);

        //解决value的序列化方式
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        
        //序列化结果中添加类路径,方便反序列化
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);

        // 解决jackson2无法反序列化LocalDateTime的问题
        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        objectMapper.registerModule(new JavaTimeModule());

        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }
}

测试一下

@Resource(name="jsonRedisTemplate")
RedisTemplate jsonRedisTemplate;
@Test
public void redisTemplateConnectionRedisTest_JacksonSerializer(){
    jsonRedisTemplate.opsForValue().set("ddd","sss");
    User user = new User(1,"阿布");
    jsonRedisTemplate.opsForValue().set("as",user);
    User as = (User) jsonRedisTemplate.opsForValue().get("as");
    System.out.println(as);
}

测试结果,能够正常序列化与反序列化,并且序列化的时候可以存储类的路径,方便反序列化
在这里插入图片描述
在这里插入图片描述
注意:实体类必须实现无参构造器,否则无法反序列化
这时我们发现存入对象没有问题,但是我们再来看看我们顺手存进去的字符串,发现多存了一对引号
在这里插入图片描述
那我们再写一段代码看一眼这样会不会有什么问题
在这里插入图片描述
发现好像没什么问题,就是有点犯强迫症,查了写资料也没解决双引号这个问题,那我们存字符串的时候就用StringRedisTemplate,需要存储对象或者使用redis的map数据类型的时候用自己设置了序列化方式的RedisTemplate,也希望有大神能指教一下这个问题出在哪,比较有问题找不到原因心里挺膈应的

RedisTemplet的集群连接方式和连接池配置

咳咳,还没研究完,下次再发

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:36:32  更:2022-02-28 15:40:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:31:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码