参考《redis实战》

需要

1、依据插入的程序记录日志,保留10条信息
2、记录每种类型的日志次数,并能够按类型的次数排序

剖析

第一个需要

按程序插入,能够应用队列,以下是队列lpush、ltrim、lrange的用法。

//从右边插入一条数据local:0>lpush queue 1"1"local:0>lpush queue 2"2"local:0>lpush queue 3"3"local:0>lpush queue 4"4"local:0>lpush queue 5"5"//保留下表为0到3的元素local:0>ltrim queue 0 3"OK"//取指定范畴队列的值local:0>lrange queue 0 -11) "5"2) "4"3) "3"4) "2"

第二个需要

按类型的次数进行排序,能够用有序汇合。以下是zincrby、zrevrange的用法。

// 对指定成员递增local:0>zincrby score: 1 zhangsan"1"local:0>zincrby score: 1 zhangsan"1"local:0>zincrby score: 1 lisil"1"// 返回指定范畴的值及分数local:0>zrevrange score: 0 -1 withscores1) "zhangsan"2) "2"3) "lisil"4) "1"

实际

在这里咱们应用Pipeline,Pipeline办法会主动的创立事务,会主动应用multi和exec包裹起用户的多个命令,可能无效的缩小客户端和redis之间的通信次数,进步性能。

@Testpublic void testLog() {    String[] level = {"DEBUG", "INFO", "WARN", "ERROR"};    for (int i = 0; i < 100; i++) {        Pipeline pipeline = JedisUtils.pipeline();        pipeline.lpush("log:", "音讯:" + i);        pipeline.ltrim("log:", 0, 10);        pipeline.zincrby("msg:", 1, level[new Random().nextInt(4)]);        pipeline.sync();    }    List<String> queue = JedisUtils.lrange("log:", 0, -1);    System.out.println("以后队列信息:" + queue);    Set<Tuple> tuples = JedisUtils.zrangeWithScores("msg:", 0, -1);    System.out.println("以后音讯状况:" + tuples);}