ITPub博客

首页 > 数据库 > 数据库开发技术 > 快速上手Spring-Data-Redis

快速上手Spring-Data-Redis

原创 数据库开发技术 作者:微观技术 时间:2020-06-08 08:00:00 0 删除 编辑

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实例初始化代码


@Configurationpublic 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测试类:

@Resourceprivate RedisTemplate redisTemplate;
@Testpublic void test1(){ redisTemplate.opsForValue().set("key-1","value-1");}
@Testpublic 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支持的命令。


往期推荐


关注【微观技术】


我们热衷于收集&分享高并发、系统架构、微服务、消息中间件、 RPC框架、高性能缓存、搜索、分布式数据框架、分布式协同服务、分布式配置中心、中台架构、领域驱动设计、系统监控、系统稳定性等技术知识。

关注公众号,后台回复“中台”,下载PDF学习资料


原文作者:微观技术;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-03-01

  • 博文量
    172
  • 访问量
    72385