标签:nps system ide oid compile depend 必须 crc tps
Jedis即redis java客户端,源码地址:https://github.com/xetorthio/jedis
pom配置:
public void testJedis() throws Exception { // 第一步:创建一个Jedis对象。需要指定服务端的ip及端口。 Jedis jedis = new Jedis("192.168.**.**", 6379); // 第二步:使用Jedis对象操作数据库,每个redis命令对应一个方法。 String result = jedis.get("hello"); // 第三步:打印结果。 System.out.println(result); // 第四步:关闭Jedis jedis.close(); }
2) 连接单机版使用连接池
public void testJedisPool() throws Exception { // 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。 JedisPool jedisPool = new JedisPool("192.168.**.**", 6379); // 第二步:从JedisPool中获得Jedis对象。 Jedis jedis = jedisPool.getResource(); // 第三步:使用Jedis操作redis服务器。 jedis.set("jedis", "test"); String result = jedis.get("jedis"); System.out.println(result); // 第四步:操作完毕后关闭jedis对象,连接池回收资源。 jedis.close(); // 第五步:关闭JedisPool对象。 jedisPool.close(); }
public void testJedisCluster() throws Exception { // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。 Set<HostAndPort> nodes = new HashSet<>(); nodes.add(new HostAndPort("192.168.**.**", 7001)); nodes.add(new HostAndPort("192.168.**.**", 7002)); nodes.add(new HostAndPort("192.168.**.**", 7003)); nodes.add(new HostAndPort("192.168.**.**", 7004)); nodes.add(new HostAndPort("192.168.**.**", 7005)); nodes.add(new HostAndPort("192.168.**.**", 7006)); JedisCluster jedisCluster = new JedisCluster(nodes); // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。 jedisCluster.set("hello", "100"); String result = jedisCluster.get("hello"); // 第三步:打印结果 System.out.println(result); // 第四步:系统关闭前,关闭JedisCluster对象。 jedisCluster.close(); }
private static final int taskCount = 50; // 并发任务 private static final int batchSize = 10; // pipeline大小 private static final int cmdCount = 1000;// 每个任务处理命令数 private static final boolean usePipeline = true; JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxActive(200); poolConfig.setMaxIdle(100); poolConfig.setMaxWait(2000); poolConfig.setTestOnBorrow(false); poolConfig.setTestOnReturn(false); jedisPool = new JedisPool(poolConfig, host, port);
5)Jedis 消息发布与订阅API
5.1)消息订阅
public void subscribeChannal(){
//从jedisPool中获取一个jedis对象 Jedis jds = RedisInsUtil.getJedis(); // 方式1 订阅得到信息在lister的onPMessage(...)方法中进行处理 jds.psubscribe(this, new String[]{"channal01","channal02"});
// 方式2 订阅得到信息在lister的onMessage(...)方法中进行处理 (普通订阅方式) //jedis.subscribe(listener, "foo", "watson");
} // 初始化订阅时候的处理 @Override public void onSubscribe(String channel, int subscribedChannels) { } // 初始化按表达式的方式订阅时候的处理 @Override public void onPSubscribe(String pattern, int subscribedChannels) { } @Override // 取得按表达式的方式订阅的消息后的处理 public void onPMessage(String pattern, String channel, String message) { LOG.info("onPMessage()," + pattern + "=" + channel + ",msg="+ message); } // 取得订阅的消息后的处理 public void onMessage(String channel, String message) { }
5.2)消息发布
发布消息只用调用Jedis的publish(...)方法即可。
Jedis jedis = ru.getConnection(); //获取一个jedis对象,自行封装工具类 jedis.publish("hello_foo", "bar123");
6) 管道
16384
个槽(slot), 集群的最大节点数量也是 16384
个。每个主节点都负责处理 16384
个哈希槽的其中一部分。当一个集群处于“稳定”(stable)状态时(群没有在执行重配置(reconfiguration)操作), 每个哈希槽都只由一个节点进行处理(hash Slot的分配是由CRC16算法计算)。1.根据要插入的key知道这个key所对应的槽的号码(JedisClusterCRC16.getSlot(key)), 再通过这个槽的号码从集群中找到对应Jedis(通过每个节点的slot分布,就知道了哪些key应该在哪些节点上)。
2.相同槽位的key,使用同一个jedis.pipeline去执行命令。
3.合并此次pipeline所有的response返回。
keys实现思路:
循环集群中所有的节点(分别获取j对应的client对象),然后每个节点做keys,最后再加到一块返回。
备注:每次执行前需要刷新以获取最新的slot分布。
Redis项目实战---应用及理论(三)---Jedis使用
标签:nps system ide oid compile depend 必须 crc tps
原文地址:https://www.cnblogs.com/huyangshu-fs/p/11256001.html