快速上手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支持的命令。
- 如何在Hue中使用Sentry
- 如何在Redhat中配置R环境
- 如何在Redhat中安装R的包及搭建R的私有源
- 什么是sparklyr
- 如何利用Dnsmasq构建小型集群的本地DNS服务器
- Cloudera Labs中的Phoenix
- 如何在CDH中使用Phoenix
- Java 8 时间 API 快速入门
- 如何在CDH中使用HPLSQL实现存储过程
- 如何掌握所有的编程语言
- 如何使用Sentry管理Hive外部表(补充)
- WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)漏洞复现&修复方案
- 如何在CDSW中使用R绘制直方图
- CTF学习交流群 第一期入群题writeup大放送
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 算法基础:递归
- ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统
- 什么是JavaScript 的闭包???
- es集群+elk搭建+kafka搭建分布式日志收集系统
- 设计模式(2)[JS版]---JavaScript如何实现单例模式?
- 算法基础:分治
- 黑客帝国中代码雨如何实现?用 canvas 轻松实现代码雨炫酷效果!
- 设计模式(3)[JS版]-JavaScript中的构造函数模式是什么?
- 基于docker 安装elasticsearch + kibana + ik分词器(6.7.2版本)
- 算法基础:排序
- 算法基础:动态规划
- 什么是 “并查集” ?
- Sentinel + SpringBoot 基于本地文件模式实现规则持久化
- 1.5 Arduino的第一个程序
- 2.1 Arduino语言和结构