专栏首页微观技术快速上手Spring-Data-Redis

快速上手Spring-Data-Redis

Spring Data Redis 是 Spring Data的一个子项目,主要用于操作redis,和Spring 生态结合的很好,它提供了低级别(RedisTemplate ...)和高级别(ListOperations )的抽象,使我们很方便的就可以和Redis交互。

支持 Jedis和Lettuce两种redis客户端组件,2.X以后默认实现是Lettuce,使用Jedis的话需要手动改下(引入Jedis的包)

首先我们看下 spring-data-redis 的pom依赖:

  省略。。。。
  <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>${jedis}</version>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>io.lettuce</groupId>
      <artifactId>lettuce-core</artifactId>
      <version>${lettuce}</version>
      <optional>true</optional>
    </dependency>
    省略。。。。

通过maven 的 optional 选项,该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。

开发具体项目时可以根据自己的实际需要,选择引入jedis或lettuce-core的jar包从而让对应的底层组件生效。

以jedis为例:

首先看下pom依赖

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.2.1.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.2.0</version>
</dependency>

参数配置

spring:
  redis:
    host: 127.0.0.1   # Redis服务器地址
    port: 6379   # Redis服务器连接端口
    password: ****  # Redis服务器连接密码(默认为空)
    jedis:
      pool:
        max-active: 64  # 连接池最大连接数(使用负值表示没有限制)
        max-idle: 64   # 连接池中的最大空闲连接
        min-idle: 2  # 连接池中的最小空闲连接
        max-wait: 300  # 连接池最大阻塞等待时间(使用负值表示没有限制)
    timeout: 1000   # 连接超时时间(毫秒)

Redis客户端Bean实例初始化代码

@Configuration
public class RedisConfig {

    @Bean
    RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        final StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new GenericToStringSerializer<>(Object.class));
        template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
        template.afterPropertiesSet();
        return template;
    }

序列化

Redis中存储的是二进制,或者说字符串也行,所以一个对象是没法直接存储在Redis中的。数据会转换成字节在Redis存储,在Spring Data中,序列化的核心包是org.springframework.data.redis.serializer,想要自定义自己的序列化,实现RedisSerializer即可。官方也提供一些默认的实现:

  • JdkSerializationRedisSerializer:RedisTemplate默认使用这个
  • StringRedisSerializer:StringRedisTemplate 中,key 默认的序列化方案是 StringRedisSerializer,针对String类型的序列化实现。

API测试类:

@Resource
private RedisTemplate redisTemplate;

@Test
public void test1(){
    redisTemplate.opsForValue().set("key-1","value-1");
}

@Test
public void test2(){
    redisTemplate.execute((RedisConnection connection)->{
        Jedis jedis=(Jedis)connection.getNativeConnection();
        String s=jedis.set("key-2","value-2","NX","EX",6000);
        return s;
    });
}

在Spring-data-redis中,为Redis的五种不同的数据结构提供了五种不同的操作类。可以通过tempalte.opsForXXX()方法来获取对应的对象,然后进行对应的操作。

opsForValue、opsForHash、opsForZSet方法分别获取对String、hash、Zset数据结构的操作实现。

execute方法给我们暴露了RedisConnection,拿到连接后,我们可以转换成Jedis的原始连接,从而可以使用data redis不支持但是jedis支持的命令。

本文分享自微信公众号 - 微观技术(weiguanjishu),作者:TomGE

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一些Redis很实用的工作技巧

    常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

    用户7676729
  • 一文读懂Spring Boot各模块组件依赖关系

    spring boot 作为一款开箱即用的框架,在市场上有很高的流行度。但内部依赖错踪复杂,每个模块都有自己专属职责,同时又可以做为其他模块的补充,具有很强的扩...

    用户7676729
  • ZooKeeper常用API命令

    ZooKeeper Java 代码主要使用 org.apache.zookeeper.ZooKeeper 这个类使用 ZooKeeper 服务。

    用户7676729
  • 《30天自制操作系统》读书笔记

    JE: jump if equal INT: 是软件中断指令 HLT: interrupt 是让CPU停止动作的指令, 是让CPU进入待机状态 JC: 是...

    iOSDevLog
  • Vue.js 中的无渲染行为插槽[每日前端夜话0xF7]

    翻译:疯狂的技术宅 作者:David Desmaisons 来源:alligator

    疯狂的技术宅
  • JS 执行上下文

    运行JavaScript代码时,当代码执行进入一个环境时,就会为该环境创建一个执行上下文,它会在你运行代码前做一些准备工作,如确定作用域,创建局部变量对象等。

    grain先森
  • 模型正则化

    模型正则化欠拟合与过拟合线性回归模型2次多项式回归4次多项式回归评估3种回归模型在测试数据集上的性能表现L1范数正则化Lasso模型在4次多项式特征上的拟合表现...

    用户3577892
  • 我从来不理解JavaScript闭包,直到有人这样向我解释它...

    正如标题所述,JavaScript闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识。

    Fundebug
  • 如何理解js的执行上下文与执行栈

    执行上下文和执行栈是js执行机制中的两个概念,要想深入的对js进行理解与应用,理解js的机制很重要,下面来说一下什么是执行上下文,什么又是执行栈。

    无邪Z
  • 基于人工智能的舰队竞争中模块化与自主性的协同分析

    原文标题:Analysis of the Synergy between Modularity and Autonomy in an Artificial In...

    Jarvis Cocker

扫码关注云+社区

领取腾讯云代金券