- 博客(298)
- 资源 (23)
- 问答 (1)
- 收藏
- 关注
转载 从ReadView深入理解MySql MVCC原理
MySql MVCC 机制在说MVCC机制前我们先了解ReadView。ReadView是什么呢?在我们平时执行一个事务的时候,就会生成一个ReadView,ReadView的组成结构大致如下参数说明:creator_trx_id:当前事务idm_ids:所有事务的事务idmin_trx_id:m_ids里最小的事务id值max_trx_id:最大事务id我们来具体分析一下ReadView的作用,以及是如何解决脏读幻读,不可重复读的问题的现在数据有一条数据,如下原始值,上一个已
2021-08-10 20:17:56 173
原创 MVCC实现原理
1、什么是MVCCmvcc多版本并发控制。mvcc在mysql innodb中主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加索,非阻塞并发读。。2、实现原理:mvcc的实现是通过保存数据在某个时间点的快照来实现的。也就是说不管需要执行多长时间,每个事物看到的数据都是一致的。3、mvcc解决那些问题?事务并发可能会产生以下问题:脏读:读取其它事务未提交的数据。 不可重复读:一个事务在读取一条数据时,由于另一个事务修改了这条数据并且提交
2021-08-10 20:10:04 7585
原创 CAS讲解
CAS,Compare and Swap即比较并交换,设计并发算法时常用到的一种技术,java.util.concurrent包全完建立在CAS之上,没有CAS也就没有此包,可见CAS的重要性。当前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。CAS也是通过Unsafe实现的,看下Unsafe下的三个方法:public fin
2021-08-09 20:19:15 122
原创 数据库基础知识点
目录1、mysql两种存储引擎的区别与场景?2、mysql b+索引和hash索引的区别?2.1、为啥b+树适合作为索引的结构3、索引的分类4、事务四大特性(ACID)5、数据库隔离级别?每个级别会引发什么问题?6、mysql的锁算法7、MVCC机制1、mysql两种存储引擎的区别与场景?MyISAM不支持事务;支持表锁,每次操作都是对整表加锁;myisam 数据文件和索引文件分开保存;采用非聚集索引,索引文件数据域存储的是数据文件的指针地址;适用于OLAP;.
2021-08-09 01:12:51 81
原创 Spring事务传播行为详解
前言:Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍。基础概念:1. 什么是事务传播行为?事务传播行为用来描述由某一个事务
2021-08-02 00:42:16 109
原创 spring 事务管理之只读事务@Transactional(readOnly = true)
我们可以使用 @Transactional(readOnly = true) 来设置只读事务在将事务设置成只读后,当前只读事务就不能进行写的操作,否则报错。如下Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed;需不需要在只有查询的方法上加上@Transactional注解?需要分为两种情况来看 若一个事务里只发出一条s
2021-08-01 17:12:24 17299 5
原创 spring事务管理中,用try-catch处理了异常,事务也会回滚?
在平时的开发中,如果在事物方法中用 try-catch处理了异常,那么spring aop不能捕获到异常信息,从而会导致spring不能对事务方法正确的进行管理,不能及时回滚错误信息。下面用代码演示一下:@Override @Transactional(rollbackFor = Exception.class) public int doSaveUser() throws Exception { int result = 0; UserEntity...
2021-08-01 16:06:52 6760 3
原创 MySQL安全设置命令mysql_secure_installation
安装MySQL通过Homebrew安装,执行brew install mysql即可。安装完成后会显示Caveats警告,如下所示: We've installed your MySQL database without a root password. To secure it run: mysql_secure_installationMySQL is configured to only allow connections from localhost by defa.
2021-07-31 17:53:02 17279
原创 mac m1安装mysql
搜索mysqlbrew search mysql安装mysqlbrew install mysql安装指定版本brew install mysql@5.7卸载mysqlbrew uninstall mysql查看mysql的基本信息,比如说怎么启动服务之类的brew info mysql查看mysql的安装路径brew list mysql基础命令// 启动// 后台brew services start mysql// 前台mysql.server star
2021-07-31 17:28:59 240
原创 何为VIP技术?
目录什么是VIP?VIP的实现原理采用Keepalived实现VIP采用pacemaker实现VIP什么是VIP?VIP即Virtual IP Address,是实现HA(高可用)系统的一种方案,高可用的目的是通过技术手段避免因为系统出现故障而导致停止对外服务,一般实现方式是部署备用服务器,在主服务器出现故障时接管业务。 VIP用于向客户端提供一个固定的“虚拟”访问地址,以避免后端服务器发生切换时对客户端的影响。例如在下图的系统中,采用了三个服务器的集群来实现服务的高可用,后端服
2021-07-25 23:10:41 2514
原创 Redis进阶-高可用:集群
前言前面几篇文章中,已经介绍了Redis的几种高可用技术:持久化、主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡。Redis集群解决了上述问题,实现了较为完善的高可用方案。本文将详细介绍集群,主要内容包括:集群的作用;集群的搭建方法及设计方案;集群的基本原理;客户端访问集群的方法;以及其他实践中需要的集群知识(集群扩容、故障转移、参数优化等)。一、集群的作用集群,即Redis Cluster,是Redis 3.0开始引入的分布式存.
2021-07-11 12:07:12 244 1
原创 Redis进阶高可用之哨兵
目录一、作用与架构1. 作用2. 架构二、部署1. 部署主从节点2. 部署哨兵节点3. 总结三、客户端访问哨兵系统1. 代码示例2. 客户端原理3. 总结四、基本原理1. 哨兵节点支持的命令2. 基本原理五、配置与实践建议1. 配置2. 实践建议六、总结一、作用与架构1. 作用在介绍哨兵之前,首先从宏观角度回顾一下Redis实现高可用相关的技术。它们包括:持久化、复制、哨兵和集群,其主要作用和解...
2021-07-10 23:12:39 228
原创 Redis进阶高可用之主从复制
主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。主从复制的作用主要包括:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时..
2021-07-09 23:39:24 157
原创 Redis的三种集群原理
redis有三种集群方式:主从复制、哨兵模式和Cluster集群1、主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求,并
2021-07-09 17:23:10 384
原创 Redis持久化详解
目录Redis持久化简介为什么需要持久化Redis持久化有哪些方式?为什么重点学习RDB和AOF?快照原理触发方式:手动触发:自动触发:bgsave运作流程RDB深入理解RDB的优缺点AOF日志原理为什么采用写后日志?如何实现AOF深入理解AOF重写总结操作Redis4.0 混合持久化性能与实践Redis持久化简介为什么需要持久化Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数
2021-07-09 12:24:30 193 3
原创 Java中Random详解
目录伪随机什么是伪随机数?Java随机数产生原理:Java中常见生成随机数的几种方式Math.random()RandomRandom的两种构造方法:种子的作用数什么?小结ThreadLocalRandomSecureRandom总结参考资料伪随机什么是伪随机数?1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。(随机这个属
2021-07-08 18:22:00 6121
原创 redis详解- 过期删除策略和内存淘汰策略
设置redis键过期时间Redis提供了四个命令来设置过期时间(生存时间)。 ①、EXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 秒。 ②、PEXPIRE <key> <ttl> :表示将键 key 的生存时间设置为 ttl 毫秒。 ③、EXPIREAT <key> <timestamp> :表示将键 key 的生存时间设置为 timestamp 所指定的秒数时间戳。 ..
2021-07-05 17:41:46 142
原创 Redis进阶-缓存问题
Redis 最常用的一个场景就是作为缓存,本文主要探讨Redis作为缓存,在实践中可能会有哪些问题?比如一致性、击穿、穿透、雪崩、污染等。目录为什么要理解Redis缓存问题缓存穿透缓存击穿缓存雪崩缓存污染(或满了)缓存淘汰策略数据库和缓存一致性Cache Aside Pattern方案:队列 + 重试机制方案:异步更新缓存(基于订阅binlog的同步机制)参考文章为什么要理解Redis缓存问题在高并发业务场景下,数据库大多数情况都是用户并发访问.
2021-07-02 20:13:12 141
原创 深入详解Redis布隆过滤器
前面学习HyperLogLog数据类型来进行估算,还是非常有意义的,能解决很多精度要求不高的统计问题。 但是对于某一个值是否存在于HyperLogLog结构里面,就变现的无能为力,因为它只提供了 pfadd 和 pfcount 方法,没有提供 pfcontains 方法。讲个使用场景,比如我们在使用新闻客户端浏览新闻时,会不停的给我们推荐新的内容,而且每次推荐都会是不同的,以去掉那些我们已经浏览过的新闻。想一想它们是咱们做到推送去重呢?你可能会想到,服务器已经记录了用户看过的所有历史记录,当推送..
2021-06-28 10:43:40 1177
原创 redis的HyperLogLog与布隆过滤器
HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法。HyperLogLog是在大数据量的情况下关于数据基数的空间复杂优化实现,而布隆过滤是在大数据量情况下关于检索一个元素是否存在于一个集合中的空间复杂优化后的实现。在传统的数据量较低的应用服务中,我们实现数据基数和数据是否存在分析的功能,通常是简单把数据存储下来,直接count一下就是基数了,而直接检索一个元素是否存在集合中也是非常简单。但是随着数据量的急剧增大,传统方式已经很难达到工程上的诉求了。海量数据无论是
2021-06-27 18:59:40 272
原创 Redis-Bitmap介绍及使用
目录1、Bitmap是什么2、Bitmap 基本命令3、Bitmap的优点和限制4、Bitmap使用场景4.1、引入依赖、配置4.2、活跃用户4.3、查询指定日期 活跃的用户数4.4、扩展 周活跃用户数4.5、用户/员工签到总结1、Bitmap是什么可以把BitMap想象成一个数组,树组的下标即是 偏移量,数组只能存储 0 1。bitmap = 位图,就是 byte 数组,用二进制表示,这个数组只能存储0或者1 。bitmap 就是用最小的单位bit来
2021-06-27 14:59:45 2680 2
转载 HyperLogLog 算法原理及其在 Redis 中的实现
一、问题引入大家在项目上可能会遇到过下面这些相同或者类似的需求: 统计一个APP的日活量(DAU)和月活量(MAU)。日活(月活)是指在一个统计日(统计月)之内,登录或者使用产品的不同用户数量,它是产品运营情况的重要指标之一,反映了用户的活跃度。 统计网站上各个网页的独立访客数,例如有些网页上面有阅读数。独立访客数需要对用户做去重,同一个用户多次访问只计算一次。 概括来说,这类需求就是去统计一个集合中不重复元素的个数。在数学上把一个集合不重复元素的个数称为集合的基数(cardin..
2021-06-27 13:00:28 449
原创 Redis-HyperLogLog
关于基数统计维基百科解释:cardinality of a set is a measure of the “number of elements“ of the set中文释义是:一个集合(可以包含重复元素)中不重复元素的个数。例如集合{1,2,3,1,2},有5个元素,但它的基数为3。基数统计通常是用来统计一个集合中不重复的元素个数。场景分析如果你负责开发维护一个网站,有天老板找你要网站上每个网页的UV,然后让你开发这个统计模块,你会如何实现?如果统计PV,非常简单,
2021-06-26 23:36:43 148
原创 Redis数据结构——对象多态及回收
前言本篇会是Redis基础数据结构最后一篇,整个Redis基础系列将要告一段落。后面会依据《redis设计与实现》继续分享Redis持久化、高可用、实战相关,敬请期待!!!
2021-06-12 19:24:05 122
原创 Redis数据结构-对象
Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象都用到了至少一种我们前面所介绍的数据结构。通过这五种这五种不同类型的对象,redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,我们可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。除此之外,redis的对象..
2021-06-12 18:46:19 178 2
原创 MySQL中保存emoji表情
如果想要在MySQL数据库中保存表情这种字符,若字符集编码utf8或者其他字符集,当执行插入数据库操作就会抛错Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1这是因为这些字符所占用的字节数大于3,而utf8最大支持为3个字节,所以插入过程无法有效完成,导致错误。那么如果使得这些特殊字符保存到MySQL中?...
2020-02-13 10:46:21 333
原创 Redis持久化
Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。Redis的持久化机制有两种方式,第一种是快照,第二种是AOF日志。快照是一次全量备份,AOF日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本。AOF日志在长期的...
2020-02-02 16:28:32 281
原创 Redis数据结构——整数集合-intset
整数集合整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。1、整数集合实现:整数集合是redis用于保存整数值的集合抽象数据结构,它可以可以保存类型位int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。typedef struct intset { ...
2020-01-13 22:09:01 228
原创 Redis数据结构——字典-hashtable
字典简介:字典,又称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对的抽象数据结构。字典是一种用于保存键值对的抽象数据结构。由于C没有内置这种数据结构,Redis构建自己的字典实现。Redis的数据库就是使用字典来作为底层实现的。字典还是哈希键的底层实现之一。除了用来实现数据库之外,字典还是哈希键的底层实现之...
2020-01-12 21:54:33 978
原创 Redis数据结构——跳跃表-skiplist
跳跃表简介:跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持评价O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树来得更简单,所以有不少程序都是用跳跃表来代替平衡树。Redis使用跳跃表作为有序结合键的底层实现之一,...
2020-01-12 21:38:29 211
原创 Redis数据结构——链表-linkedlist
链表简介:因为C语言没有内置链表这种数据结构,所以Redis构建了自己的链表实现。列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。1、链表实现:链表结点数据结构:typedef struct listNode { struct listNode *prev; ...
2020-01-12 17:13:01 418
原创 Redis数据结构——简单动态字符串-SDS
1、SDS简介: redis没有使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示。除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区;AOF模块中的AOF缓存区,以及客户端状态中的输入缓冲区,都是SDS实现的。2、SDS定义:struct sdshdr { ...
2020-01-12 17:09:38 259
原创 LRU算法java实现
LRU全称是Least Recently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。实现LRU:1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项...
2020-01-11 18:26:50 280
原创 Leetcode-区域和检索-数组不可变
描述:给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i, j两点。说明:可以假设数组不可变;会多次调用区间和sumRange方法示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1...
2020-01-01 18:41:29 134
原创 Leetcode-二叉搜索树最近公共祖先
描述:给定一个二叉搜索树,找到该树中两个指定节点的最近公共节点(最近公共祖先节点可以为节点本身) 说明:所有节点的值都是唯一的。两个节点为不同节点且存在于给定的二叉搜索树。首先复习一下二叉搜索树的性质:左子树上所有节点的值都小于等于根节点的值 右子树上所有节点的值都大于等于根节点的值 左子树和右子树也都是二叉搜索树方法一:递归从根节点开始遍历树 如果节...
2019-12-31 22:13:03 167
原创 LeetCode-计数质数
描述:统计所有小于非负整数n的质数的数量。示例:输入:10;输出:4;解释:小于10的质数一共有4个,它们是2,3,5,7。解题思路:1、暴力破解验证一个数是否为质数有很多方法。最容易想到的就是暴力破解,采用暴力计算一步步碾压过去的方法。虽然不是最优的,但是对于我们解题是最有效的。public boolean isPrime(int n){ for(i...
2019-12-31 08:49:06 213
原创 详解优先队列
一、队列与优先队列的区别 1、队列是一种FIFO(First-in-Firse-out)先进先出的数据结构,对应生活中排队场景,排在前面的人总是先通过,依次进行。 2、优先队列是特殊的队列,优先一词,就可以看出有插队的现象。比如生活中在乘车买票进站时,就会有些比较急的人来插队 ,他们就在前面先通过验票。优先队列至少含有两种操作的数据结构:insert(即将元素插入到优先队列中;以及d...
2019-08-02 00:15:39 5943
转载 在同一个类中调用另一个方法没有触发 Spring AOP 的问题
实例:@Target(value = {ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface MyMonitor {}@Component@Aspectpublic class MyAopAdviseDefine { private Logger log...
2019-07-21 13:43:22 789
原创 SpringBoot整合AOP + 自定义注解实现简单的权限验证
1、简介主要通过自定义注解,使用SpringAOP的环绕通知拦截请求,判断该方法是否有自定义注解,然后判断该用户是否有该权限,这里做的比较简单。2、项目搭建这里是基于SpringBoot的,对于SpringBoot项目的搭建就不说了。在项目中添加AOP的依赖:<!--AOP包--><dependency> <groupId>org....
2019-07-20 23:28:04 2829 5
原创 Nexus 安装 使用说明
1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。 我们可以使用专门的 Maven 仓库管理软件来...
2018-06-18 19:14:27 1253
算法导论第三版高清完整PDF及其习题中文答案
2018-04-28
opencsv-2.3.jar
2016-10-26
mybatis逆向代码生成
2016-07-07
activiti-2
2016-06-22
activiti笔记1
2016-06-22
正则表达式
2016-06-01
从版本库pull下包位置不对?
2016-08-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人