• 杨成龙
    2019-09-20
    只是基于redis吗?没用到netty吗?

    作者回复: 期中实战只是个简易版demo哈,期末的实战会基于目前轮询的方式进行长连接改造,再加上ack和心跳等功能,这样也让大家能对“消息推送实时性”的实现方案有一个比对。
    另外,实战的目的是让大家自己尝试结合课程前面的内容来练手加深对知识的理解,所以提供的demo并不具备线上可用性,只是一个简单的参考。

    
     2
  • 王蒙
    2019-10-17
    Embedding方式是什么意思

    作者回复: 就是嵌入到jvm里的一些中间件和db,web容器这些,随着jvm启动也能跟着一起run起来,用起来比较方便。

    
     1
  • Geek_71a2ee
    2019-09-21
    消息索引表:

    CREATE TABLE IM_MSG_RELATION (
    owner_uid INT NOT NULL,
    other_uid INT NOT NULL,
    mid INT NOT NULL,
    type INT NOT NULL,
    create_time TIMESTAMP NOT NULL,
    PRIMARY KEY (`owner_uid`,`mid`)
    );
    CREATE INDEX `idx_owneruid_otheruid_msgid` ON IM_MSG_RELATION(`owner_uid`,`other_uid`,`mid`);
    ownerid otherid是什么意思?张三给李四发一条消息,在这个表里存几条数据呢
    展开

    作者回复: 会存两条,咱们课程2里面有讲过的哦

    
     1
  • Geek_908e99
    2019-11-14
    老师我看更新未读数的逻辑并没有用到redis事务,我看到的就是下面两行,这个实现不能保证原子性吧:

    /**更未读更新 */
    redisTemplate.opsForValue().increment(recipientUid + "_T", 1); //加总未读
    redisTemplate.opsForHash().increment(recipientUid + "_C", senderUid, 1); //加会话未读

    作者回复: 嗯,这个demo没有用lua来保障原子性,所以是会存在并发更新的一致性问题,有兴趣的话可以尝试来优化改造试试哈,核心lua代码在文章中有。

    
    
  • Ricky Fung
    2019-10-24
    建议 期中 和 期末考试作业 代码可以分两个分支,这样大家看起来更直观。
    
    
  • 五点半先生
    2019-10-20
    搬运,https://github.com/coldwalker/Sample
    
    
  • Geek_defa2f
    2019-10-18
    能不能期中期末实战的代码分开部署在github上,现在才学到,发现期中的代码被期末的代码覆盖了。。。

    作者回复: 期末的代码基本没有覆盖期中的哈,都是独立的功能和实现,页面也都是独立的。

    
    
  • yic
    2019-10-05
    消息索引表:

    CREATE TABLE IM_MSG_RELATION (
    owner_uid INT NOT NULL,
    other_uid INT NOT NULL,
    mid INT NOT NULL,
    type INT NOT NULL,
    create_time TIMESTAMP NOT NULL,
    PRIMARY KEY (`owner_uid`,`mid`)
    );
    CREATE INDEX `idx_owneruid_otheruid_msgid` ON IM_MSG_RELATION(`owner_uid`,`other_uid`,`mid`);
    老师,消息索引表这么创建,请教一下群发(500人群)消息,是不是要插入500条记录? 如果是插库的话,性能能保证吗?
    展开

    作者回复: 群发消息qps很高的话就不要用mysql这种关系型数据库啦,另外也不需要发件人维度的消息存储,可以考虑采用hbase这类nosql数据库来存储索引。

     1
    
  • 王棕生
    2019-09-25
    感谢老师的总结和源码分享!

    作者回复: 😺 谢谢

    
    
  • YidWang
    2019-09-24
    消息 没有重复 设计
    
    
  • Geek_发现
    2019-09-24
    老师你好,我启动项目报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embededRedis': Invocation of init method failed; nested exception is java.lang.RuntimeException: Can't start redis server. Check logs for details.
    我redis是启动了的,端口号也是6379,怎么回事呢?

    作者回复: 还有其他报错吗?比如“This redis server instance is already running...”或者“Failed to start Redis instance”。可以断点跟进到start方法里去看看。

     4
    
  • 给我点阳光就灿烂
    2019-09-23
    即使通讯的消息可不可以不存在数据库中而已消息队列的形式代替呢

    作者回复: 存消息队列的问题在于你需不需要按会话维度啥的来进行查询,分页等等。如果不需要,可以只根据uid维度来暂存消息和信令。

    
    
  • leslie
    2019-09-23
    期中考试 、、、还是等期末考试的时候一起做吧,看的懂写不来,出去的都是伪代码:忙起来就发现写这个东西自己的Coding太差了,被Coding能力拖后腿了:谁让这是DBA和OPS的通病呢、、、

    作者回复: 建议还是动手写一写,一码胜千言~

    
    
  • 飞翔
    2019-09-23
    老师 有一个问题
    对于redis 事务
            redisTemplate.multi();
            redisTemplate.opsForValue().increment(recipientUid + "_T", 1); //加总未读
            redisTemplate.opsForHash().increment(recipientUid + "_C", senderUid, 1); //加会话未读
            redisTemplate.exec();

    假设第一个加总未读失败, 事务并不会停止,而是继续进行,第二个加会话未读, 这样不也是数据就不一致了嘛, redis 事务完全和没有一样呀?
    展开

    作者回复: 是的,redis的事务只保证这些命令原子执行,执行过程中就算有命令失败,队列中的其他命令也会被执行,所以调用方需要根据返回结果来进行二次处理。

    
    
  • 飞翔
    2019-09-22

    CREATE INDEX `idx_owneruid_otheruid_msgid` ON IM_MSG_RELATION(`owner_uid`,`other_uid`,`mid`);
    老师 消息索引表中 为什么要创作(`owner_uid`,`other_uid`,`mid`); 这三个的联合索引 呀

    作者回复: 分页的时候会用到。比如:
    select msgid from IM_MSG_RELATION where owner_uid=? and other_uid=? and mid <= ? order by mid desc limit ?,?

    
    
  • 飞翔
    2019-09-22
    消息内容表:

    CREATE TABLE IM_MSG_CONTENT (
    mid INT AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(1000) NOT NULL,
    sender_id INT NOT NULL,
    recipient_id INT NOT NULL,
    msg_type INT NOT NULL,
    create_time TIMESTAMP NOT NUll
    );


    老师 消息内容表中的sender_id INT NOT NULL,
    recipient_id INT NOT NULL, 这两个字段是不是有些多余?
    展开

    作者回复: 嗯,是冗余了一下,主要是方便离线统计和后台使用,业务上可以不需要。

    
    
我们在线,来聊聊吧