閱讀620 返回首頁    go 魔獸


商品相關性分析__最佳實踐_雲數據庫 Redis 版-阿裏雲

網上商城商品相關性分析

場景介紹

ApsaraDB for Redis 在功能上與 Redis 基本一致,因此很容易利用它來實現一個網上商城的商品相關性分析程序。

商品的相關性就是某個產品與其他另外某商品同時出現在購物車中的情況。這種數據分析對於電商行業是很重要的,可以用來分析用戶購買行為。例如:

  • 在某一商品的 detail 頁麵,推薦給用戶與該商品相關的其他商品;

  • 在添加購物車成功頁麵,當用戶把一個商品添加到購物車,推薦給用戶與之相關的其他商品;

  • 在貨架上將相關性比較高的幾個商品擺放在一起。

利用 ApsaraDB for Redis 的有序集合,為每種商品構建一個有序集合,集合的成員為和該商品同時出現在購物車中的商品,成員的 score 為同時出現的次數。每次 A 和 B 商品同時出現在購物車中時,分別更新 ApsaraDB for Redis 中 A 和 B 對應的有序集合。

代碼示例

  1. package shop.kvstore.aliyun.com;
  2. import java.util.Set;
  3. import redis.clients.jedis.Jedis;
  4. import redis.clients.jedis.Tuple;
  5. public class AliyunShoppingMall {
  6. public static void main(String[] args)
  7. {
  8. //ApsaraDB for Redis的連接信息,從控製台可以獲得
  9. String host = "xxxxxxxx.m.cnhza.kvstore.aliyuncs.com";
  10. int port = 6379;
  11. Jedis jedis = new Jedis(host, port);
  12. try {
  13. //ApsaraDB for Redis的實例ID及密碼
  14. String authString = jedis.auth("xxxxxxxx:yyyyyyyy");//password
  15. if (!authString.equals("OK"))
  16. {
  17. System.err.println("AUTH Failed: " + authString);
  18. return;
  19. }
  20. //產品列表
  21. String key0="阿裏雲:產品:啤酒";
  22. String key1="阿裏雲:產品:巧克力";
  23. String key2="阿裏雲:產品:可樂";
  24. String key3="阿裏雲:產品:口香糖";
  25. String key4="阿裏雲:產品:牛肉幹";
  26. String key5="阿裏雲:產品:雞翅";
  27. final String[] aliyunProducts=new String[]{key0,key1,key2,key3,key4,key5};
  28. //初始化,清除可能的已有舊數據
  29. for (int i = 0; i < aliyunProducts.length; i++) {
  30. jedis.del(aliyunProducts[i]);
  31. }
  32. //模擬用戶購物
  33. for (int i = 0; i < 5; i++) {//模擬多人次的用戶購買行為
  34. customersShopping(aliyunProducts,i,jedis);
  35. }
  36. System.out.println();
  37. //利用ApsaraDB for Redis來輸出各個商品間的關聯關係
  38. for (int i = 0; i < aliyunProducts.length; i++) {
  39. System.out.println(">>>>>>>>>>與"+aliyunProducts[i]+"一起被購買的產品有<<<<<<<<<<<<<<<");
  40. Set<Tuple> relatedList = jedis.zrevrangeWithScores(aliyunProducts[i], 0, -1);
  41. for (Tuple item : relatedList) {
  42. System.out.println("商品名稱:"+item.getElement()+", 共同購買次數:"+Double.valueOf(item.getScore()).intValue());
  43. }
  44. System.out.println();
  45. }
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }finally{
  49. jedis.quit();
  50. jedis.close();
  51. }
  52. }
  53. private static void customersShopping(String[] products, int i, Jedis jedis) {
  54. //簡單模擬3種購買行為,隨機選取作為用戶的購買選擇
  55. int bought=(int)(Math.random()*3);
  56. if(bought==1){
  57. //模擬業務邏輯:用戶購買了如下產品
  58. System.out.println("用戶"+i+"購買了"+products[0]+","+products[2]+","+products[1]);
  59. //將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
  60. jedis.zincrby(products[0], 1, products[1]);
  61. jedis.zincrby(products[0], 1, products[2]);
  62. jedis.zincrby(products[1], 1, products[0]);
  63. jedis.zincrby(products[1], 1, products[2]);
  64. jedis.zincrby(products[2], 1, products[0]);
  65. jedis.zincrby(products[2], 1, products[1]);
  66. }else if(bought==2){
  67. //模擬業務邏輯:用戶購買了如下產品
  68. System.out.println("用戶"+i+"購買了"+products[4]+","+products[2]+","+products[3]);
  69. //將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
  70. jedis.zincrby(products[4], 1, products[2]);
  71. jedis.zincrby(products[4], 1, products[3]);
  72. jedis.zincrby(products[3], 1, products[4]);
  73. jedis.zincrby(products[3], 1, products[2]);
  74. jedis.zincrby(products[2], 1, products[4]);
  75. jedis.zincrby(products[2], 1, products[3]);
  76. }else if(bought==0){
  77. //模擬業務邏輯:用戶購買了如下產品
  78. System.out.println("用戶"+i+"購買了"+products[1]+","+products[5]);
  79. //將產品之間的關聯情況記錄到ApsaraDB for Redis的SortSet之中
  80. jedis.zincrby(products[5], 1, products[1]);
  81. jedis.zincrby(products[1], 1, products[5]);
  82. }
  83. }
  84. }

