利用redis的Sorted Set实现分页
redis命令:
ZADD key score member [[score member] [score member] ...] ZRANGE key start stop [WITHSCORES]
练习下redis ZADD ZRANGE命令:
redis> ZADD myzset 1 "one" (integer) 1redis> ZADD myzset 2 "two" (integer) 1redis> ZADD myzset 3 "three" (integer) 1redis> ZRANGE myzset 0 -1 1) "one" 2) "two" 3) "three"redis> ZRANGE myzset 2 3 1) "three"redis> ZRANGE myzset -2 -1 1) "two" 2) "three"redis>
如果明白了 这两个命令的含义,实际上分页的原理就已经弄明白了。
现在的场景是:
要进行分页的数据是以json的格式写在hdfs上的,每条记录中有createtime这个字段(2013-02-19 01:23:50),将其变成10位的时间戳,把时间戳作为score,就可以按照时间从早到晚来排列,start stop参数决定着分页的大小!
java客户端jedis对应的方法:
读取:
Set set = jedis.zrange("tv-videos_102599699", 0, 9); for (Object str : set) { System.out.println(str); }
返回的是有序的LinkedHashSet,而不是hashset
批量写入,而不是单条写入:
Pipeline pipeline = RedisCon.getJeidsConForPipLine();//getJeidsConForPipLine自定义函数 pipeline.zadd("tv-videos_"+key.toString(), Long.parseLong(str), jsonArray.getString(i)); pipeline.sync();