数据库学习
文章平均质量分 73
学习和总结。
Java-Talk
这个作者很懒,什么都没留下…
展开
-
MySQL存储时间的最佳实践
平时开发中经常需要记录时间,比如用于记录某条记录的创建时间以及修改时间。在数据库中存储时间的方式有很多种,比如 MySQL 本身就提供了日期类型,比如 DATETIME,TIMESTAMEP 等,我们也可以直接存储时间戳为 INT 类型,也有人直接将时间存储为字符串类型。那么到底哪种存储时间的方式更好呢?不要使用字符串存储时间类型这是初学者很容易犯的错误,容易直接将字段设置为 VARCHAR 类型,存储"2021-01-01 00:00:00"这样的字符串。当然这样做的优点是比较简单,上手快。转载 2022-03-13 20:56:53 · 721 阅读 · 0 评论 -
SQL 优化最佳实践
本文是通过实践总结的,SQL优化的重点和要点。还需要在实践中灵活运用。原创 2022-02-26 11:54:34 · 691 阅读 · 1 评论 -
09-Redis IO 多路复用
目录一 Redis 是单线程还是多线程?二 为什么单线程的 Redis 性能很高?三 什么是 IO 多路复用技术?一 Redis 是单线程还是多线程?这个问题可以一分为二:Redis 是单线程,是因为 Redis 使用文件事件分派器来处理事件队列,且该文件事件分派器是单线程的,所以 Redis 才叫做单线程的模型。Redis 是多线程,是因为持久化、异步删除、集群数据同步等操作都是由数据读写线程之外其他线程执行的,所以 Redis 也可以叫做多线程模型。之所以大家都说是单线程原创 2021-04-18 22:42:35 · 2086 阅读 · 0 评论 -
SpringBoot 集成 Redis 实现消息队列
list 原理说明Redis 的 list 是按照插入顺序排序的字符串链表。如图所示,可以通过 lpush和 rpop 或者 rpush 和 lpop 实现消息队列。1 lpush 和 rpop2 rpush 和 lpop消息队列实现引入 Redis 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin.原创 2021-02-06 15:54:42 · 8087 阅读 · 21 评论 -
mysql 学习笔记
mysql 学习记录,包含日志、事务、索引、锁等功能。原创 2021-01-23 15:30:09 · 3410 阅读 · 13 评论 -
Redis 的 key 和 value 应用最佳实践
目录一 key的使用二 value的使用2.1 避免出现大对象2.2 给 value 设置过期时间。2.3 value 数据冷热分离三 容量评估本文主要总结工作这些年来,一些使用 Redis 较好的实践经验,希望能给你一点点启发或者帮助。一 key的使用key 如何命名呢?从简洁性、易阅读性角度考虑,如:服务名 + 业务模块 + 业务数据key 多长合适呢?在完整描述业务的前提下,key 越短越好,为啥呢?key 长了不占内存么?内存也不是大风刮来的吧。.原创 2021-01-14 20:47:52 · 2185 阅读 · 3 评论 -
如何保证缓存与数据库的一致性?
目录先删缓存,再更新数据库解决方案延时双删先更新数据库,再删除缓存解决方案消息队列进阶版消息队列其他解决方案设置缓存过期时间为什么是删除,而不是更新缓存?总结对于缓存和数据库的操作,主要有以下两种方式。先删缓存,再更新数据库先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。解决方案 延时双删延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数转载 2020-12-26 16:54:04 · 4175 阅读 · 0 评论 -
07-Bitmap 原理和实现及其在 Redis 的应用
一 Bitmap原理 Bitmap 的基本原理就是用一个 bit 来标记某个元素对应的 Value,而 Key 即是该元素。由于采用一个bit 来存储一个数据,因此可以大大的节省空间。 比如我们需要将数据从 A 表迁移到 A1...A10 个表,我们可以使用Bitmap来表示 A 表中的数据标记数据迁移状态。现在我们将 2,7,12,15迁移到 A1...A10 表中,经过BitMaps 标记后如下图所示:二 Bitmap 代码实现public cla...原创 2020-07-04 20:16:47 · 2755 阅读 · 0 评论 -
Jedis 连接池使用和参数配置
目录一 为什么使用 Jedis 连接池二 Jedis 使用连接池 一 为什么使用 Jedis 连接池 当使用 Jedis 直连 Redis 的时候,存在每次新建、关闭连接的开销,极端情况可能出现连接泄漏的问题。而使用连接池是说在一个池子里面对连接进行管理,当请求过来之后先从连接池里面借用连接,用完之后再次归还连接。连接池的连接可以得到复用,有利...原创 2019-07-20 20:58:57 · 2384 阅读 · 0 评论 -
06-Redis 实现分布式锁和解决锁续期问题
目录一 为什么需要分布式锁二 Redis 实现分布式锁2.1 加锁操作2.2 释放锁操作三 参考文档一 为什么需要分布式锁 在一些高并发的场景中,需要对共享变量进行互斥访问。也就是说在同一时间点有且只能有一个客户端能对共享资源进行访问。如电商系统中的秒杀系统等。二 Redis 实现分布式锁 为了保证分布式锁的可用性,我们要保证分布式锁的实...原创 2019-07-17 09:06:35 · 4588 阅读 · 1 评论 -
mysql alter 最佳实践总结
目录字段索引在工作中经常会遇到给表添加字段、给字段添加索引等需求,而且经常忘记语法,以此篇文章来记录这些基本的操作。以 user 表为例,来说明添加字段、添加索引的语法和示例。CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '用户名', `create_datetime` datetime NOT NULL CO原创 2020-12-05 11:30:43 · 1391 阅读 · 1 评论 -
count(*)、count(主键id)、count(字段)、count(1)实现原理和性能比较
在工作中我们或多或少都会遇到统计数据的需求,那么问题来了,count(*)、count(主键id)、count(字段)、count(1) 这些操作,我们到底用哪个比较合适呢。count() 的语义 count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。MySQL 不同引擎,count()的实现方式MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) ...原创 2020-06-21 18:16:07 · 2632 阅读 · 1 评论 -
mysql按日、周、月分组统计数据
我们需要对每天,每周,每月活跃用户进行统计,1)按天统计:select DATE_FORMAT(create_time,'%Y-%m-%d') days, count(id) count from user group by days;2)按周统计:select DATE_FORMAT(create_time,'%Y-%u') weeks, count(id) count from user group by weeks;3)按月统计:select DATE_FORMA..原创 2020-05-28 22:57:53 · 594 阅读 · 0 评论 -
mysql 变更自增主键id起始值
account 库 user 表结构CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) NOT NULL COMMENT '用户名', `age` int(11) NOT NULL COMMENT '年龄', `create_datetime` ...原创 2020-04-03 15:12:57 · 8810 阅读 · 0 评论 -
05-Redis 的穿透、雪崩、击穿
Redis 穿透、雪崩、击穿学习和解决。原创 2020-07-08 22:59:14 · 386 阅读 · 0 评论 -
08-BloomFilter 解决 Redis 缓存穿透问题
一 什么是 BloomFilter 布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。 布隆过滤器用于检索一个元素是在集合中的状态可以得到下面两种情况:1一定不在集合中;2可能存在集合中。二BloomFilter 原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几个哈希函数。2.1 布隆过滤器添加元素 1 将要添加的元素通过 K 个散列函数进行映射,得到一个位数组中的 K 个点; ...原创 2020-07-05 13:28:35 · 1007 阅读 · 0 评论 -
04-Redis 过期策略、内存淘汰机制和 LRU 算法的实现
一 Redis 过期策略Redis 过期策略是:定期删除 + 惰性删除。定期删除 定期删除,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 Redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 Redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key,那样就是一场性能上...原创 2020-07-02 21:13:22 · 634 阅读 · 0 评论 -
跳跃表的原理和实现以及应用
目录1. 跳跃表的原理2. 跳跃表的实现步骤分析3. 代码实现1. 跳跃表的原理学过数据结构的都知道,在单链表中查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。 如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷)一共查询8次。那么用什么办法能够用更少的...转载 2020-02-16 08:45:00 · 1360 阅读 · 0 评论 -
分库分表
目录一 为什么要分库分表二 怎么分库分表三 分库分表中间件一 为什么要分库分表 随着业务的发展,数据库的数据在不断的增加,当数据量达到千万或者亿级别时,单台数据库的存储将成为系统的瓶颈,主要体现在当单台数据库的数据量太大时,索引也会变得很大,读写效率不高;由于数据量庞大,数据的备份和恢复也将需要很长时间,因此,需要将数据分布到多台数据库上。二 怎么分库分表...原创 2019-07-21 21:53:10 · 266 阅读 · 0 评论 -
mysql 自增主键为什么不是连续的?
目录一 前言二 自增值存储说明三 自增值修改机制四 自增值修改时机五 导致自增值不连续的原因5.1唯一键冲突5.2 事务回滚5.3 批量写库操作六 参考文档一 前言 提出这个问题,是因为在工作中发现 mysql 中的 user 表的 id 默认是自增的,但是数据库存储的结果却不是连续的。 user 表结构:CREAT...原创 2019-08-18 15:03:10 · 4533 阅读 · 2 评论 -
mysql 读写分离和主从同步原理
目录一 为什么需要将 mysql 进行读写分离?二 mysql 主从同步原理?三 为什么主从同步会有数据延迟问题四 主从同步延迟问题解决方案一 为什么需要将 mysql 进行读写分离? 读写分离是基于数据库集群的主从同步来做的,所谓的读写分离是:写操作访问主库,读操作访问从库。现实生活中更多的应用场景是读多写少,读写分离可以将写的压力集中放在集群的主库,读的压力...原创 2019-07-30 23:14:19 · 461 阅读 · 0 评论 -
SpringBoot 整合单机 Redis 和 Redis 集群
目录一pom 依赖二 整合单机 Redis2.1使用 jedis 连接池2.2使用lettuce 连接池二 整合 Redis 集群2.1使用 jedis 连接池3.2 使用lettuce 连接池一pom 依赖<dependency> <groupId>org.springframework.boot</gr...原创 2019-10-24 22:29:07 · 1649 阅读 · 0 评论 -
Redis 基于 Hessian 序列化和反序列化出现的问题
目录一 问题描述1.1 前提1.2 现象二 问题分析2.1 序列化和反序列化2.2现象分析2.3 问题根源三 问题解决一 问题描述1.1 前提 A、B 两个服务共享一套 Redis 集群,使用 Hessian 对数据进行序列化和反序列化操作。A、B 服务存在同一个 key,value 都是 User 对象。1.2 现象 ...原创 2019-09-01 11:23:35 · 1536 阅读 · 0 评论 -
03-Redis 数据分布
目录一 数据分布理论1.1 节点取余分区1.2 一致性Hash分区1.3 虚拟槽分区二 Redis数据分区一 数据分布理论 分布式数据库首先要解决整个数据集按照分区规则映射到多个节点的问题,也就是需要把数据集划分到多个节点上,每个节点负责整个数据的一个子集。如图所示: 常见的分区规则有哈希分区和顺...原创 2019-07-14 11:08:13 · 885 阅读 · 0 评论 -
02-Redis 缓存设计
目录一 缓存的收益和成本二 缓存更新策略三 缓存粒度控制四 穿透优化五 雪崩优化六 击穿优化一 缓存的收益和成本1.1 收益加速读写:缓存都是全内存(Redis、Memcache),而存储层通常读写性能不够强悍(Mysql),通过缓存的使用可以有效地加速读写,优化用户体验。 降低后端负载:帮助后端减少访问量和复杂计算(很复杂的 SQL 语句),在很大程度降低了...原创 2019-07-11 08:44:10 · 485 阅读 · 0 评论 -
01-Redis 数据结构和特性
目录1.1 Redis 是什么?1.2 Redis 有哪些特性1.3 Redis 的使用场景1.1 Redis 是什么?Redis 是一种基于键值对(key-value)的NoSQL数据库,相比其他键值对数据库的优势是,Redis 的 value 值类型更加的丰富可以由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitma...原创 2019-07-10 08:46:47 · 596 阅读 · 0 评论