Redis——使用Jedis操作stream

低版本的Jedis不支持stream操作;

maven依赖:

    <dependency>
	    <groupId>redis.clients</groupId>
	    <artifactId>jedis</artifactId>
	    <version>3.3.0</version>
	</dependency>

另外需要依赖个sl4j日志;

Demo1:

/**
 * 2020年11月5日下午4:55:43
 */
package testJedisStream;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.StreamEntry;
import redis.clients.jedis.StreamEntryID;

/**
 * @author XWF
 *
 */
public class TestJedisStream {
	
	private static JedisPoolConfig jpc = new JedisPoolConfig();
	private static JedisPool jedisPool;
	
	static {
		jpc.setMaxTotal(200);
		jpc.setMaxIdle(10);
		jpc.setMaxWaitMillis(1000);
		jpc.setTestOnBorrow(true);
		jpc.setTestOnReturn(true);
		jedisPool = new JedisPool(jpc, "192.168.1.187", 6379, 1000, "654321", 1);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("StreamEntryID.NEW_ENTRY=" + StreamEntryID.NEW_ENTRY);
		System.out.println("StreamEntryID.LAST_ENTRY=" + StreamEntryID.LAST_ENTRY);
		System.out.println("StreamEntryID.UNRECEIVED_ENTRY=" + StreamEntryID.UNRECEIVED_ENTRY);
		System.out.println();
		
		xadd();
		xlen();
		System.out.println();
		xread();
		xrange();
		xrevrange();
		System.out.println();
		xdel();
		xlen();
		System.out.println();
		xadd();
		xadd();
		xlen();
		xtrim();
		xlen();
		
		try(Jedis jd = jedisPool.getResource()) {
			jd.del("k");
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void xadd() {
		try(Jedis jd = jedisPool.getResource()) {
			Map<String, String> hash = new HashMap<>();
			hash.put("name", "Tom");
			hash.put("age", "13");
			//key, id, hash
			StreamEntryID id = jd.xadd("k", StreamEntryID.NEW_ENTRY, hash);
//			StreamEntryID id = jd.xadd("k", new StreamEntryID("1-1"), hash);
			System.out.println("xadd1 id:" + id.toString());
			Map<String, String> hash2 = new HashMap<>();
			hash2.put("name", "Jerry");
			hash2.put("age", "12");
			//key, id, hash, len, ~(false)
			StreamEntryID id2 = jd.xadd("k", StreamEntryID.NEW_ENTRY, hash2, 5, false);
			System.out.println("xadd2 id:" + id2.toString());
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xlen() {
		try(Jedis jd = jedisPool.getResource()) {
			long len = jd.xlen("k");
			System.out.println("len=" + len);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xread() {
		try(Jedis jd = jedisPool.getResource()) {
			//count, block, key-id...
			List<Entry<String, List<StreamEntry>>> list = jd.xread(1, 1000, new MyJedisEntry("k", "0"), new MyJedisEntry("k", "0"));
			System.out.println(list);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xrange() {
		try(Jedis jd = jedisPool.getResource()) {
			//key, start, end, count
			//null表示无穷小或者无穷大
			List<StreamEntry> list = jd.xrange("k", null, null, 100);
			System.out.println("xrange:" + list);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xrevrange() {
		try(Jedis jd = jedisPool.getResource()) {
			//key, end, start, count
			List<StreamEntry> list = jd.xrevrange("k", null, null, 100);
			System.out.println("xrevrange:" + list);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xdel() {
		try(Jedis jd = jedisPool.getResource()) {
			List<Entry<String, List<StreamEntry>>> getid = jd.xread(1, 0, new MyJedisEntry("k", "0"));
			Entry<String, List<StreamEntry>> k_entrylist = getid.get(0);
			List<StreamEntry> entrylist = k_entrylist.getValue();
			String id = entrylist.get(0).getID().toString();
			//key, id...
			long result = jd.xdel("k", new StreamEntryID(id));
			System.out.println("xdel " + id + " return:" + result);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xtrim() {
		try(Jedis jd = jedisPool.getResource()) {
			//key, len, ~(false)
			long result = jd.xtrim("k", 2, false);
			System.out.println("xtrim 2 return=" + result);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}
class MyJedisEntry implements Entry<String, StreamEntryID>{
	private String k;
	private StreamEntryID id;
	public MyJedisEntry(String key, String id){
		this.k = key;
		if("0".equals(id)) {
			this.id = new StreamEntryID();
		}else {
			this.id = new StreamEntryID(id);
		}
	}
	public MyJedisEntry(String key, StreamEntryID ID) {
		this.k = key;
		this.id = ID;
	}
	@Override
	public String getKey() {
		return k;
	}
	@Override
	public StreamEntryID getValue() {
		return id;
	}
	@Override
	public StreamEntryID setValue(StreamEntryID value) {
		this.id = value;
		return id;
	}
}

结果1:

Demo2:

/**
 * 2020年11月6日上午9:47:18
 */
package testJedisStream;

import java.util.List;
import java.util.Map.Entry;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.StreamConsumersInfo;
import redis.clients.jedis.StreamEntry;
import redis.clients.jedis.StreamEntryID;
import redis.clients.jedis.StreamGroupInfo;
import redis.clients.jedis.StreamInfo;
import redis.clients.jedis.StreamPendingEntry;

/**
 * @author XWF
 *
 */
public class TestJedisStream2 {

	private static JedisPoolConfig jpc = new JedisPoolConfig();
	private static JedisPool jedisPool;
	
	static {
		jpc.setMaxTotal(200);
		jpc.setMaxIdle(10);
		jpc.setMaxWaitMillis(1000);
		jpc.setTestOnBorrow(true);
		jpc.setTestOnReturn(true);
		jedisPool = new JedisPool(jpc, "192.168.1.187", 6379, 1000, "654321", 1);
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		xgroup();
		System.out.println();
		xreadgroup();
		xpending();
		System.out.println();
		xack();
		xpending();
		System.out.println();
		xclaim();
		xpending();
		System.out.println();
		xinfo();
		
		try(Jedis jd = jedisPool.getResource()) {
			jd.del("k");
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void xgroup() {
		try(Jedis jd = jedisPool.getResource()) {
			//key, groupName, id, makeStream
			String g1result = jd.xgroupCreate("k", "g1", new StreamEntryID(), true);
			System.out.println("xgroupCreate g1 result:" + g1result);
			String g2result = jd.xgroupCreate("k", "g2", new StreamEntryID(), false);
			System.out.println("xgroupCreate g2 result:" + g2result);
			String setIdResult = jd.xgroupSetID("k", "g2", new StreamEntryID("123-123"));
			System.out.println("xgroupSetID result:" + setIdResult);
			Long delConsumerResult = jd.xgroupDelConsumer("k", "g2", "Tom");
			System.out.println("xgroupDelConsumer result:" + delConsumerResult);
			long destroyResult = jd.xgroupDestroy("k", "g2");
			System.out.println("xgroupDestroy result:" + destroyResult);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xreadgroup() {
		try(Jedis jd = jedisPool.getResource()) {
			TestJedisStream.xadd();
			MyJedisEntry entry = new MyJedisEntry("k", StreamEntryID.UNRECEIVED_ENTRY);
			//groupName, consumer, count, block, noAck(false加入pending列表), streams
			List<Entry<String, List<StreamEntry>>> xreadGroupResult = jd.xreadGroup("g1", "Jerry", 2, 0, false, entry);
			System.out.println("xreadGroup result:" + xreadGroupResult);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xpending() {
		try(Jedis jd = jedisPool.getResource()) {
			//key, groupName, start, end, count, consumer
			List<StreamPendingEntry> pendings = jd.xpending("k", "g1", null, null, 10, null);
			System.out.println("xpending result:" + pendings);
			//StreamPendingEntry
//			pendings.get(0).getID().toString();
//			pendings.get(0).getConsumerName();
//			pendings.get(0).getIdleTime();
//			pendings.get(0).getDeliveredTimes();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xack() {
		try(Jedis jd = jedisPool.getResource()) {
			List<StreamPendingEntry> pendings = jd.xpending("k", "g1", null, null, 10, null);
			StreamEntryID id = pendings.get(0).getID();
			//key, groupName, ids...
			long xackResult = jd.xack("k", "g1", id);
			System.out.println("xack " + id + " result:" + xackResult);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xclaim() {
		try(Jedis jd = jedisPool.getResource()) {
			List<StreamPendingEntry> pendings = jd.xpending("k", "g1", null, null, 10, null);
			StreamEntryID id = pendings.get(0).getID();
			//key, group, consumer, minIdleTime, newIdleTime, retryCount, force, ids...
			List<StreamEntry> xclaimResult = jd.xclaim("k", "g1", "Jack", 2, 1000000, 20, false, id);
			System.out.println("xclaim " + id + " result:" + xclaimResult);
			//StreamEntry
//			xclaimResult.get(0).getID();//StreamEntryID
//			xclaimResult.get(0).getFields();//Map<String, String>
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	public static void xinfo() {
		try(Jedis jd = jedisPool.getResource()) {
			List<StreamConsumersInfo> xinfoConsumersResult = jd.xinfoConsumers("k", "g1");
			System.out.println("xinfoConsumers result:" + xinfoConsumersResult);
			for( StreamConsumersInfo consumersinfo : xinfoConsumersResult) {
				System.out.println("-ConsumerInfo:" + consumersinfo.getConsumerInfo());
				System.out.println("--Name:" + consumersinfo.getName());
				System.out.println("--Pending:" + consumersinfo.getPending());
				System.out.println("--Idle:" + consumersinfo.getIdle());
			}
			List<StreamGroupInfo> xinfoGroupResult = jd.xinfoGroup("k");
			System.out.println("xinfoGroup result:" + xinfoGroupResult);
			for(StreamGroupInfo groupinfo : xinfoGroupResult) {
				System.out.println("-GroupInfo:" + groupinfo.getGroupInfo());
				System.out.println("--Name:" + groupinfo.getName());
				System.out.println("--Consumers:" + groupinfo.getConsumers());
				System.out.println("--Pending:" + groupinfo.getPending());
				System.out.println("--LastDeliveredId:" + groupinfo.getLastDeliveredId());
			}
			StreamInfo xinfoStreamResult = jd.xinfoStream("k");
			System.out.println("xinfoStream result:" + xinfoStreamResult);
			System.out.println("-StreamInfo:" + xinfoStreamResult.getStreamInfo());
			System.out.println("--Length:" + xinfoStreamResult.getLength());
			System.out.println("--RadixTreeKeys:" + xinfoStreamResult.getRadixTreeKeys());
			System.out.println("--RadixTreeNodes():" + xinfoStreamResult.getRadixTreeNodes());
			System.out.println("--Groups:" + xinfoStreamResult.getGroups());
			System.out.println("--LastGeneratedId:" + xinfoStreamResult.getLastGeneratedId());
			System.out.println("--FirstEntry:" + xinfoStreamResult.getFirstEntry());
			System.out.println("--LastEntry:" + xinfoStreamResult.getLastEntry());
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

结果2:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JedisPool来管理Redis连接池,可以按照以下步骤操作: 1. 首先,确保你已经将Jedis库添加到你的项目中。你可以在Maven或Gradle的配置文件中添加以下依赖: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>版本号</version> </dependency> ``` 2. 在代码中导入JedisJedisPool相关的类: ```java import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; ``` 3. 创建JedisPoolConfig对象,并设置连接池的相关属性(如最大连接数、最大空闲连接数等): ```java JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxTotal(100); // 设置最大连接数 jedisPoolConfig.setMaxIdle(10); // 设置最大空闲连接数 // 可以根据需要设置其他属性,比如最小空闲连接数、连接超时时间等 ``` 4. 创建JedisPool对象,传入Redis服务器的主机名、端口号、连接超时时间和密码(如果有的话): ```java JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379, 10000, "password"); ``` 注意:如果Redis服务器没有设置密码,可以省略密码参数。 5. 从连接池中获取Jedis对象,并使用Jedis对象进行Redis操作: ```java try (Jedis jedis = jedisPool.getResource()) { // 执行Redis操作,如存储键值对 jedis.set("key", "value"); String value = jedis.get("key"); System.out.println(value); } catch (Exception e) { // 异常处理 } ``` 6. 当不再需要使用Redis连接时,记得将Jedis对象还回连接池: ```java jedis.close(); ``` 这就是使用JedisPool来管理Redis连接池的基本步骤。通过合理配置连接池的属性,可以提高Redis操作的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值