620
魔獸
商品相關性分析__最佳實踐_雲數據庫 Redis 版-阿裏雲
網上商城商品相關性分析
場景介紹
ApsaraDB for Redis 在功能上與 Redis 基本一致,因此很容易利用它來實現一個網上商城的商品相關性分析程序。
商品的相關性就是某個產品與其他另外某商品同時出現在購物車中的情況。這種數據分析對於電商行業是很重要的,可以用來分析用戶購買行為。例如:
在某一商品的 detail 頁麵,推薦給用戶與該商品相關的其他商品;
在添加購物車成功頁麵,當用戶把一個商品添加到購物車,推薦給用戶與之相關的其他商品;
在貨架上將相關性比較高的幾個商品擺放在一起。
利用 ApsaraDB for Redis 的有序集合,為每種商品構建一個有序集合,集合的成員為和該商品同時出現在購物車中的商品,成員的 score 為同時出現的次數。每次 A 和 B 商品同時出現在購物車中時,分別更新 ApsaraDB for Redis 中 A 和 B 對應的有序集合。
代碼示例
package shop.kvstore.aliyun.com;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
public class AliyunShoppingMall {
public static void main(String[] args)
{
//ApsaraDB for Redis的連接信息,從控製台可以獲得
String host = "xxxxxxxx.m.cnhza.kvstore.aliyuncs.com";
int port = 6379;
Jedis jedis = new Jedis(host, port);
try {
//ApsaraDB for Redis的實例ID及密碼
String authString = jedis.auth("xxxxxxxx:yyyyyyyy");//password
if (!authString.equals("OK"))
{
System.err.println("AUTH Failed: " + authString);
return;
}
//產品列表
String key0="阿裏雲:產品:啤酒";
String key1="阿裏雲:產品:巧克力";
String key2="阿裏雲:產品:可樂";
String key3="阿裏雲:產品:口香糖";
String key4="阿裏雲:產品:牛肉幹";
String key5="阿裏雲:產品:雞翅";
final String[] aliyunProducts=new String[]{key0,key1,key2,key3,key4,key5};
//初始化,清除可能的已有舊數據
for (int i = 0; i < aliyunProducts.length; i++) {
jedis.del(aliyunProducts[i]);
}
//模擬用戶購物
for (int i = 0; i < 5; i++) {//模擬多人次的用戶購買行為
customersShopping(aliyunProducts,i,jedis);
}
System.out.println();
//利用ApsaraDB for Redis來輸出各個商品間的關聯關係
for (int i = 0; i < aliyunProducts.length; i++) {
System.out.println(">>>>>>>>>>與"+aliyunProducts[i]+"一起被購買的產品有<<<<<<<<<<<<<<<");
Set<Tuple> relatedList = jedis.zrevrangeWithScores(aliyunProducts[i], 0, -1);
for (Tuple item : relatedList) {
System.out.println("商品名稱:"+item.getElement()+", 共同購買次數:"+Double.valueOf(item.getScore()).intValue());
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
jedis.quit();
jedis.close();
}
}
private static void customersShopping(String[] products, int i, Jedis jedis) {
//簡單模擬3種購買行為,隨機選取作為用戶的購買選擇
int bought=(int)(Math.random()*3);
if(bought==1){
//模擬業務邏輯:用戶購買了如下產品
System.out.println("用戶"+i+"購買了"+products[0]+","+products[2]+","+products[1]);
//將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
jedis.zincrby(products[0], 1, products[1]);
jedis.zincrby(products[0], 1, products[2]);
jedis.zincrby(products[1], 1, products[0]);
jedis.zincrby(products[1], 1, products[2]);
jedis.zincrby(products[2], 1, products[0]);
jedis.zincrby(products[2], 1, products[1]);
}else if(bought==2){
//模擬業務邏輯:用戶購買了如下產品
System.out.println("用戶"+i+"購買了"+products[4]+","+products[2]+","+products[3]);
//將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
jedis.zincrby(products[4], 1, products[2]);
jedis.zincrby(products[4], 1, products[3]);
jedis.zincrby(products[3], 1, products[4]);
jedis.zincrby(products[3], 1, products[2]);
jedis.zincrby(products[2], 1, products[4]);
jedis.zincrby(products[2], 1, products[3]);
}else if(bought==0){
//模擬業務邏輯:用戶購買了如下產品
System.out.println("用戶"+i+"購買了"+products[1]+","+products[5]);
//將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
jedis.zincrby(products[5], 1, products[1]);
jedis.zincrby(products[1], 1, products[5]);
}
}
}
運行結果
在輸入了正確的 ApsaraDB for Redis 實例訪問地址和密碼之後,運行以上 Java 程序,輸出結果如下:
用戶0購買了阿裏雲:產品:巧克力,阿裏雲:產品:雞翅
用戶1購買了阿裏雲:產品:牛肉幹,阿裏雲:產品:可樂,阿裏雲:產品:口香糖
用戶2購買了阿裏雲:產品:啤酒,阿裏雲:產品:可樂,阿裏雲:產品:巧克力
用戶3購買了阿裏雲:產品:牛肉幹,阿裏雲:產品:可樂,阿裏雲:產品:口香糖
用戶4購買了阿裏雲:產品:巧克力,阿裏雲:產品:雞翅
>>>>>>>>>>與阿裏雲:產品:啤酒一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:巧克力, 共同購買次數:1
商品名稱:阿裏雲:產品:可樂, 共同購買次數:1
>>>>>>>>>>與阿裏雲:產品:巧克力一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:雞翅, 共同購買次數:2
商品名稱:阿裏雲:產品:啤酒, 共同購買次數:1
商品名稱:阿裏雲:產品:可樂, 共同購買次數:1
>>>>>>>>>>與阿裏雲:產品:可樂一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:牛肉幹, 共同購買次數:2
商品名稱:阿裏雲:產品:口香糖, 共同購買次數:2
商品名稱:阿裏雲:產品:巧克力, 共同購買次數:1
商品名稱:阿裏雲:產品:啤酒, 共同購買次數:1
>>>>>>>>>>與阿裏雲:產品:口香糖一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:牛肉幹, 共同購買次數:2
商品名稱:阿裏雲:產品:可樂, 共同購買次數:2
>>>>>>>>>>與阿裏雲:產品:牛肉幹一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:可樂, 共同購買次數:2
商品名稱:阿裏雲:產品:口香糖, 共同購買次數:2
>>>>>>>>>>與阿裏雲:產品:雞翅一起被購買的產品有<<<<<<<<<<<<<<<
商品名稱:阿裏雲:產品:巧克力, 共同購買次數:2
最後更新:2016-12-16 17:19:29
上一篇:
遊戲玩家排行榜__最佳實踐_雲數據庫 Redis 版-阿裏雲
下一篇:
消息發布與訂閱__最佳實踐_雲數據庫 Redis 版-阿裏雲
續費流程__購買指南_E-MapReduce-阿裏雲
重新初始化磁盤__磁盤_用戶指南_雲服務器 ECS-阿裏雲
重置消費位點__消費管理相關接口_Open API_消息隊列 MQ-阿裏雲
發布服務__使用說明_用戶手冊_雲服務總線 CSB-阿裏雲
ECS__操作事件(Event)樣例_用戶指南_操作審計-阿裏雲
支持的服務列表__產品簡介_操作審計-阿裏雲
遊戲盾___產品功能說明_產品常見問題_DDoS 高防IP-阿裏雲
取消自動快照策略__快照相關接口_API 參考_雲服務器 ECS-阿裏雲
修改數據庫白名單__數據庫管理_開放API_分布式關係型數據庫 DRDS-阿裏雲
圖片上傳__老版圖片服務手冊_對象存儲 OSS-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