项目:2022

#博学谷IT学习技术支持#

个人笔记后续会进行内容改进

stringutils.isEmpty(code) 如果code为空

流程:

客户端发送请求给服务端


服务端内部采用dubbo模式在微服务之前相互调用

第三方插件短信验证码

iwt用户鉴权

获取登录验证码客户端输入手机号发送短信,短信写死。redis存取,在跟数据库信息进行比较验证码

应用场景

input stream  输出流

output stream 输入流

bufferedoutputstream 字节缓冲输出流

bufferedinputstream 字节缓冲输入流

图片上传文件存储。阿里云的oss:

阿里云oss抽取为自动装配的组件

一、appsevicer配置文件编写内容

二、autoconfig类编写properties

写template模板类 template需要properties中的属性。构造出来

编写bean

百度人脸识别别

第三方插件的使用步骤

1、开通服务

2、找到api实例代码

3、抽取

代码编写

(数据层提供者,负责跟数据库打交道

实体类model

mapper数据层接口 db

接口。api interface层  保存修改

接口实现db

(表现层 消费者 直接跟app对接

controller  注入service

service  service调取api的方法

修改头像

使用multipartfile获取头,后边是token

判断token可用性

设置uesid,是用api更新userinfo

vo处理实体类之间的数据类型不一致

取消项目启动时候的日志和banner

编写logback.xml 配置<configuration></configuration>标签即可

处理用户鉴权、统一处理token

一、编写token拦截器 在进入控制器之前先分辨好token的可靠性

二、编写mvc控制器类来指定哪些请求需要被拦截

三、编写threadloacl线程工具,把后续用到的userid和userphone存储到线程中

四、在token拦截器编写控制器执行完之后的要删除线程的方法


黑名单维护

一、黑名单列表page pageSize

二、findlist方法service端 返回PageResilu

三、serice端DubboReference Blackapi

获取id 根据id和page pageSize 返回pageResult

四、api

五、api实现类  DubboService

引入userinfomapper 查询数据库

六、编写select查询语句

今日佳人

一、引入依赖,写配置

二、配置项目架子不用配置mapper 使用mongodb数据库,引入MongodbTemplate

三、api统一存放interface

四、在mongo中编写api实现类!!!!!

推荐:

代码实现:

controller:调用tanhuaapi查询返回值是pageresult 参数是dto

service:

一、获取用户id

二、根据recommendapi新建查询方法。返回值是pagereslit 参数是 psge psgesize userid

三、冲pr中获取iitem数据

四、item数据就是us而info数据

五、判断userinfo数据是否为null null就直接返回,不null就循环获取userid,查询出userinfo的数据  循环的时候可以对数据进行判断

如果输入的信息跟userinfo的数据不一致直接continue

六、根据recommmeduser和userinfo数据可以封装成Todaybest数据

七、吧todaybest转换成pagerealut  创建 todaybest集合。吧循环的数据add到todaybest集合,然后再重新set到pr中

八、返回pr

api;

根据第二步的新建方法编写方法

apiimpl:

构建mongodb的criteria和query

查询总数

查询集合

返回pagereslut数据,参数是携带的page,pagesize,查询出来的总数count和集合list

优化userinfoapi批量查询用户

useriinfoapi:

源代码需要根据id查询userinfo,吧id封装为list 返回值为map,《Long,Userinfo》 方法返回值List(Long),Userinfo userinfo

实现接口:

构建warrper

查询出id

判断userinfo(条件是否存在)

进行相应的判断

调用mapper返回list

最后根据collutile。filedvaluemap返回map集合。这个工具类第一个参数是返会的内容,放第二个是根据什么进行返回

优化的内容是collutil.filedvaliemap(list,"id") 有返回map的也有返回list的

mongodb集群

副本集群:

顾名思义。一个数同时存在多个mongodb服务器上。可以有效解决单点故障

执行流程:

副本集群内不存在主节点和从节点,主节点只有一个,从节点可以有多个。主要是依赖主节点的读写与客户端交互。内部朱重建会有心跳来判断

服务器是否正常。如果主节点宕机,剩下的从节点会选举出一个新的主节点对外提供服务

读写分离

分片集群:

可以解决单点故障和海量数据

包括分片服务,配置服务、路由服务

客户端访问的时候,配置服务已经存取了分片服务的所有ip,端口。而后路由服务读取配置服务,并依据规则选取恰当的分片服务

进行存取

企业是相结合的方式

分片集群负责处理海量数据,非本机群负责保障分片服务的正常运行

分片策略:

路由服务器配置策略

范围制定分片策略

数值hash策略:目前这种是最常用的策略

圈子基本功能:

发布

浏览

评论点赞

表结构设计:

一基础、两张表。一张自己的动态表,一张好友表

二改进、在原有的动态表添加可见人集合字段,根据用户来查询

三常用、在两张表的基础上添加一个冗余的数据库,来中和关系表和动态表的关系

mongodb实现主键自增

发布动态:

参数:文本、地址、经纬度、图片

返回值:无

controller:

调用movementservice

service:

判断文本是否为空,统一返回异常

获取用户id,用于后面保存动态数据     movement需要封装userid和图片信息,其他都会自动封装

把图片信息上传到oss,使用MultipartFile封装图片数据。调用osstemplate工具类上传

api:

保存movement数据

设置pid,自动增长。之前编写过增涨的service工具

设置当前时间

保存movement数据

构建mongo独有的查询,根据userid查询friends对象   friend对象自定义?

循环friend对象,封装时间线数据最后保存   时间线数据需要阿封装movementid,userid friendid

查询个人动态:

封装响应的vo实体类

参数page,pagesize,userid

返回值pageresult

controller:

调取service方法

service:

查询出个人动态,根据传递的参数,返回值是pagereslut

获取pagereslut的item,其实是movement动态数据

判断iter是否为空

不为空遍历item封装vo对象 然后转换成pagereslut

返回pagereslut

api:

mongo的查询架构

查询动态:

提取id列表用的是

Collutil.getfiledvalues

查询好友动态:////////////////////////////////////////////////////////////

redis 拼接rediskey   redisttemplate.opsforvalue().get(k)获取值

pid

字符串切割split(“条件”)

流转成数组使用. colliect(Conllecters.tostring)

aggregte

第一次解析得到数据库表

第二次将结果设置到对象中

collection.empty_list

当分页的起始页码小于数组的长度才允许分页

推荐系统存入redis 存的是pid

先查redis

会存在两种情况

1、有

有的化需要进行判断:由于redis存的字符串有逗号,需要split切割一下。如果查询的起始值小于总长度才能返回,

在api端直接根据pid查询返回

2、没有

没有就构建一群数据随机返回

随机有讲究。需要用到mongotemplate的统计方法

发布评论:

service引入

service层主要围绕,对象封装对象转化,少量业务

主要还是api层处理业务

封装comment对象,基础的comment值。publishUserId被评论的用户id方法哦api层进行处理

service层需要返回动态的操作数据

api层:

调用mogo根据动态id查询动态用户id

设置到comment,并进行更新

//!!!!!!!!

调用mogo的findandmodify方法,四个参数

根据传递的评论动态id封装query

update。inc。根据字段进行+1

option。returnnew(ture)

点赞流程:

要有返回的数字:

路径id:

service层 :

根据动态id更新comment并存入redis缓存中,快捷查询

熟悉comment表,根据动态id和互动类型,当前操作用户id查询comment表是否有数据,有数据返回已经点赞

没有数据进行封装comment,调用commentapi保存会有返回数字

存入rredis选取存储的类型,采用hash

构建字符串。调用redistemple进行put

api层:

根据service的三个字段构建query查询对象,直接调用mongotemplate的exises方法判断boolear值

取消点赞流程:

与点赞流程相反,dis

service层:

判断三个条件是否为真

不为真应该点赞

为真在进行删除

构建comment对象

delete

构建redis

delete

api层:

先删除comment表的数据

再删除movenmt的对应字段-1,调用mongotemplate的findandmodify方法构建四个条件,query,update,option和最后的实体类的字节码

环信即时通信

直接调用环信的api

抽取成模板类

一app端编写yml:配置服务的每个账号

二末班短编写properties,每个字段

三编写tempalte

四构建bean到application中

1、创建用户的是好构建环信账号,并与环信服务器配上体系关系

2、根据环信的usernameid查询userinfo数据

3、查询陌生人问题   diaoyongquestionapi即可

4、回复陌生人问题

添加好友1.0:

传递的结果是对方的userid和申请的txt字符串

!!

map.get("value") 返回的是obdject对象

使用.tostring 返回的是string字符串

更改obdject类型为string为什么不行

!!

注意点:前端相应的userid是integer需要转换成long

是用tostring转化成字符串,字符串再调用Long。valueof(string字符串)即可转化成long

service中map封装的数据需要注意操作的用户id和发送的用户idalong代表要添加的好友的id。reply中的id为当前操作用户的信息

5、添加好友2.0

参数是用户id 请求的用户id

messagecontroller中

涉及的表friendapi 环信公共类

6、查询好友列表:

首先是需要分页查询pagereslut

其次调用的api 需要查询friend表 返回值含有userinfo需要userinfo的api

进行判断

构造vo对象

探花卡片集合展示:

两张表userlike recommenduser 喜欢表和推荐表

userlike 用户和喜欢的用户id

展示是要展示推荐表的数据根据当前用户id获取对方用户,在调取userinfoapi查询userinfo数据,最后转换成todaybest集合

mongotemplate.aggregate

探花喜欢功能:

参数是喜欢的userid

不喜欢

地理位置查询:

索引:2sspere

geojsonpoint   绘制圆点   diatance 距离(半径   cricle 圆

withspere   查询第一步圆覆盖的所有点

nearquery  query的升级版

geonear   调用上面的升级版query查询距离

上述四个新的东西

了解,崩了

访客记录:

推荐好友点进去的时候就把浏览记录记录到visitors

查看访问记录:

封装一个vo

根据当前用户的id和时间查询访问表,返回的是访问表数据

如果不存在返回一个空集合

如果存在就构建返回数据vo

存redis

hash

set

视频发布:

vo aip 继承

参数封面视频地址String

视频调用fastcollction fdfsweb

colction。upload(输入流,文件个数,后缀,备注

后缀根据orga获取,submit截取

最后调用getallpath返回视频地址

web获取网络地址

oss,之前调用的ypload方法。参数直接打点获取

封装video对象,掉api保存

判断是否保存成功根据objectid判断

api。

完善video数据pid根据idwork生成

创建时间

返回video的objectid

视频集合:

pagereslut 分页数据

page和pagesize

service层:

先判断redis中是否有数据 可以根据字符串拼接的方法

如果有数据就先拿redis中的数据进行分页查询

分页查询需要先把数据处理一下split根据逗号分割

获取出的集合,放入stream流转换

Arrays。Stream(value).skip(jfwjkf).limit(pagesize).map(e->Long.valueof(e)).collect(collection.tolist)获取vid集合

调用videoapi查询出来数据

如果没有数据就查询mongo

page??? page可以需要进行计算 上面的redis查询踹的数据+mongo的数据进行拼接。

处理这种情况(如果redis中的数据只够包含第一页的五条数据,后面的五条数据需要根据mongo查询,但是mongo的page需要是1

!!如何让mongo的page变1

在redis查询后给page赋值,pageutil.totalpage(第一个参数是:redis的值的长度,第二个参数是查询的数量就是pagesize)

后面在查询mongo的时候知己额调用page-redis查询后赋值的值即可

pagesize

下面就正常封装vo对象即可

工具类获取userid,查询map 设置vo集合,循环video封装vo

api:

两个方法,根据pid列表查询redis中欧诺个户的cideo视频

根据page和pagesize查询数据,没参数直接Query quer=new Query


cacheable :先查询缓存是否偶数据,没有数据会查数据库,查到后吧数据存入redis,后续再来查询的时候就直接查询redis的数据

参数:

value:可以理解为组名

key:可以调用springel表达式#id映射

cacheput :只查询数据库,查完把数据存入redis,但是只存不取

cachevit :清空指定缓存,一般更新的时候会用到。不然会造成数据不一致。操作完成才会清空

caching : 可以包含多个查询,put或者evit集合

工具类:

hutu工具类

Collutil.GETVALUEFORLIST  //根据list集合和集合中的字段和字段字节码返回对应的数据

Page.totalpage //分页查询

StringUtils.isEmpty //判断字符穿是否为空

CollUtil.isEmpty //判断集合是否为空

nacos配置远程调用:

一、开启config的坐标

二、编写配置文件bootsrapt文件 四项内容决定选取得nacos配置

三、编写nacos网页端数据即可

后台登录:

获取验证码数据

解析token获取数据

登出:

获取用户列表数据:

延续controller service api执行顺序

调用的是db的数据库,db数据库返回的分页是Ipage 查询page数据用到的是selectpage

获取用户列表中用户的基本信息:

ai之前写过,直接在service调用即可

获取用户的视频发布信息:

返回的是video数据

mongotemplate的分页查询

参数,page,pagesie,count,list

用户动态数据查询:

阐述是用户id 用户状态 page,pagesize

返回的数据是movementvo集合

movenment包含movement数据和userinfo数据

结果是movementvo,但是没有vo表,(忘记了细节)要查询movement数据表

query.addquery(Criteria.where******

断头往后

冻结功能:

time:

1、3天

2、7天

3、永久

range:范围

1、冻结登录

2、冻结发言

3、冻结发布动态

一冻结

拼接rediskey

设置冻结时间

如果冻结时间大于0就进行时间限制的redis存储

其他的就直接存储

返回值是一个message,封装成map

二解冻

封装rediskey。直接删除

三优化之前的用户信息

1、正常

2、冻结

封装rediskey,判断redis中是否有当前key,有的话就更新数据库中的的字段

数据统计:

1、调用rabbitmq存储数据

调用listen进行获取

2、定时任务

开启定时任务

cron 秒 分时 日 月 周 年

mysql查询

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容