先说 存储的结构: redis
这里作了两块缓存 绿色是存储索引的缓存 黑色是存数据的缓存缓存
翻页时须要两个参数 向上查询/或向下查询 还一个是 从第二页开始查询时须要一个索引的参数优化
有了这两个参数 就能够利用redis 中提供的方法进行操做spa
第一个是 jedis.zadd(String key, double score, String member) 这个方法 是相似于 map 的功能.net
第二个方法 jedis.set(String key, String value) 这个就是根据key获取对应的值code
第三个方法 jedis.zrange(String key, long start, long end) 是对list中的数据 向下取值 blog
第四个方法 jedis.zrevrange(String key, long start, long end) 是对list中的数据 向上取值 排序
第五个方法是jedis.zcard(Sting key) 获取集合中的总数索引
下面是部分代码示例:get
注意:jedis.zrange()中的元素值是从0 开始计算的
下面是将数据记录到缓存中去
String KEY = "object.Id";
Jedis jedis = new Jedis("127.0.0.1");
// 删除记录的索引
jedis.del(KEY);
// keys 能够进行前匹配 如: keys("ss") 就会找出全部已ss开头的缓存
Iterator<String> it = jedis.keys(KEY).iterator();
while (it.hasNext()) {
String key = it.next();
// 清空缓存中记录的数据
jedis.del(key);
}
// 获取数据源
List<Map<String, Object>> findliveAllList = liveService.findLiveAll();
if (findliveAllList != null && findliveAllList.size() > 0) {
// 作索引列
int i = 0;
for (Map<String, Object> map : findliveAllList) {
String id = map.get("id").toString();
// 记录回放的排序列表
jedis.zadd(KEY, i, id);
// 记录单条的直播数据
jedis.set(KEY + id, JSONObject.toJSON(map).toString());
i++;
}
}
取出数据
String key="object.Id";
Jedis jedis = new Jedis("127.0.0.1");
Set<String> list = null;
// redis 中的记录是从0 开始的
size = size - 1;
// 这个Id 是翻页时的索引 不传时从第一个开始
if (id == null || "".equals(id)) {
// zrange() 是向下取值
list = jedis.zrange(key, 0, size);
} else {
// 这里加1 是由于 总元素是从0开始计算的获取的坐标就会小1
long round = Math.round(jedis.zscore(key, id)) + 1;
// type 1 是下一页 2 是上一页
if (type != null && "1".equals(type)) {
// zrange() 是向下取值 获取下一页数据
list = jedis.zrange(key, round, size + round);
} else {
// //zrevrange() 是向上取值 获取上一页数据
list = jedis.zrevrange(key, round, size + round);
}
}
List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
for (String backId : list) {
Map<String, Object> parseObject = JSON.parseObject(jedis.get(key + backId).toString(), new TypeReference<Map<String, Object>>() {
});
list2.add(parseObject);
}
map = new HashMap<String, Object>();
map.put("list", list2);
map.put("count", jedis.zcard(key));
这里是优化后的代码地址:http://blog.csdn.net/qq_27292113/article/details/54645899