運行結果

在輸入了正確的 ApsaraDB for Redis 實例訪問地址和密碼之後,運行以上 Java 程序,輸出結果如下:

  1. 用戶0購買了阿裏雲:產品:巧克力,阿裏雲:產品:雞翅
  2. 用戶1購買了阿裏雲:產品:牛肉幹,阿裏雲:產品:可樂,阿裏雲:產品:口香糖
  3. 用戶2購買了阿裏雲:產品:啤酒,阿裏雲:產品:可樂,阿裏雲:產品:巧克力
  4. 用戶3購買了阿裏雲:產品:牛肉幹,阿裏雲:產品:可樂,阿裏雲:產品:口香糖
  5. 用戶4購買了阿裏雲:產品:巧克力,阿裏雲:產品:雞翅
  6. >>>>>>>>>>與阿裏雲:產品:啤酒一起被購買的產品有<<<<<<<<<<<<<<<
  7. 商品名稱:阿裏雲:產品:巧克力, 共同購買次數:1
  8. 商品名稱:阿裏雲:產品:可樂, 共同購買次數:1
  9. >>>>>>>>>>與阿裏雲:產品:巧克力一起被購買的產品有<<<<<<<<<<<<<<<
  10. 商品名稱:阿裏雲:產品:雞翅, 共同購買次數:2
  11. 商品名稱:阿裏雲:產品:啤酒, 共同購買次數:1
  12. 商品名稱:阿裏雲:產品:可樂, 共同購買次數:1
  13. >>>>>>>>>>與阿裏雲:產品:可樂一起被購買的產品有<<<<<<<<<<<<<<<
  14. 商品名稱:阿裏雲:產品:牛肉幹, 共同購買次數:2
  15. 商品名稱:阿裏雲:產品:口香糖, 共同購買次數:2
  16. 商品名稱:阿裏雲:產品:巧克力, 共同購買次數:1
  17. 商品名稱:阿裏雲:產品:啤酒, 共同購買次數:1
  18. >>>>>>>>>>與阿裏雲:產品:口香糖一起被購買的產品有<<<<<<<<<<<<<<<
  19. 商品名稱:阿裏雲:產品:牛肉幹, 共同購買次數:2
  20. 商品名稱:阿裏雲:產品:可樂, 共同購買次數:2
  21. >>>>>>>>>>與阿裏雲:產品:牛肉幹一起被購買的產品有<<<<<<<<<<<<<<<
  22. 商品名稱:阿裏雲:產品:可樂, 共同購買次數:2
  23. 商品名稱:阿裏雲:產品:口香糖, 共同購買次數:2
  24. >>>>>>>>>>與阿裏雲:產品:雞翅一起被購買的產品有<<<<<<<<<<<<<<<
  25. 商品名稱:阿裏雲:產品:巧克力, 共同購買次數:2

最後更新:2016-12-16 17:19:29

  上一篇:go 遊戲玩家排行榜__最佳實踐_雲數據庫 Redis 版-阿裏雲
  下一篇:go 消息發布與訂閱__最佳實踐_雲數據庫 Redis 版-阿裏雲