Redis(八):spring data redis 理解
前言
为什么选择Spring Data Redis?
要求
- SDR 1.x要求JDK 6.0及以上,要求Spring框架4.3.9.RELEASE及以上。
- Redis 2.6.x及以上。在connectors方面,Spring Redis集成了Jedis
连接到Redis
使用Redis和Spring的第一步就是通过IoC容器连接到存储。想要实现连接,一个java connector(或者binding)是必需的。无论选择什么库,都只有一套SDR API,叫做 org.springframework.data.redis.connection package,以及RedisConnection和RedisConnectionFactory接口,来获取到Redis的活动连接。
RedisConnection 和 RedisConnectionFactory
注意:对于需要native库API的情况,RedisConnection提供了专有方法getNativeConnection -- 会返回原生的、底层的用于通信的对象。
活动的RedicConnection由RedisConnectionFactory创建。另外,该工厂还扮演了PersistenceExceptionTranslator,就是说,一旦声明了,它们会允许用户进行透明的异常翻译。例如,通过使用@Repository和AOP的异常翻译。更多信息,见Spring框架的相关部分。
注意:依赖于底层的配置,工厂会返回一个新的连接 或者 一个现有的连接(使用pool或者shared native connection时)。
使用RedisConnectionFactory最简单的方式,是通过IoC容器配置相应的connector,并将其注入使用类中。
重要:不幸的是,目前,不是所有的connector都支持所有的Redis功能。当调用底层库不支持的API时,会抛出UnsupportedOperationException。这种情况在将来可能被解决,视不同的connector的成熟情况。
配置Jedis connector
1.xml配置
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"/>
2.java代码配置
@Bean
public JedisConnectionFactory jedisConnectionFactory(){
return new JedisConnectionFactory();
}
Redis Sentinel支持
注意:目前,只有Jedis和Lettuce支持Redis Sentinel。
/**
* jedis
*/
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("mymaster").sentinel("127.0.0.1", 26379) .sentinel("127.0.0.1", 26380);
return new JedisConnectionFactory(sentinelConfig);
}
/**
* lettuce
*/
@Bean
public RedisConnectionFactory lettuceConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration().master("mymaster").sentinel("127.0.0.1", 26379) .sentinel("127.0.0.1", 26380);
return new LettuceConnectionFactory(sentinelConfig);
}
- spring.redis.sentinel.master: master节点的名字
- spring.redis.sentinel.nodes: 以逗号间隔的host:port列表
有时候,需要直接与Sentinels中的某一个进行交互。使用RedisConnectionFactory.getSentinelConnection() 或者RedisConnection.getSentinelCommands(),可以让你访问第一个活动的Sentinel。
使用RedisTemplate操作Objects
| Interface | Description |
|---|---|
|
Key Type Operations |
|
|
ValueOperations |
Redis string (or value) operations |
|
ListOperations |
Redis list operations |
|
SetOperations |
Redis set operations |
|
ZSetOperations |
Redis zset (or sorted set) operations |
|
HashOperations |
Redis hash operations |
|
HyperLogLogOperations |
Redis HyperLogLog operations like (pfadd, pfcount,…) |
|
GeoOperations |
Redis geospatial operations like |
|
Key Bound Operations |
|
|
BoundValueOperations |
Redis string (or value) key bound operations |
|
BoundListOperations |
Redis list key bound operations |
|
BoundSetOperations |
Redis set key bound operations |
|
BoundZSetOperations |
Redis zset (or sorted set) key bound operations |
|
BoundHashOperations |
Redis hash key bound operations |
|
BoundGeoOperations |
Redis key bound geospatial operations. |
一旦配置了,该template就是线程安全的,可被多个实例复用。
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:use-pool="true"/>
<!-- redis template definition -->
<bean id="redisTemplate"
class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory"/>
public class Example {
// inject the actual template
@Autowired
private RedisTemplate<String, String> template;
// inject the template as ListOperations -- 自动转换
@Resource(name="redisTemplate")
private ListOperations<String, String> listOps;
public void addLink(String userId, URL url) {
listOps.leftPush(userId, url.toExternalForm());
}
}
聚焦String的便捷类
鉴于使用java.lang.String来作为key/value 存储到Redis中 非常常见,该Redis模块还提供了RedisConnection和RedisTemplate的两个扩展:StringRedisConnection(以及其DefaultStringRedisConnection实现)和StringRedisTemplate。此外,该template和连接,底层使用了StringRedisSerializer。
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:use-pool="true"/>
<bean id="stringRedisTemplate"
class="org.springframework.data.redis.core.StringRedisTemplate"
p:connection-factory-ref="jedisConnectionFactory"/>
public class Example {
@Autowired
private StringRedisTemplate redisTemplate;
public void addLink(String userId, URL url) {
redisTemplate.opsForList().leftPush(userId, url.toExternalForm());
}
}
如同其他的Spring template,RedisTemplate和StringRedisTemplate允许开发者通过RedisCallback接口直接与Redis对话。这赋予了开发者完整的控制,因为是直接与RedisConnection交互。注意,当使用StringRedisTemplate时,该callback接收的是一个StringRedisConnection实例。
public void useCallback() {
redisTemplate.execute(new RedisCallback<Object>() {
public Object doInRedis(RedisConnection connection) throws DataAccessException {
Long size = connection.dbSize();
// Can cast to StringRedisConnection if using a StringRedisTemplate
((StringRedisConnection)connection).set("key", "value");
}
});
}
序列化器 Serializers
Hash映射
- 使用HashOperations和一个序列化器,直接映射。
- 使用Redis Repositories。
- 使用HashMapper和HashOperations。
Redis(八):spring data redis 理解的更多相关文章
- Redis与Spring Data Redis
1.Redis概述 1.1介绍 官网:https://redis.io/ Redis是一个开源的使用ANSIC语言编写.支持网络.可基于内存 亦可持久化的日志型.Key-Value型的高性能数据库. ...
- Redis客户端 Spring Data Redis(未完)
官网:http://projects.spring.io/spring-data-redis/ 1.0 参考之前的一片文章:Gradle入门实战(Windows版) 构建java applicati ...
- Spring Data Redis整体介绍 (一)
为什么使用Spring Data Redis 首先Spring Data Redis 是Spring 框架提供的用于操作Redis的客户端. Spring框架是一个全栈Java程序框架,通过DI.AO ...
- spring boot通过Spring Data Redis集成redis
在spring boot中,默认集成的redis是Spring Data Redis,Spring Data Redis针对redis提供了非常方便的操作模版RedisTemplate idea中新建 ...
- spring data redis 理解
前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...
- spring mvc Spring Data Redis RedisTemplate [转]
http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) ...
- Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解
一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...
- Spring Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- Spring Data Redis—Pub/Sub(附Web项目源码) (转)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
随机推荐
- Enterprise Library:Unity的几个注意事项
背景 在.Net平台中,几乎所有的Ioc容器在注册方面都不一致,使用Unity需要注意几个事项,咱们通过实验进行验证一下. 验证的内容: 集合的获取. 生命周期管理. 实验 代码 1 using Sy ...
- iOS设计模式:静态工厂相关
工厂方法模式 定义创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类. *最初的定义出现于<设计模式>(Addison-Wesley,1994) 注意:我讲解 ...
- input输入框回车事件响应
1.常用方法 1.方法1$('#applyCertNum').bind('keypress',function(event){ if(event.keyCode == 13) { alert('你输入 ...
- PowerDesigner教程系列(一)概念数据模型
目标: 本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念. 一.概念数据模型概述 数据模型是现实世界中数据特征的抽象.数据模型应该满足三个方面的要求:1)能够比较真实地模拟现实世 ...
- Windows之权限讲解
windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力.在windows中,为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃. 1权限概念 我们可以在控制面板中设 ...
- C#中 父类与子类相互强制转换之实验
MSDN是很好,不过,有时需要自己动手实践一下,才能更好的理解和记住一些东西. 我看过很多技术文章,结果到用时,仍然是下不了手.似是而非的. 像上次写的“四舍六入五成双/四舍六入五留双/四舍六入五单双 ...
- android4.0 USB Camera实例(三)UVC
前面我写了两篇文章说明了zc301的实现 详细请看 http://blog.csdn.net/hclydao/article/details/21235919 以下顺便把通用的USB也写上 前面的ZC ...
- Framework元数据向导错误之BMT-MD-6001与BMT-IMP-0002
1:错误BMT-MD-6001的两种处理方法 在Framework中创建Project后,运行元数据向导从数据库连接中向物理层导入数据表,报错如下 环境如下:Framework版本:10.2.0,Co ...
- [Compose] 9. Delay Evaluation with LazyBox
We rewrite the Box example using lazy evaulation. Here is Box example: const Box = (x) => ({ map: ...
- [AngularJS] Angular 1.3: ng-model-options updateOn, debounce
<!DOCTYPE html> <html ng-app="app"> <head lang="en" > <meta ...