SpringBoot集成WebSocket
SpringBoot集成WebSocket1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>
添加WebSocketConfiguration配置1234567@Configurationpublic class WebSocketConfiguration { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }}
主要逻辑类1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
设计模式
单例模式饿汉式123456789public class SingleModeHunger { private SingleModeHunger() {} private static SingleModeHunger instance = new SingleModeHunger(); public static SingleModeHunger getInsatce() { return instance; }}
123456789101112public class SingleModeHungerStaticBlock { // 通过静态代码块 private SingleModeHungerStaticBlock() {} private static SingleModeHungerStaticBlock singleModeHungerStaticBlock; static { singleModeHu ...
利用lua保证Redis原子性
fruit这个key的值为100
开1000线程去抢
直接成负数了,👇未利用lua脚本
12345678910@GetMapping("/nosafe")public String exhaustFruit() { ValueOperations operations = redisTemplate.opsForValue(); Integer integer = Integer.valueOf(String.valueOf(operations.get("fruit"))); if (integer < 1) { return "被抢完了"; } operations.increment("fruit", -1); return "获得一个水果";}
利用lua脚本来保证redis的原子性👇
12345678910111213141516String lua = "loc ...
Linux 学习笔记
文件系统
/bin: binary, 表示这个目录存储的是经常使用的命令
/sbin: system, 系统管理员使用的系统管理程序
/root:这是系统管理员(root user)的目录
/etc:这里主要存放了系统配置方面的文件
/dev:这里主要存放与设备(包括外设)有关的文件(unix和linux系统均把设备当成文件)。
/home:这里主要存放你的个人数据。
/tmp:这是临时目录。
/mnt:这个目录一般是用于存放 “挂载储存设备的挂载目录” 的,比如有cdrom 等目录。
/usr:在这个目录下,你可以找到那些不适合放在/bin或/etc目录下的额外的工具
/opt:这里主要存放那些可选的程序。
/proc:操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。
/var:这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log 这 ...
Lombok
常用注解如何开启:
下载依赖 + IDEA 中 Lombok 的 plugin
12345<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional></dependency>
@Data
可为当前类,生成对应的get、set、toString、equals、hashCode方法
使用后
@Setter
可生成set方法
使用后
@Getter
可生成get方法
使用后
@AllArgsConstructor
可生成全参构造器
@NoArgsConstructor
无参构造
@Slf4j
自动声明log变量
12与以下代码一致private static final Logger log = LoggerFactory.getLogger(ClassController.class);
@R ...
Redis 学习笔记
什么是缓存?
本地缓存
Caffeine 库
多级缓存
Redis 分布式缓存
数据类型
常用操作
Java 操作 Redis
Spring Boot Redis Template
Redisson
主从模型搭建
哨兵集群搭建
日志持久化
缓存(Redis)应用场景
数据共享
单点登录
计数器
限流
点赞
实时排行榜
分布式锁
缓存常见问题
缓存雪崩
缓存击穿
缓存穿透
缓存更新一致性
安装教程1、准备升级gcc
1、因为redis-5以上要使用gcc5.3以上版本进行编译,但是centos7默认安装的gcc版本是4.8.5,所以需要升级gcc版本:
如果gcc版本过低,编译的时候会出错:
12345#安装gccyum -y install gcc tcl# 查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5gcc -v
12345678910111213141516171819# 升级到gcc 9.3:yum -y install centos-release-sclyum -y install devtoolset-9-gcc dev ...
设计模式原则
设计模式原则12345671、单一职责2、开闭原则3、接口隔离4、里氏替换5、依赖倒转6、合成复用7、迪米特法则
单一职责
对类来说,即一个类只负责一项职责
1234567891011121314public class Vehicle { public void run(String vehicleName) { System.out.println(vehicleName + "在陆地上运行"); };}class Test { public static void main(String[] args) { Vehicle vehicle = new Vehicle(); vehicle.run("汽车"); vehicle.run("飞机"); }}此方式违反了单一职责原则,Vehicle并不是只是单一的职责。并且如果我要对飞机进行特别修改的话,就会对汽车造 ...