Redis基本本应用(全局唯一,互斥锁,分布式锁)
Redis基本应用(全局唯一,互斥锁,分布式锁)优惠券秒杀业务全局唯一ID每个店铺都可以发布优惠券,当用户抢购时,就会生成订单并保存到tb_voucher_order这个表里,而只使用数据库自增ID就存在一些问题:
id规律性太明显
受单表数据量的限制
假设:随着业务不断扩大,mysql单表容量不得超过500w,数据量过大之后,我们要进行拆库拆表,但是拆表之后,他们从逻辑上来说是同一张表,所以他们的id是不能一样的(mysql的ID是自增的)我们要保证id的唯一性
全局ID生成器(是否能用雪花算法呢?)
需要我们满足:唯一性,高可用,高性能,递增性,安全性
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package com.hmdp.utils;import org.springframework.data.redis.core.StringRedisTemplate;import javax.annotation.Resource ...
在调试过程中报了个javavm错误
在调试过程中报了个javavm错误
解决方法
在-ea后加上-Xshare:off
Redis语法以及一些基本应用
Redis语法以及一些基本应用Resids数据结构
常用命令:
KEYS:查看符合模板的所有key
DEL: 删除一个key
EXISTS:判断key是否存在
EXPIRE:给一个key设置有效时长
TTL:这个key剩余时长
String类型
常见的有:
SET
GET
MSET:批量添加
MGET:更加多个key获取多个String类型的value
INCR:让一个整型的key自增1
INCRBY:让一个整型的key自增并指定步长,incrby num 2 就是让num增加2
INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
SETNX:添加一个String类型的键值对,前提是这个key不存在
SETEX:添加一个String类型的键值对,并且制定有效期
Redis没有Table的概念,如何区分不同类型的key?
允许有多个单词形成层级结构,多个单词之间用“:”隔开
项目名:业务名:类型:id
HASH类型
hashmap结构 value是一个无序字典
String结构是将对象序列化为JSON字符串后存储,当我们需要修改的时候很不方便,所以我们用hash类型来 ...
Rust随手记
Rust随手记基本数据类型-原生类型
元组(tuple)
允许各个元素类型不相同
123fn main(){ let tup: (i32,f64,u8) = (500,6.4,1);}
字符串
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677// quiz2.rs//// This is a quiz for the following sections:// - Strings// - Vecs// - Move semantics// - Modules// - Enums//// Let's build a little machine in the form of a function. As input, we're going// to give a list of string ...
JavaFX
JavaFXApplication 类这是主启动类,是必修实现的javafx.application.Application 抽象类。
1234567891011121314public class HelloApplication extends Application { @Override public void start(Stage stage) throws IOException { FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml")); Scene scene = new Scene(fxmlLoader.load(), 320, 240); stage.setTitle("Hello!"); stage.setScene(scene); stage.show(); } pub ...
SpringAOP
SpringAOPAOP面向切面编程,面向特定的方法编程在不变更原先代码的前提下,去实现一个新的功能或者是功能增强
实现 : 动态代理。在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程
我们通过AOP入门程序完成了业务方法执行耗时的统计,那其实AOP的功能远不止于此,常见的应用场景如下:
记录系统的操作日志
权限控制
事务管理:我们前面所讲解的Spring事务管理,底层其实也是通过AOP来实现的,只要添加@Transactional注解之后,AOP程序自动会在原始方法运行前先来开启事务,在原始方法运行完毕之后提交或回滚事务
AOP面向切面编程的一些优势:
代码无侵入:没有修改原始的业务方法,就已经对原始的业务方法进行了功能的增强或者是功能的改变
减少了重复代码
提高开发效率
维护方便
AOP核心概念1. 连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
2. 通知:Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)
在AOP面向切面编程当中,我们只需要将这部分重复的代码逻辑抽取出来单独定义。 ...