网络日志数据session案例(下)

案例来自www.51doit.com培训班行哥的课程案例

第二问:

将每次session进行汇总,得出用户每次session的浏览起、止页面,每次session会话总时长等,示意如下:
这里写图片描述

分析:

这里写图片描述

代码如下:
1 . 新建一个IPBean用来存结果数据:
public class IPBean {
//session号  ip地址    起始请求时间  结束请求时间  起始页面    跳出页面    访问时长
    private long session;
    private String ip;
    private Date startTime;
    private Date endTime;
    private String startUrl;
    private String endUrl;
    /**访问时长,单位是秒*/
    private long time;
2 . 得到session汇总的结果
public static void secondQuestion() throws FileNotFoundException, IOException {
        //将每次session进行汇总,得出用户每次session的浏览起、止页面,每次session会话总时长
        List<IPBean> list = new ArrayList<>();
        //将MapMap<String, List<SessionBean>>转成需要的Map
        Map<Long, List<SessionBean>> sessionMap = getSessionMap();
        Set<Entry<Long, List<SessionBean>>> entrySet = sessionMap.entrySet();
        for (Entry<Long, List<SessionBean>> entry : entrySet) {
            List<SessionBean> value = entry.getValue();
            //如果value元素只有一个
            if(value.size()==1) {
                SessionBean sBean = value.get(0);
                IPBean ipBean = new IPBean(sBean.getSession(), sBean.getIp(), sBean.getTime(), sBean.getTime(), sBean.getUrl(), sBean.getUrl(), 0);
                list.add(ipBean);
            }else {
                //不止一个
                SessionBean startBean = value.get(0);
                SessionBean endBean = value.get(value.size()-1);
                //时间单位是秒
                long times = (endBean.getTime().getTime()-startBean.getTime().getTime())/1000;
                IPBean ipBean = new IPBean(startBean.getSession(), startBean.getIp(), startBean.getTime(), endBean.getTime(), startBean.getUrl(), endBean.getUrl(), times);
                list.add(ipBean);
            }
        }
        list.forEach(System.out::println);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 字符串类型: - 缓存系统:使用redis作为缓存系统,将频繁访问的数据存储为字符串类型,例如用户的session信息、页面的静态内容等。 - 计数器:使用redis的incr/decr命令实现计数器功能,例如网站的PV/UV统计、商品的销量统计等。 - 队列:使用redis的LPUSH/RPUSH和LPOP/RPOP命令实现队列功能,例如消息队列、任务队列等。 2. 哈希类型: - 用户信息存储:将用户的基本信息存储为哈希类型,例如用户的昵称、头像、性别等。 - 商品信息存储:将商品的基本信息存储为哈希类型,例如商品的名称、价格、库存等。 - 配置信息存储:将应用程序的配置信息存储为哈希类型,例如数据库的连接信息、日志的级别等。 3. 列表类型: - 排行榜:将用户的得分等信息存储为列表类型,使用redis的ZADD命令实现排行榜功能。 - 最新消息:将最新的消息存储为列表类型,使用redis的LPUSH/RPUSH和LPOP/RPOP命令实现消息队列功能。 - 历史记录:将用户的历史记录存储为列表类型,例如用户的搜索历史记录、浏览历史记录等。 4. 集合类型: - 标签系统:将文章的标签信息存储为集合类型,使用redis的SADD命令实现标签系统功能。 - 共同好友:将用户的好友关系存储为集合类型,使用redis的SINTER命令实现查找共同好友功能。 5. 有序集合类型: - 排行榜:将用户的得分等信息存储为有序集合类型,使用redis的ZADD命令实现排行榜功能。 - 地理位置:将地理位置信息存储为有序集合类型,使用redis的GEOADD命令实现地理位置搜索功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值