UniqueId
unique id在微服务架构中,确保合同 ID 的唯一性可以通过以下几种方法实现:
使用分布式唯一 ID 生成器
使用分布式 ID 生成器是一种常见的方式,适合需要高效生成唯一 ID 的场景。以下是几种常见方案:
方案 1:雪花算法(Snowflake)
雪花算法生成 64 位的唯一 ID,包含时间戳、机器 ID 和序列号,适合分布式场景。 • 优点:高性能、生成的 ID 按时间递增。 • 实现: • 使用现有库(例如,Twitter 的 Snowflake)。 • 自行实现,或利用开源组件,如 Baeldung Snowflake。
示例代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960public class SnowflakeIdGenerator { private final long epoch = 1609459200000L; // 自定义开始时间 ...
designModeStudy
default
设计模式Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
Adpater:将一个类的接口转换成客户希望的另外一个接口。 由于接口不兼容而不能一起工作的那些类可以一起工作。
Bridge:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Chain of Responsibility:为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
Compsite:将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e使得客户对单个对象和复合对象的使用具有一致性。
Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,D e c o r a t o r模式比生成子类方式 ...
redis学习笔记-基础篇
redis基础redis简介redis与其他数据库进行对比人们常说关系型数据库与非关系型数据库,redis不使用表,它的数据库也不会预定义或者强制要求用户对于redis存储的不同数据进行关联。
高性能键值缓存服务器memcached也经常被拿来与redis进行比较。两者的区别如下:
redis能够自动以两种不同的方式将数据写入硬盘,并且redis除了能够存储普通的字符串键以外,还可以存储其他的四种数据结构。
这些不同之处使得redis可以解决更加广泛的问题,既可以做主数据库使用,又可以做其他存储系统的辅助数据库使用。
使用redis的理由使用redis而不是memcached来解决问题,不仅可以让代码变得更加简短,更加易懂维护,而且可以使代码运行速度更快。
redis数据结构简介
String常用的用法: set,get,del
list常用的用法:lpush,rpush,lpop,rpush,lrange, lindex
set常用的用法: sadd,sismember, smembers, srem
hash常用的用法:hset,hget,hgetall,hdel
zset ...
mysql学习笔记-补充篇
mysqlMysql log错误日志错误日志记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
可以用–log-error[=file_name]保存错误日志文件的位置。
mysql默认在参数DATADIR指定的目录写入日志文件。
二进制日志二进制日志记录了所有的DDL语句和DML语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。此日志对于灾难时的数据恢复起着极其重要的作用。
日志的位置以及格式当用–log-bin[=file_name]选项启动时,mysqld将包含所有更新数据的sql命令写入日志文件。
如果没有给出file_name将被写入datadir指定的目录。
查询日志查询日志记录了客户端的所有语句,而二进制日志不包含只查询数据的语句。
慢查询日志当用–log-slow-queries[=file_name]选项启动 mysqld(MySQL 服务器)时,慢查询日志开始被记录。和前面几种日志一样,如果没有给定 file_n ...
mysql学习笔记-进阶篇
mysql优化Mysql Server查看Mysql Server参数mysql服务启动后我们可以通过show variables和show status命令查看mysql服务器静态参数值和动态运行状态信息。
其中前者是在数据库中启动后不会动态更改的值,比如缓冲区大小,字符集,数据文件名称等;
后者是数据库运行期间的动态变化的信息,比如锁等待,当前连接数等。
如果需要了解某个参数的详细定义,可以使用以下命令
1mysql --verbose --help|more
下面介绍的参数“key_buffer_size“ 和 ”table_cache“适用于myISAM存储引擎
后面介绍的适用于innoDB存储引擎
key_buffer_size索引缓存的大小
table_cache这个参数表示数据库用户打开表的缓存数量。
innodb_buffer_pool_sizemysqld中对于innodb_buffer_pool_size参数的定义如下,The size of the memory buffer InnoDB uses to cache data and indexes of it ...
mysql学习笔记-锁篇
mysql锁问题在数据库中,除了传统的计算资源(cpu,RAM,I/O)的争用意外,数据也是一种许多用户共享的资源,如何保证数据并发一致性,有效性是数据库必须解决的一个问题。
Mysql锁概述mysql的锁针对于不同的引擎的锁机制不同。
其中,MyIsam和MEMORY存储采用的是表级锁。
INNODB采用的是行级锁,也支持表级锁,但是默认的情况下采用的是行级锁。
Mysql的三种锁的的特性可以归纳如下
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
MyIsam表锁查询表级锁争用情况123456--可以通过show status like ‘table%’来查看锁争夺情况show status like ‘table’Table_locks_immediateTable_locks_waited //if this variables shows ...
mysql学习笔记-优化篇
sql优化优化sql语句的一般过程
通过show status命令了解sql的执行频率
1234567891011121314151617181920212223show [global/session]status like Com_%;/*Com_xxx 表示每个 xxx 语句执行的次数,我们通常比较关心的是以下几个统计参数。 Com_select:执行 select 操作的次数,一次查询只累加 1。 Com_insert: 执行 INSERT 操作的次数, 对于批量插入的INSERT 操作, 只累加一次。 Com_update:执行 UPDATE 操作的次数。 Com_delete:执行DELETE 操作的次数。上面这些参数对于所有存储引擎的表操作都会进行累计。下面这几个参数只是针对InnoDB 存储引擎的,累加的算法也略有不同。 Innodb_rows_read:select 查询返回的行数。 Innodb_rows_inserted:执行INSERT 操作插入的行数。 Innodb_rows_updated:执行 UPDATE 操作更新的行数。 Innodb_ ...
mysql学习笔记--基础篇
MysqlSQL baseSql分类:
DDL: Data Definition Languages,涉及create,drop,alert,主要供数据库管理人员使用
DML: Data Manipulation Language,涉及查询操作,主要供开发人员使用。
DCL: Data Control Language,数据控制语句,用于控制不同数据段直接的许可和
访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。
DML连接操作:
外连接分为左连接和右连接:
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录
DML子查询操作:
某些情况下,当我们查询的时候,需要的条件是另外一个select 语句的结果,这个时候,就
要用到子查询。用于子查询的关键字主要包括 in、not in、=、!=、exists、not exists 等。
DML记录联结操作:
我们经常会碰到这样的应用,将两个表的数据按照 ...