欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:基于redis實現(xiàn)滾動分頁功能

柚子快報激活碼778899分享:基于redis實現(xiàn)滾動分頁功能

http://yzkb.51969.com/

需求是基于redis的zset集合將其中的數(shù)據(jù)以分頁的形式查詢,要求是查詢過的數(shù)據(jù)不能重復(fù)查詢到

基于redis zset集合實現(xiàn)滾動分頁功能

新建個zset集合向里面添加些測試數(shù)據(jù)

常規(guī)分頁基于索引查詢page:1,size:5,page:2,size:5......存在危害

此時集合中有7條數(shù)據(jù)執(zhí)行分頁查詢第一次查詢查詢到的的是id為13,12,11,10,9這幾條數(shù)據(jù)

第二次查詢?yōu)?,7兩條,這是正常情況下分頁查詢到的數(shù)據(jù)

另一種情況

執(zhí)行分頁查詢第一次查詢查詢到的的是id為13,12,11,10,9這幾條數(shù)據(jù),如果當(dāng)前時間其他用戶向集合中添加數(shù)據(jù)那么新數(shù)據(jù)會在最頂部新增一條id為14score為當(dāng)前時間戳的數(shù)據(jù),那么這條數(shù)據(jù)會被放到最上方第二次查詢到的數(shù)據(jù)則會變成9,8,7三條9這條數(shù)據(jù)則重復(fù)查詢到,在一些特定場景下這種情況是不允許發(fā)生的,為此我們需要實現(xiàn)滾動分頁這種動態(tài)查詢

基于stringRedisTemplate.opsForZSet()提供的reverseRangeByScoreWithScores方法可以實現(xiàn)滾動分頁查詢

內(nèi)部需要傳遞5個參數(shù)分別為

key:redis數(shù)據(jù)的key值

min:最小值,根據(jù)score打分查詢到的最小的邊界

max:最大值,根據(jù)score打分查詢到的最大的邊界

offset:如果score值相同需要跳過的個數(shù)(如果score值相同那么還是會被查詢到的,因為查詢到的數(shù)據(jù)是根據(jù)max傳輸?shù)闹祦磉M(jìn)行查詢的:比如最大值我傳入10此時集合內(nèi)score為10打分的數(shù)據(jù)存在兩條,那么這兩條都會被查詢到,需要跳過幾條傳入數(shù)值即可)

count:相當(dāng)于傳統(tǒng)分頁中的分頁條數(shù)下方代碼寫死為2條,正常由前端傳入

public R queryBLongOfFollow(Long max, Integer offset) {

//獲取當(dāng)前用戶id

String userId = threadLocal.get().getId();

//key

String key = "all:follows:" + userId;

//查詢收件箱

Set> typedTuples = stringRedisTemplate.opsForZSet().

reverseRangeByScoreWithScores(key, 0, max, offset, 2);

if (typedTuples == null || typedTuples.isEmpty()) {

return R.ok();

}

//筆記id集合

ArrayList listIds = new ArrayList<>();

//記錄最小的時間戳

long minTime = 0;

//offset最小的時間戳出現(xiàn)的個數(shù),用來跳過相同分?jǐn)?shù)避免重復(fù)數(shù)據(jù)查詢

int os = 1;

for (ZSetOperations.TypedTuple tuple : typedTuples) {

//筆記id

String blogId = tuple.getValue();

listIds.add(blogId);

//時間戳

long time = tuple.getScore().longValue();

if (minTime == time) {

os++;

} else {

minTime = time;

os = 1;

}

}

//將筆記id集合以,拼接

String idsStr = StrUtil.join(",", listIds);

//按照順序查詢筆記集合

List blogList = query().in("id", listIds)

.last("order by field(id," + idsStr + ")").list();

for (Blog b : blogList) {

isLikeBLong(b);

if (b == null) {

return R.error("查詢失敗");

}

User user = userService.query().eq("id", b.getUserId()).one();

b.setUser(user);

}

ScrollResult result = new ScrollResult();

result.setList(blogList);

result.setMinTime(minTime);

result.setOffset(os);

return R.ok().data("result",result);

}

柚子快報激活碼778899分享:基于redis實現(xiàn)滾動分頁功能

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19339496.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