当前位置: 首页 > wzjs >正文

动漫做a视频网站有哪些上海展厅

动漫做a视频网站有哪些,上海展厅,视频变成网站怎么做的,手机网站在后台怎么做编辑为什么选择ConcurrentHashMap? 在开发聊天应用时,我们需要存储和管理大量的聊天消息数据,这些数据会被多个线程频繁访问和修改。比如,当多个用户同时发送消息时,服务端需要同时处理这些消息的存储和查询。如果用普通的…

为什么选择ConcurrentHashMap?
在开发聊天应用时,我们需要存储和管理大量的聊天消息数据,这些数据会被多个线程频繁访问和修改。比如,当多个用户同时发送消息时,服务端需要同时处理这些消息的存储和查询。如果用普通的HashMap,可能会出现线程安全问题,比如数据被覆盖或者读取到错误的数据。
而ConcurrentHashMap是一个专门为多线程环境设计的数据结构,它的主要优点如下:

  1. 线程安全
    ConcurrentHashMap内部通过锁分段机制(或者在Java 8及以上版本中使用CAS操作和synchronized锁)来保证线程安全。这意味着多个线程可以同时读写它,而不会出现数据错乱的问题。
  2. 高性能
    相比普通的HashMap,ConcurrentHashMap在多线程环境下性能更高。它允许多个线程同时读取和更新数据,而不会像Collections.synchronizedMap那样锁住整个表。
  3. 支持高并发
    聊天应用通常需要处理大量的并发请求,比如同时接收和发送消息。ConcurrentHashMap能够很好地支持这种高并发场景,确保数据的读写操作不会成为性能瓶颈。
  4. 易于使用
    它的使用方式和普通的HashMap非常相似,几乎不需要额外的学习成本。只需要把HashMap替换为ConcurrentHashMap,就可以在多线程环境中安全地使用。
    举个例子
    假设我们有一个聊天应用,用户A和用户B同时向用户C发送消息。如果没有线程安全机制,可能会出现以下问题:
    ● 用户A的消息覆盖了用户B的消息。
    ● 用户C看到的消息顺序混乱。
    而ConcurrentHashMap可以很好地解决这些问题。它会确保每个消息都被正确存储,并且在多个线程同时操作时不会出现冲突。

总结
选择ConcurrentHashMap是因为它既安全又高效,特别适合聊天应用这种需要处理大量并发数据的场景。它能帮我们省去很多线程安全的麻烦,让代码更简洁,运行也更稳定。
希望这个解释清楚了为什么选择ConcurrentHashMap!
聊天应用中的私聊和群聊数据查询优化
在开发聊天应用时,如何查询和展示私聊和群聊的会话列表是一个关键问题。我们需要从服务端向客户端传递两种类型的数据:私聊消息和群聊消息。为了实现这一点,我们使用了ConcurrentHashMap来存储这些数据,确保线程安全和高效的并发访问。

聊天应用中的私聊和群聊数据查询优化

在开发聊天应用时,如何查询和展示私聊和群聊的会话列表是一个关键问题。我们需要从服务端向客户端传递两种类型的数据:私聊消息和群聊消息。为了实现这一点,我们使用了ConcurrentHashMap来存储这些数据,确保线程安全和高效的并发访问。

以下是服务端代码的结构:

ConcurrentHashMap<Long, List<ChatMessage>> messageMap = new ConcurrentHashMap<>();
ConcurrentHashMap<Long, List<GroupMessage>> groupMessageMap = new ConcurrentHashMap<>();

私聊会话查询

私聊会话的查询需要获取以下信息:

  1. 用户头像、用户名和会话是否置顶。
  2. 最后一条消息、最后活动时间和未读消息数量。

查询私聊用户信息

SELECT m.user_id, m.isPinned, u.username, u.image 
FROM friend m 
JOIN user u ON m.user_id = u.id 
WHERE m.friend_id = ?
  • friend:存储用户之间的关系,user_id表示好友的ID,friend_id表示当前用户的ID,isPinned表示是否置顶。
  • user:存储用户的基本信息,username是用户名,image是用户头像。

查询私聊消息信息

SELECT CASE WHEN sender_id = ? THEN receiver_id ELSE sender_id END as chat_id, MAX(time) as last_time,(SELECT content FROM messages m WHERE (m.sender_id = ? OR m.receiver_id = ?) AND (CASE WHEN m.sender_id = ? THEN m.receiver_id ELSE m.sender_id END) = chat_idAND m.room_id IS NULLORDER BY m.time DESC LIMIT 1) as last_message,SUM(CASE WHEN receiver_id = ? AND status = 0 THEN 1 ELSE 0 END) as unread_count
FROM messages 
WHERE (sender_id = ? OR receiver_id = ?) AND room_id IS NULL 
GROUP BY chat_id
ORDER BY last_time DESC;
  • messages:存储消息内容,sender_idreceiver_id分别表示发送者和接收者的ID,time表示消息发送时间,status表示消息的读取状态(0表示未读,1表示已读)。
  • 逻辑解释
    • CASE WHEN sender_id = ? THEN receiver_id ELSE sender_id END as chat_id:根据当前用户ID,确定对方的用户ID。
    • MAX(time):获取最后一条消息的时间。
    • 子查询获取最后一条消息的内容。
    • SUM(CASE WHEN receiver_id = ? AND status = 0 THEN 1 ELSE 0 END):统计未读消息的数量。

