快速上手RedisTemplate

前景提要:这篇文章可以快速了解RedisTemplate,并没有去详细介绍RedisTemplate的API,如果想要了解API的,可以去看一下API文档,或者用到具体的方法在Idea里,直接点进去RedisTemplate源码,找需要的方法。

零. 简单了解RedisTemplate

了解RedisTemplate之前先来了解SpringData

SpringData是Spring中数据操作的模块,包含对各种数据库的集成(最常见的是JdbcTemplate,只不过平常开发中用MyBatis的比较多),其中对Redis命令的集成模块(可以理解为封装)是SpringDataRedis,SpringDataRedis有很多东西,其中RedisTemplate是最上层的,提供许多API,用来操作Redis.

一.RedisTemplate的特点

  1. 不同数据类型的API操作封装到不同类型
API返回值类型对应数据类型
redisTemplate.opsForValue()ValueOperationsString类型
redisTemplate.opsForHash()HashOperationsHash类型
reidsTemplate.opsForList()ListOperationsLsit类型
reidsTemplate.opsForSet()SetOperationsSet类型
redisTemplate.opsForZSet()ZSetOperationsSortSet类型

二.更形象的了解RedisTemplate

在一些项目中,redis是单独部署在一个服务器上的,想要实现与Redis的交互,就必须与Redis实现远程通信,然后将命令发送,这是Redis客户端的实现,现在可以通过RedisTemplate,RedisTemplate封装了redis的客户端命令,和连接池等复杂操作,现在只需要调用Redis的方法,就可以实现与Redis的远程交互,这也是RedisTempalte的一个优点。
在这里插入图片描述

三. 快速使用RedisTempalte

  1. 引入依赖
<dependency>
   <groupId>org.springframework.boot<groupId>
   <artifactId>spring-boot-starter-data-reids<artifactId>
</dependency>
<dependency>
    <groupId>org.apaache.common</groupId>
    <artfactId>commons-pool2</artfactId>
</dependency>
  1. 配置内容
spring: 
   redis:
      host: ip地址
      port: 端口号
      password: 密码(在redis配置文件可以设置,如果直接买,上面会有密码)
      lettuce: 
          pool:
            max-active: 最大连接(以下都是连接池的配置,必须要配置的不然redis不能生效)
            max-idle: 最大空闲连接
            min-idle: 最小空闲连接
            max-wait: 100ms 连接等待时间100毫秒
            
  1. 在需要使用的类中,注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;

  1. 使用的时候,调用redisTemplate的API
//插入一条String类型的数据
redisTemplate.opsForValue().set("name""我是海绵宝宝");

四. RedisSerialize–Redis的序列化工具

redisTemplate的set()参数是String Object,默会对Object序列化,例如下面
虽然set()的值是字符串,但是会序列化然后存在Redis,如果在Redis库里会发现值是类似乱码的东西。同时取值get()会自动进行一个反序列化的一个东西,这对使用者是透明的

//
redisTemplate.opsForValue().set("name","我是海绵宝宝");

五. 对Redis序列化的源码分析

  • 首先会创建一个默认的JDK序列化器
defaultSerialize=new JdkSerializationRedisSerialize(参数);
  • 调用set()是部分源码,在return时调用了序列化方法
return valueSerializer().serialize(value);

知识小贴士:序列化的概念,序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。

六. 如何修改Redis序列化方式

需求:在写项目中,大多使用JSON传输,这样的话,需要 将value序列化为JSON格式的。
解决: 上面提到默认使用的是JDK序列化器,现在只需要改成JSON的序列化器,更改配置

@Configuration
public class RedisConfig{


@Bean
public RedisTemplate<String,Obejct> redisTeplate(RedisConnectFactoru redisConnectFatory)
{
//创建RedisTempalte对象

//设置连接工厂

//设置key序列化
redisTempalte.setKey()
//设置value的序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);

//返回
}

}

JDK序列化器与JSON序列化器的区别

  • JDK序列化器是将对象转化为字节
  • JSON序列化器将对象转换成JSON格式的字符串

七. 实现手动序列化

虽然RedisTemplate能自动实现序列化与反序列化的过程,但是也有一定弊端,在反序列化时需要知道反序列化对象的类型,RedisTemplate将对象的全类名写入Redis进行存入,在大型项目中,百万级数据就会浪费空间,所以选择手动序列化
在这里插入图片描述
Spring提供了StringRedisTemplate,StringRedis只能存储String类型的key-value.可以直接将序列化好的值存入Redis,项目中常常使用这种方法,一是使用同一的序列化工具,二是降低额外开销
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值