
数据库
文章平均质量分 86
GoodLinGL
这个作者很懒,什么都没留下…
展开
-
分布式锁
随着业务发展、微服务化,一个应用需要部署到多台服务器上然后做负载均衡,由于分布式系统多线程、多进程并且分布在不同的机器上,这将原来的单机部署情况下的并发控制锁策略失效。分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。分布式锁应该具备哪些条件互斥性:任意时刻,只有一个客户端能持有锁;高可用、高性能的获取锁与释放锁:加锁和解锁需要开销尽可能低,同时要保证高可用,避免分布式锁失效。转载 2021-05-12 15:31:52 · 249 阅读 · 0 评论 -
MySQL select for...update
场景一:出售某个商品,库存为100,每出售一件库存减1,当库存减为0后就无法购买该商品。类似这种对数据表某一字段进行加减并且判断的功能,我们都会对这条记录进行加锁,避免出现高并发时字段数值出现超出临界值的情况。为了不影响并发响应的效率,行级锁是最佳选择。select … for update 是我们常用的对行加锁的一种方式,在使用select … for update对某条记录查询后,这条记录就被当前连接锁住,其他连接只能读取这条记录的内容,无法对这条记录进行修改和删除。那是不是只要使用了sel原创 2021-03-25 00:24:00 · 1039 阅读 · 0 评论 -
RedLock
Redlock定义锁可以看成是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁机制可以起到对共享资源进行同步的作用。如果分布式环境下多个不同线程需要对共享资源进行同步,那么用Java的锁机制就无法实现了,这个时候就必须借助分布式锁来解决分布式环境下共享资源的同步问题。Redlock一种权威的基于 Redis 实现分布式锁的方式,此种方式比原先的单节点的方法更安全。它可以保证以下特性:安全特性:互斥访问,即永远只有一转载 2021-03-22 09:41:07 · 139 阅读 · 0 评论 -
Redis 持久化机制
很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了防止系统故障而将数据备份到一个远程位置。Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持两种不同的持久化操作。Redis 的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file, AOF)。Redis之所以速度这么快,是因为Redis是基于内存的数据库,进行读写操原创 2021-03-21 15:58:04 · 152 阅读 · 0 评论 -
Redis 的单线程和多线程
Reactor模式在处理web请求时,通常有两种体系结构,分别为:thread-based architecture(基于线程)、event-driven architecture(事件驱动)thread-based architecture基于线程的体系结构通常会使用多线程来处理客户端的请求,每当接收到一个请求,便开启一个独立的线程来处理。这种方式虽然是直观的,但是仅适用于并发访问量不大的场景,因为线程需要占用一定的内存资源,且操作系统在线程之间的切换也需要一定的开销,当线程数过多时显然会降低web原创 2021-03-21 12:15:08 · 467 阅读 · 0 评论 -
Redis 常见数据结构以及使用场景分析
string介绍 :string 数据结构是简单的 key-value 类型。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(simple dynamic string,SDS)。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1)(C 字符串为 O(N)),除此之外,Redis 的 SDS API 是安全的,不会造成缓冲区溢出。常用命令: set,get原创 2021-03-21 11:21:25 · 539 阅读 · 0 评论 -
MySQL
MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息。存储引擎MyISAM和InnoDB区别:是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。InnoDB 提供事务支持,外部键等高级数据库功能,具有事务(c转载 2021-03-20 18:16:51 · 469 阅读 · 2 评论 -
MySQL索引
什么是索引索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树, B+树和 Hash。索引的作用就相当于目录的作用。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。为什么要用索引(索引的优缺点)默认执行SQL语句是进行全表扫描,遇到匹配条件的就加入搜索结果合集。如果有索引,就会先去索引表中一次定位到特定值的行数,减少遍历匹配的行数。索引把无序的数据变成了相原创 2021-03-20 00:32:17 · 485 阅读 · 1 评论 -
mysql集群
mysql集群MySQL集群的优缺点1 主从复制集群2 主主复制集群3 pxc集群混合式MySQL集群解决方案MySQL集群的优缺点优点:某一从节点失效后可快速自动切换。是一种分布式体系结构,没有单点故障。吞吐量高、延迟短。可扩展性强,支持在线扩容。缺点:不支持外键。占用磁盘空间大、内存占用率高。部署配置很复杂。1 主从复制集群主从复制是选取一个mysql数据库作为主库(只负责写数据),然后一个或者多个mysql数据库作为从库(只负责读数据)。将主库的数据单向异步的复制到从库中,使得原创 2021-03-19 21:57:34 · 275 阅读 · 1 评论 -
MySQL中的锁机制
当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性。锁就是其中的一种机制。锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。锁的分类(oracle):按操作划分,可分为DML锁、DDL锁按锁的粒度划分,可分为表级锁、行级锁、页级锁(mysql)按锁级别划分,可分为共享锁、排他锁按加锁方式划分,可分为自动锁、显示锁按使用方式划分,可分为乐观锁、悲观锁DML锁(data locks,数据锁)转载 2021-03-19 17:40:32 · 220 阅读 · 0 评论 -
Redis 集群以及应用
Redis 集群以及应用Redis 集群主从复制复制模式问题点哨兵机制节点下线主观下线客观下线Sentinel集群选举LeaderSentinel Leader决定新主节点故障转移为什么Sentinel集群至少3节点读写分离分布式集群(Cluster)特性使用场景热点数据会话维持 Session分布式锁 SETNX表缓存Redis 集群主从复制通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数原创 2021-03-19 17:07:05 · 237 阅读 · 0 评论 -
关系型数据库和非关系数据库的优缺点
关系数据库优点:二维表格,容易理解操作方便易于维护支持SQL缺点:数据读写性能较差固定的表结构,不够灵活对于高并发瓶颈,磁盘I/O存在瓶颈海量数据的读写性能差非关系数据库优点:不需要SQL解析,读写性能高可以使用硬盘或内存作为载体,速度快基于键值对,数据没有耦合性,方便拓展部署简单缺点:不支持SQL,增加学习成本没有事务...原创 2021-03-18 22:41:45 · 598 阅读 · 0 评论 -
Redis 保证缓存和数据库数据的一致性
缓存更新机制先更新数据库,再删缓存先删除缓存,再更新数据库先更新数据库,再删除缓存从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。先更新数据库,再删缓存被大家普遍反对,原因如下:原因一(线程安全角度)同时有请转载 2021-03-18 21:31:00 · 218 阅读 · 0 评论