Redis是一个内存数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的地理空间索引。本文介绍了集群,发布和订阅等高级概念,使用Jedis Java库管理Redis的概念。

redis的PID file放再哪里 redis的pid是什么_Java

Pipeling

Redis是一个TCP服务器,可以处理请求和响应模型。当需要执行连续的命令集时,在发送请求和接收响应的往返中将浪费更多时间。场景如大型物品列表,如果通过请求和响应模型发送,往返时间损失将更多。这可以避免使用流水线操作,我们可以将大量命令批处理到服务器,因此服务器批量处理命令并将响应排队并发送。

Jedis客户端创建管道,其中所有批处理命令集都排入其中。然后,sync将从1到10发送作业列表的批处理请求,每个作业都有5个taskid成员添加到服务器。同步将阻止客户端,直到服务器处理请求。然后可以检查jedis客户端以查找具有taskids的作业的列表。

Pipeline pipeline = jedis.pipelined();
 for (int i=1; i<10; i++) {
 for (int j=1; j<5; j++) {
 pipeline.lpush("job" + i, "taskid" + j);
 }
 }
 pipeline.sync();
 for (int i=1; i<10; i++) {
 System.out.println(jedis.lrange("job"+i, 0, -1));
 }

消息经纪人

Redis是一个快速稳定的发布/订阅消息系统。发件人将消息发送到频道,订阅频道的订阅者可以接收消息。它是在两方之间共享消息的非阻塞方式。

Jedis客户端可以订阅该频道。需要提供消息处理程序以及订阅方法。它被动地听取频道的消息。

final Jedis subJedis = jedisPool.getResource();
 subJedis.subscribe(new JedisPubSub() { 
 @Override
 public void onMessage(String channel, String message) {
 System.out.printf("Received msg: %s from channel %s", message, channel);
 }
 }, "channel1");
可以使用jedis客户端再次创建新连接以发布消息。它提供了发布方法,其中包含要在频道中发布的频道和消息。

 Jedis pubJedis = jedisPool.getResource();
 pubJedis.publish("channel1", "hello pubsub model");

Redis节点的聚类

Redis集群是redis的分布式实现,具有高达1000个节点的线性可扩展性,以及具有至少一个可到达从节点的每个主节点的最大可用性。集群节点与TCP总线和称为Redis集群总线的二进制协议连接。独立redis服务器支持的所有数据类型也可在群集中使用。它还标记了键标记到特定节点的标签。了解有关如何安装和设置Redis群集的详细信息

Redis服务器支持主从复制,其中master用于写入,slave用于读取。Master可以有很多从属,它是非阻塞异步复制。为了扩大写入,需要多个主设备和相应的从设备。redis中没有Peer-to-Peer类型的设置。

使用Redis群集

要连接到redis群集,必须将群集中的任一节点集创建为Set 或一个主节点。JedisCluster将集群节点设置为构造函数参数并创建集群客户端。

Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7000));
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7001));
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7002));
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7003));
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7004));
 jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7005));
 JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes);
 /* will print all the cluster nodes */
System.out.println(jedisCluster.getClusterNodes());

创建集群客户端后,它可以直接用于存储和检索数据类型,因为它管理所有redis节点资源。

jedisCluster.set("blog-summary/advanced-redis", "Advanced programming in Redis using Jedis");
System.out.println(jedisCluster.get("blog-summary/advanced-redis"));

同样,redis中支持的所有数据类型也可以在redis群集中使用。可以使用JedisCluster中提供的相同类型的方法存储和检索数据类型。