Infra Redis Client
Infra Redis client 基于 Jedis 实现了对 Redis 集群的访问封装。
Redis Client 能做什么?
Infra Redis client 提供如下特性:
- 支持双机房集群 failover 方案
- 支持以 pipeline 方式访问 Redis 集群
- 支持 Redis 访问实时监测
怎么使用 Redis Client?
配置 maven 依赖:
<dependency>
<groupId>com.city.infra</groupId>
<artifactId>city-infra-redis</artifactId>
<version>0.0.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
构造集群工厂类
public static RedisClusterFactory buildFactory() {
RedisClusterFactory clusterFactory = new RedisClusterFactory();
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7639));
jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7640));
Set<HostAndPort> standbyJedisClusterNodes = new HashSet<HostAndPort>();
standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7543));
standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7544));
clusterFactory.setJedisClusterNodes(jedisClusterNodes); // 设置主集群
clusterFactory.setStandbyJedisClusterNodes(standbyJedisClusterNodes); // 设置备份集群
return clusterFactory;
}
访问 Redis 集群
RedisAccessor redisAccessor = clusterFactory.createRedisAccessor("prefix:");
redisAccessor.set("foo", "1", 3600);
String value = redisAccessor.get("foo", "0");
pipeline 访问方式
pipeline 是 Redis 提供的一种批量处理命令机制,可以一次发送多个命令而不用同步等待响应结果,可以显著提升 Redis 访问性能,非常适合离线批量导入数据的业务。
Jedis 对 Redis 集群不支持 pipeline 方式访问,Infra Redis client 通过 Java 反射机制复用了 Jedis 对 Redis 单实例 pipeline 实现,在 Redis 集群节点变更不频繁的情况下,可以提供很好的访问性能。
pipeline 使用代码示例如下:
RedisPipelineAccessor redisPipelineAccessor = clusterFactory.createRedisPipelineAccessor();
redisPipelineAccessor.set("pipe:", "foo", "1", 3600);
redisPipelineAccessor.set("pipe:", "bar", "2", 3600);
redisPipelineAccessor.sync();
监控 Redis 使用情况
在具体业务场景中,往往会对 Redis 的使用做一些规范,比如单个 key-value 的长度不能超过一定阈值,以防止对 Redis 的访问产生抖动。通过实现 RedisMonitor 接口,可以监控所有 Redis 访问情况。
为了使用方便,可以继承 RedisMonitorBase 类,选择业务感兴趣的事件监测,示例代码如下:
public static class CustomMonitor extends RedisMonitorBase {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomMonitor.class);
private static final int MAX_VALUE_LEN = 1024 * 1024;
@Override
public void onWrite(String prefix, String key, String value) {
if (value.length() > MAX_VALUE_LEN) {
LOGGER.warn("Too large redis value! prefix=[{}], key=[{}], value=[{}]", prefix, key, value);
}
}
}
在构造 Redis 集群工厂后,创建 Redis 访问对象前,设置自定义的监控对象到 Redis 集群工厂中:
public static RedisClusterFactory buildFactory() {
RedisClusterFactory clusterFactory = new RedisClusterFactory();
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7639));
jedisClusterNodes.add(new HostAndPort("10.100.1.1", 7640));
Set<HostAndPort> standbyJedisClusterNodes = new HashSet<HostAndPort>();
standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7543));
standbyJedisClusterNodes.add(new HostAndPort("10.100.1.2", 7544));
clusterFactory.setJedisClusterNodes(jedisClusterNodes);
clusterFactory.setStandbyJedisClusterNodes(standbyJedisClusterNodes);
clusterFactory.setRedisMonitor(new CustomMonitor()); // 设置访问监控对象
return clusterFactory;
}
github 项目地址:https://github.com/cityonsky/jedis-cluster-ext/tree/master/redis
相关推荐
对jedischangyongApi的一些简单封装和分类,全部标有中文注释,可直接放入项目中使用,jedis集群配置可参考 https://blog.csdn.net/qq_31256487/article/details/83144088;
适用于redis集群,3.0版本以上支持集群
JedisClusterUtil.java
jedis单机版,集群版工具类
JedisClusterRedisCluster集群搭建
jedis源码 (学习jedis必备,附带测试用例)
redis-cluster结合springboot的使用自定义缓存数据的序列化方式方便通过命令行查看里面的内容,里面包含一整套的代码内容,只需要将缓存地址换成自己的集群地址即可,亲测可用的代码内容.
JFinal 对redis的支持只有 主从集群的,并没有cluster集群的插件。作者照着主从集群的样式,自己写了一个,不是很完善。但是可以用。
项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。
spring整合redis(spring模板+连接池+json序列化+cluster集群).zip
java连接redis集群批量String类型插入
jedis jar包; 版本:2.0 2.1
jedis-2.9.0.jar jedis-2.9.0 jar 包,不包含源码,源码下载地址: http://download.csdn.net/download/tan3739/9993938 测试代码: 导入依赖包: commons-lang-2.5.jar commons-pool2-2.4.2.jar jedis-2.9.0 jar ...
jedis依赖jar包, jedis-2.7.0.jar
java操作redis工具类。能够很好的通过java控制缓存
jedis相关jar包:commons-pool2-2.3.jar、jedis-2.7.0.jar
● 屏蔽Jedis与JedisCluster的连接细节和差异,统一封装成RedisClient类,并内置连接池 ● 统一Jedis与JedisCluster连接的配置项,封装成RedisBean类,主要供RedisClient使用 ● 屏蔽byte[]数据类型,所有实现了序列...
jedis-jedis-2.7.2缓存技术应用
Jedis 是 Redis 官方首选的 Java 客户端开发包。 实例方法: ? 1 import redis.clients.jedis.* ? 1 2 3 Jedis jedis = new Jedis("localhost"); jedis.set("foo", "bar"); String value = jedis.get("foo"); 支持...
此资源为Java连接redis的工具jar,Jedis 版本为2.62; 有两个地方需要注意下;jedis 3.0新版本废弃了旧回收资源方法; 废弃方法为:JedisPool.returnResource(Jedis);回收资源 Jedis 3.0版本新回收资源: Jedis.close();...