定时任务实现-Redisson实现分布式锁
定时任务实现-Redisson实现分布式锁主要内容(后端):
分布式定时任务执行控制
锁的概念
分布式锁概念和常见问题
分布式锁实践
定时任务实现
Spring Scheduler (spring boot 默认整合了,推荐使用这种方式)
Quartz (独立于 Spring 存在的定时任务框架)
XXL-Job 之类的分布式任务调度平台(界面 + SDK)
采用第一种方式:
主类开启 @EnableScheduling
给要定时执行的方法添加 @Scheduling , 指定 cron 表达式或者执行频率
cron 表达式 用现成的工具即可:https://cron.qqe2.com/https://www.matools.com/crontab/
控制定时任务的执行要控制定时任务在同一时间只有 1 台服务器能执行
原因:
浪费资源
脏数据,比如重复插入
如何做?
方案种类:
分离定时任务程序和主程序,只在 1 个服务器运行定时任务,成本太大
写死配置,每个服务器都执行定时任务,但是只有 ip 符合配置的服务器才真正执行业务逻辑,其他的直接返回。成本最低;但是我们的 ...
Redis 缓存实现-定时任务
7、Redis 缓存实现-定时任务主要内容(后端):1.缓存和分布式缓存讲解2.Redis介绍(5种数据结构等)3.Java操作Redis的方法(4种方法+对比分析)4.Java Redis Template序列化(包含源码追踪)5.首页缓存开发与注意事项6.缓存预热设计与实现7.定时任务介绍和实现
数据查询慢怎么办?
用缓存:提前把数据取出来保存好(通过保存到读写更快的介质,比如内存)
用定时任务:预加载缓存,定时更新缓存
思考:多个机器要执行同一个任务吗?
可以用用分布式锁解决:控制同一时间只有一台机器去执行定时任务,其他机器不用重复执行了
缓存分类分布式缓存:
Redis(分布式缓存)
mencached(分布式)
Etcd (云原生架构的一个分布式存储,存储配置,扩容能力)
单机缓存:
ehcache
Java 内存集合,如 HashMap
Caffeine (Java 内存缓存性能之王,高性能)
Google Guava
Redis 缓存实现NoSQL 数据库
key-value 存储系统(区别于 MYSQL 它存储的是键值对)
Redis 数据结构基本数据结构 ...
Spring 注解使用
Spring 注解使用@ConfigurationProperties 该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上
当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有@Bean注解且所属Class需要有@Configuration注解。
application.yml 配置文件的
12345spring: redis: port: 6379 host: localhost database: 1
使用参考代码
123456789101112131415161718@Configuration@Data@ConfigurationProperties(prefix = "spring.redis")public class RedissonConfig { private String host; private String port; @Bean public RedissonClient redissonClient() ...
Session 共享实现
Session 共享实现1. 安装 Redis官网:https://redis.io/
windows 下载:
Redis 5.0.14 下载:
链接:https://pan.baidu.com/s/1XcsAIrdeesQAyQU2lE3cOg
提取码:vkoi
redis 管理工具 quick redis:https://quick123.net/
引入 redis,能够操作 redis:
123456<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.6.4</version&g ...
Redisson 实现分布式锁
Redisson 实现分布式锁Redisson 是一个 Java 操作 Redis 的客户端,提供了大量的分布式数据集来简化对 Redis 的操作和使用,可以让开发者像使用本地集合一样使用 Redis(继承了和 Java 相同的集合类)
关键词:Java Redis 客户端,分布式数据结构,实现了很多 Java 里支持的集合
两种引用方式
spring boot starter 引入(不推荐,因为版本迭代太快,容易冲突):https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter
直接引入:https://github.com/redisson/redisson#quick-start
(1)引入依赖
12345<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.17.5&l ...
Redis 缓存实现
Redis 缓存实现NoSQL 数据库
key-value 存储系统(区别于 MYSQL 它存储的是键值对)
Redis 数据结构基本数据结构:
String 字符串类型:name:”mofeng”
List 列表:names:[“mofeng”,”dogmofeng”,”lu”]
Set 集合:names:[“mofeng”,”lu”] (值不能重复)
Hash 哈希:nameAge:{“mofeng”:1,”dogLu”:2}
Zset 集合:names[mofeng -9, doglu -12] (适合排行榜)
高级:
bloomfilter(布隆过滤器,主要从大量的数据中快速过滤值,比如邮件黑名单拦截)
geo(计算地理位置)
hyperloglog(pv/uv)
pub/sub(发布订阅,类以消息队列)
BitMap(1001010101010101010101010101)
自定义序列化为了防止写入 Redis 的数据乱码、浪费空间等,可以自定义序列化器,
新建 RedisTemplateConfig 类代码如下:
123456789101112 ...
Mybatis plus 实现分页
Mybatis plus 分页创建 MyBatisPlusConfig 类
123456789101112131415161718192021import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@MapperScan("com.yupi.yupao.mapper")publ ...
整合 Swagger + Knife4j 接口文档
Java 后端整合 Swagger + Knife4j 接口文档官方文档: https://doc.xiaominfo.com/docs/quick-start
1.引入依赖
1234567<!--引入Knife4j的官方start包,Swagger2基于Springfox2.10.5项目--><dependency> <groupId>com.github.xiaoymin</groupId> <!--使用Swagger2--> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.9</version></dependency>
2.添加配置类,注意:basePackage 需要填写 controller 的路径
千万注意:线上环境不要把接口暴露出去!!!可以通过在 SwaggerConfig 配置文件开头加上 @Profile({"dev ...
伙伴匹配系统 bug
bug 解决前后端分离跨域问题1@CrossOrigin(origins = {"http://127.0.0.1:5173/"}, allowCredentials = "true")
或者添加配置类
123456789101112131415161718192021import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class WebMvcConfg implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistr ...
匹配算法-优化
12-13 匹配算法-优化主要内容:
开发完成个人队伍页面、队伍检索等功能(前端、后端)
开发用户匹配功能(编辑距离算法)
优化用户匹配功能后端,开发前端用户匹配模式
优化前端加载效果,使用骨架屏
优化前端队伍操作权限
实现前端导航标题动态切换
优化前端、完善部分功能
前端不同页面怎么传递数据?
url querystring (xxx?id=1) 比较适用于页面跳转
url (/team/:id,xxx/1)
hash (/team#1)
localStorage
context(全局变量,同页面或整个项目要访问的公共变量)
随机匹配需求背景:为了帮助大家更快地发现和自己兴趣相同的朋友
思考:匹配一个还是多个?
答:匹配多个,并且按照匹配的相似度从高到低排序
思考:怎么匹配?(根据什么来进行匹配?)
答:根据标签 tags
还可以根据 user_team 匹配加入相同队伍的用户
问题本质:找到有相似标签的用户
1.怎么匹配?
找到有共同标签最多的用户(Top N)
共同标签越多,分数越高,月排在前面
如没有匹配的用户,随机推荐( ...