关于redis:redis-日志记录

5次阅读

共计 1088 个字符,预计需要花费 3 分钟才能阅读完成。

参考《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 -1
1) "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 withscores
1) "zhangsan"
2) "2"
3) "lisil"
4) "1"

实际

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

@Test
public 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);
}
正文完
 0