redis 实现购物车和商品相关性

2017年08月07日 14:54 | 2956次浏览 作者原创 版权保护

分析用户购买行为。

例如:

在某一商品的 detail 页面,推荐给用户与该商品相关的其他商品;

在添加购物车成功页面,当用户把一个商品添加到购物车,推荐给用户与之相关的其他商品;

在货架上将相关性比较高的几个商品摆放在一起。

public class ShoppingMallDemo {
    public static void main(String[] args)
    {
        Jedis jedis = new Jedis(host, port);
        try {
            //ApsaraDB for Redis的实例密码
            String authString = jedis.auth(host+":"+password);//password
            if (!authString.equals("OK"))
            {
                System.err.println("AUTH Failed: " + authString);
                return;
            }
            //产品列表
            String key0="千寻产品:FindS";
            String key1="千寻产品:FindCm";
            String key2="千寻产品:FindM";
            String key3="千寻产品:FindMM";
            String key4="千寻产品:云踪";
            String key5="千寻产品:FindNow";
            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]);
        }
    }
}

运行结果

用户0购买了千寻产品:云踪,千寻产品:FindM,千寻产品:FindMM
用户1购买了千寻产品:FindS,千寻产品:FindM,千寻产品:FindCm
用户2购买了千寻产品:FindCm,千寻产品:FindNow
用户3购买了千寻产品:FindS,千寻产品:FindM,千寻产品:FindCm
用户4购买了千寻产品:FindCm,千寻产品:FindNow

>>>>>>>>>>与千寻产品:FindS一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:FindM, 共同购买次数:2
商品名称:千寻产品:FindCm, 共同购买次数:2

>>>>>>>>>>与千寻产品:FindCm一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:FindS, 共同购买次数:2
商品名称:千寻产品:FindNow, 共同购买次数:2
商品名称:千寻产品:FindM, 共同购买次数:2

>>>>>>>>>>与千寻产品:FindM一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:FindS, 共同购买次数:2
商品名称:千寻产品:FindCm, 共同购买次数:2
商品名称:千寻产品:云踪, 共同购买次数:1
商品名称:千寻产品:FindMM, 共同购买次数:1

>>>>>>>>>>与千寻产品:FindMM一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:云踪, 共同购买次数:1
商品名称:千寻产品:FindM, 共同购买次数:1

>>>>>>>>>>与千寻产品:云踪一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:FindMM, 共同购买次数:1
商品名称:千寻产品:FindM, 共同购买次数:1

>>>>>>>>>>与千寻产品:FindNow一起被购买的产品有<<<<<<<<<<<<<<<
商品名称:千寻产品:FindCm, 共同购买次数:2



小说《我是全球混乱的源头》
此文章本站原创,地址 https://www.vxzsk.com/1267.html   转载请注明出处!谢谢!

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程


上一篇:redis 排行榜 下一篇:redis 发布订阅实例
^