智能云端素材库后端-图片协同编辑 协同编辑方案设计每个执行动作都是一个事件。 执行用户将事件发送给服务器,然后服务器将事件转发给其他用户。这个过程中执行用户为事件生产者,其他用户为事件消费者。 事件包括: 用户A建立连接,其他用户显示“用户A加入编辑”。 用户A执行编辑操作,其他用户同步显示执行结果。 用户A断开连接,其他用户显示“用户A退出编辑” 编辑操作仅包括旋转和放大缩小。 如何解决并发冲突协同编辑操作是并发的,可以会存 2025-03-23 Java后端项目 #Java后端项目
高并发购物秒杀系统-优化细节 优化方向包括: 解决超卖问题:使用Redis预减库存,使用Redis分布式锁。使用lua脚本优化。 性能优化:使用RabbitMQ异步处理消息。 安全优化:接口地址隐藏、验证码、接口限流。 解决超卖问题首先在减少库存时,对数量进行判断,不能减少成负数。 使用唯一索引可以将用户id和商品id生成唯一索引,来确保不存在同一用户秒杀多个商品。 使用RabbitMQ基本思路为尽可能减少对数据库的访问。 2025-03-21 Java后端项目 #Java后端项目
智能云端素材库后端-团队空间 库表设计团队空间是空间的一种,因此在空间表中添加空间类别字段,对私人空间和团队空间进行区分。 团队空间和用户是多对多的关系,创建一个空间成员表进行关联。 空间权限控制使用RBAC 权限控制模型(基于角色的访问控制,Role-Based Access Control),核心概念为用户、角色、权限。 权限管理方案采用Sa-Token权限校验框架。 权限定义使用JSON定义权限。 创建相应数据模型,创建 2025-03-13 Java后端项目 #Java后端项目
智能云端素材库后端-图片功能扩展 以图搜图从全网搜索和用户上传的图片类似的图片。 接入百度以图搜图API,功能实现类似爬虫。 流程是首先获取图片网址,之后获取该网站的图片列表界面网站,最后获取图片列表。过程主要在解析页面元素和JSON格式的请求。 颜色搜索限定在个人空间内搜索。 将在上传图片时将主色调作为图片的属性进行保存。 搜索时计算颜色的相似度,根据相似度返回结果。 相似度计算方法有很多,这里使用欧几里得距离计算。 获取图片列 2025-03-13 Java后端项目 #Java后端项目
智能云端素材库后端-私人空间模块 私人空间模块包括空间管理,空间内图片管理,以及空间级别和限额控制。 私人空间的图片和公共空间的图片实际在同一个表中,只是公共空间的空间id为null。 即此时对一个用户来说,图库的图片有三种: 他人上传的公共图片:spaceId=null, userID!=self 自己上传的公共图片: spaceId=null, userID==self 自己 2025-03-12 Java后端 #Java后端
智能云端素材库后端-图片模块优化 优化包括4部分 查询优化:主要通过缓存来提高查询性能。 上传优化:使用压缩、秒传等方法提高速度和稳定性。 加载优化:使用缩略图、CDN加速方法,来加快图片的加载速度。 存储优化:冷热数据分离,并指定清理策略。 查询优化适合缓存的数据:读多写少 使用Redis+Caffeine实现多级缓存。 Redis缓存设计三要素:key、value、过期时间 key通过将查询条件转为JSON对象,之后将JS 2025-03-12 Java后端项目 #Java后端项目
智能云端素材库后端-用户上传 本模块主要解决两个问题: 用户上传图片并审核 URL导入图片 用户上传图片并审核使用审核状态进行控制,审核状态包括待审核,审核通过,审核拒绝。表中使用0,1,2表示。 用户只能看见审核通过的图片。 库表设计为审核状态添加索引。 URL导入图片流程为校验图片、服务器下载临时文件、上传到COS对象存储、删除临时文件。 校验图片使用URL和head请求,主要校验图片格式和大小。 2025-03-12 Java后端项目 #Java后端项目
智能云端素材库后端-图片模块 库表设计给常用查询字段添加索引。 对象存储服务器本地存储缺点: 不利于扩展: 服务器存储空间问题 不利于迁移 不够安全: 权限控制不当,会被用户恶意访问资源 不利于管理: 缺乏数据处理、流量控制等功能 对象存储:存储海量文件的分布式服务,具有高扩展性、低成本、可靠性等优点。 上传图片的处理策略主要问题在于图片与图片数据的存储。 两种方法: 上传图片时生成图片url,在填写信息后统一保存。 上 2025-03-11 Java后端项目 #Java后端项目
智能云端素材库后端-初始化 整合依赖 MyBatis Plus Hutool Knife4j AOP切面 项目初始化新建项目,整合依赖和编写通用代码 其中通用代码包括: 自定义异常 包括错误码枚举类和自定义业务异常,同时封装一个ThrowUtils简化抛出异常代码。 响应包装类 用于包装返回前端的信息,包括响应信息类,以及响应工具类。 全局异常处理器 利用AOP切面全局对业务异常和RuntimeExcep 2025-03-11 Java后端项目 #Java后端项目
智能云端素材库后端-用户模块 库表设计 给唯一值添加唯一键,(用户账号),来防止重复。 给userName添加索引。 数据访问层连接并创建数据库表后,使用MyBatisX快速生成代码。注意移动后修改 mapper的xml文件中的包名。 此外将实体类的ID改为雪花算法生成,防止爬虫爬取。但是若以ID为索引,雪花算法会存在性能问题。 采用逻辑删除,方便恢复数据。 创建用户类型的枚举类。 用户注册创建注册请求信息类。添加注册方法并 2025-03-11 Java后端项目 #Java后端项目