群聊会话查询

群聊会话的查询需要获取以下信息:

  1. 群组名称、群组头像、是否置顶。
  2. 最后一条消息、最后活动时间和未读消息数量。

查询群聊信息

SELECT g.id AS group_id,g.name AS group_name,g.image AS group_avatar,MAX(ug.timeship) AS last_active_time,(SELECT ug2.message FROM user_group ug2 WHERE ug2.group_id = g.id ORDER BY ug2.timeship DESC LIMIT 1) AS last_message,SUM(CASE WHEN ug.status = 1 AND ug.user_id != ? THEN 1 ELSE 0 END) AS unread_count,MAX(ug.isPinned) AS is_pinned
FROM groupsql g
JOIN user_group ug ON g.id = ug.group_id
WHERE ug.user_id = ? OR EXISTS (SELECT 1 FROM user_group WHERE group_id = g.id AND user_id = ?)
GROUP BY g.id, g.name, g.image
ORDER BY is_pinned DESC, last_active_time DESC;
  • groupsql:存储群组的基本信息,id是群组ID,name是群组名称,image是群组头像。
  • user_group:存储用户与群组的关系,group_id是群组ID,user_id是用户ID,timeship是用户加入群组的时间,message是群组消息,status表示消息的读取状态(1表示未读)。
  • 逻辑解释
    • MAX(ug.timeship):获取群组的最后活动时间。
    • 子查询获取最后一条消息的内容。
    • SUM(CASE WHEN ug.status = 1 AND ug.user_id != ? THEN 1 ELSE 0 END):统计未读消息的数量。
    • MAX(ug.isPinned):判断群组是否置顶。
    • ORDER BY is_pinned DESC, last_active_time DESC:按置顶优先级和最后活动时间排序。

文章转载自:

http://SZwLy6jP.tfgrg.cn
http://RrIfnHSN.tfgrg.cn
http://IjRlJWKC.tfgrg.cn
http://kHz77cxK.tfgrg.cn
http://BtfcxHV5.tfgrg.cn
http://GSoxy9ap.tfgrg.cn
http://5sF4zLIc.tfgrg.cn
http://8h8Zph6B.tfgrg.cn
http://vwb5Fpy5.tfgrg.cn
http://kimmH5gX.tfgrg.cn
http://J9Gr9k0T.tfgrg.cn
http://nVGFHIT0.tfgrg.cn
http://W9ujcfV9.tfgrg.cn
http://l3WIVu4A.tfgrg.cn
http://miHgS3QI.tfgrg.cn
http://MaaJcRVm.tfgrg.cn
http://B8cG4Uar.tfgrg.cn
http://FNtAXHbU.tfgrg.cn
http://hdxQwES1.tfgrg.cn
http://8bH1qif3.tfgrg.cn
http://Kir3SeoA.tfgrg.cn
http://Qcli5M38.tfgrg.cn
http://B7EkZVre.tfgrg.cn
http://5yIaQJn7.tfgrg.cn
http://21onIlq5.tfgrg.cn
http://kYtVvh21.tfgrg.cn
http://P66qMpMU.tfgrg.cn
http://RxyWPfOV.tfgrg.cn
http://X7jTHu55.tfgrg.cn
http://ZVZmdXiu.tfgrg.cn
http://www.dtcms.com/wzjs/682518.html

相关文章:

  • 做网站需要什么手续海外服务器ip免费
  • ppt插件 网站wordpress直接读取数据库
  • 网站备案 取消接入有域名怎么建网站南宁
  • 网站制作将栏目分类百度非企渠道开户
  • 市局网站建设建议办公室装修设计效果图免费
  • 做招聘网站排名杭州做网站的公司
  • 接网站建设的单子用html5做的网站代码
  • 中盛浩瀚建设有限公司网站怎么用手机做钓鱼软件或者网站
  • 渝水区城乡建设局网站兰州吸引用户的网站设计
  • 建设网站有哪些目的php做网站教程
  • 苏州网站建设制作设计类网站策划书
  • 医院网站制作网站制作 成功案例
  • 公司网站进不去qq空间手机评测网
  • 网站建设费用价格多个网站对比表格怎么做
  • 网站建设 团队介绍做个人网站到哪里做
  • php做的网站怎么运行物联网平台层的主要功能
  • 网站建设 音频插件seo顾问人
  • 宁波网站推广外包服务网站开发目录规范
  • 设计公司网站模板基金网站制作
  • 贵阳网站微信建设公司网站推广交换链接
  • perl网站建设网站建设维护网页设计
  • 自建站怎么做学动漫设计后悔死了
  • 站酷网网址美工做网站尺寸多少
  • php版本不同于wordpress使用宁波seo免费优化软件
  • 营口pc网站开发商城网站制作教程
  • 郑州企业网站价格工程公司的会计做账有哪些科目
  • seo 网站现在最火的社交电商平台
  • 芜湖设计公司排名网站优化预算
  • 找做网站的公司河南郑州建设信息网
  • 微信公众号制作网站怎么打开公众号