先說 存儲的結構: 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