使用Redis實現排行榜功能
更新時間 2023-10-19 13:57:51
最(zui)近(jin)更新時間(jian): 2023-10-19 13:57:51
分(fen)享文章
本節(jie)基(ji)于天翼云分布(bu)式緩存(cun)服(fu)務實(shi)踐(jian)所編寫(xie),用(yong)于指導您在以下場(chang)景使用(yong)DCS實(shi)現排行榜(bang)功能。
場景介紹
在(zai)網頁和APP中常常需(xu)要用到(dao)榜(bang)單(dan)的(de)功能,對(dui)某(mou)個key-value的(de)列(lie)表進行降序顯示。當操作和查詢并(bing)發大(da)的(de)時(shi)候,使用傳統(tong)數據庫就會遇到(dao)性能瓶頸,造成較大(da)的(de)時(shi)延(yan)。
使用(yong)分(fen)布式(shi)緩(huan)存服務(wu)(DCS)的Redis版本,可(ke)以實現一個商品熱銷排行榜的功能。它的優勢在于(yu):
- 數據保存在緩存中,讀寫速度非常快。
- 提供字符串(String)、鏈表(List)、集合(Set)、哈希(Hash)等多種數據結構類型的存儲。
實踐指導
- 準備一臺彈性云主機(ECS),選擇Windows系統類型。
- 在ECS上安裝JDK1.8以上版本和Eclipse,下載jedis客戶端(點此處直接下載jar包)。
- 在天翼云控制臺購買DCS緩存實例。注意和ECS選擇相同虛擬私有云、子網以及安全組。
- 在ECS上運行Eclipse,創建一個java工程,為示例代碼創建一個productSalesRankDemo.java文件,并將jedis客戶端作為library引用到工程中。
- 將DCS緩存實例的連接地址、端口以及連接密碼配置到示例代碼文件中。
- 編譯并運行得到結果。
代碼示例
package dcsDemo02;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
public class productSalesRankDemo {
static final int PRODUCT_KINDS = 30;
public static void main(String[] args) {
//實例連接地址,從控制臺獲取
String host = "192.168.0.246";
//Redis端口
int port = 6379;
Jedis jedisClient = new Jedis(host, port);
try {
//實例密碼
String authMsg = jedisClient.auth("******");
if (!authMsg.equals("OK")) {
System.out.println("AUTH FAILED: " + authMsg);
}
//鍵
String key = "商品熱銷排行榜";
jedisClient.del(key);
//隨機生成產品數據
List<String> productList = new ArrayList<>();
for(int i = 0; i < PRODUCT_KINDS; i ++) {
productList.add("product-" + UUID.randomUUID().toString());
}
//隨機生成銷量
for(int i = 0; i < productList.size(); i ++) {
int sales = (int)(Math.random() * 20000);
String product = productList.get(i);
//插入Redis的SortedSet中
jedisClient.zadd(key, sales, product);
}
System.out.println();
System.out.println(" "+key);
//獲取所有列表并按銷量順序輸出
Set<Tuple> sortedProductList = jedisClient.zrevrangeWithScores(key, 0, -1);
for(Tuple product : sortedProductList) {
System.out.println("產品ID: " + product.getElement() + ", 銷量: "
+ Double.valueOf(product.getScore()).intValue());
}
System.out.println();
System.out.println(" "+key);
System.out.println(" 前五大熱銷產品");
//獲取銷量前五列表并輸出
Set<Tuple> sortedTopList = jedisClient.zrevrangeWithScores(key, 0, 4);
for(Tuple product : sortedTopList) {
System.out.println("產品ID: " + product.getElement() + ", 銷量: "
+ Double.valueOf(product.getScore()).intValue());
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
jedisClient.quit();
jedisClient.close();
}
}
}
運行結果
編譯并運行以上Demo程序,結果如下:
商品熱銷排行榜
產品ID: product-b290c0d4-e919-4266-8eb5-7ab84b19862d, 銷量: 18433
產品ID: product-e61a0642-d34f-46f4-a720-ee35940a5e7f, 銷量: 18334
產品ID: product-ceeab7c3-69a7-4994-afc6-41b7bc463d44, 銷量: 18196
產品ID: product-f2bdc549-8b3e-4db1-8cd4-a2ddef4f5d97, 銷量: 17870
產品ID: product-f50ca2de-7fa4-45a3-bf32-23d34ac15a41, 銷量: 17842
產品ID: product-d0c364e0-66ec-48a8-9ac9-4fb58adfd033, 銷量: 17782
產品ID: product-5e406bbf-47c7-44a9-965e-e1e9b62ed1cc, 銷量: 17093
產品ID: product-0c4d31ee-bb15-4c88-b319-a69f74e3c493, 銷量: 16432
產品ID: product-a986e3a4-4023-4e00-8104-db97e459f958, 銷量: 16380
產品ID: product-a3ac9738-bed2-4a9c-b96a-d8511ae7f03a, 銷量: 15305
產品ID: product-6b8ad4b7-e134-480f-b3ae-3d35d242cb53, 銷量: 14534
產品ID: product-26a9b41b-96b1-4de0-932b-f78d95d55b2d, 銷量: 11417
產品ID: product-1f043255-a1f9-40a0-b48b-f40a81d07e0e, 銷量: 10875
產品ID: product-c8fee24c-d601-4e0e-9d18-046a65e59835, 銷量: 10521
產品ID: product-5869622b-1894-4702-b750-d76ff4b29163, 銷量: 10271
產品ID: product-ff0317d2-d7be-4021-9d25-1f997d622768, 銷量: 9909
產品ID: product-da254e81-6dec-4c76-928d-9a879a11ed8d, 銷量: 9504
產品ID: product-fa976c02-b175-4e82-b53a-8c0df96fe877, 銷量: 8630
產品ID: product-0624a180-4914-46b9-84d0-9dfbbdaa0da2, 銷量: 8405
產品ID: product-d0079955-eaea-47b2-845f-5ff05a110a70, 銷量: 7930
產品ID: product-a53145ef-1db9-4c4d-a029-9324e7f728fe, 銷量: 7429
產品ID: product-9b1a1fd1-7c3b-4ae8-9fd3-ab6a0bf71cae, 銷量: 5944
產品ID: product-cf894aee-c1cb-425e-a644-87ff06485eb7, 銷量: 5252
產品ID: product-8bd78ba8-f2c4-4e5e-b393-60aa738eceae, 銷量: 4903
產品ID: product-89b64402-c624-4cf1-8532-ae1b4ec4cabc, 銷量: 4527
產品ID: product-98b85168-9226-43d9-b3cf-ef84e1c3d75f, 銷量: 3095
產品ID: product-0dda314f-22a7-464b-ab8c-2f8f00823a39, 銷量: 2425
產品ID: product-de7eb085-9435-4924-b6fa-9e9fe552d5a7, 銷量: 1694
產品ID: product-9beadc07-aab0-438c-ac5e-bcc72b9d9c36, 銷量: 1135
產品ID: product-43834316-4aca-4fb2-8d2d-c768513015c5, 銷量: 256
商品熱銷排行榜
前五大熱銷產品
產品ID: product-b290c0d4-e919-4266-8eb5-7ab84b19862d, 銷量: 18433
產品ID: product-e61a0642-d34f-46f4-a720-ee35940a5e7f, 銷量: 18334
產品ID: product-ceeab7c3-69a7-4994-afc6-41b7bc463d44, 銷量: 18196
產品ID: product-f2bdc549-8b3e-4db1-8cd4-a2ddef4f5d97, 銷量: 17870
產品ID: product-f50ca2de-7fa4-45a3-bf32-23d34ac15a41, 銷量: 17842