随笔分类 -  数据库

摘要:单体应用可以使用 synchronized 或 Lock 来加锁,synchronized 推荐使用类锁,也就是字节码锁,这样保证是全局唯一的,如果使用对象锁,要根据业务确定这个对象锁在这个业务中是唯一的。 对于微服务架构下,单体应用锁就不合适了,每个服务多个节点部署,虚拟机都不是用一个,肯定保证不 阅读全文
posted @ 2024-10-08 14:15 CyrusHuang 阅读(46) 评论(0) 推荐(0)
摘要:缓存预热 redis 启动时可以把一些数据放入 redis 中,结合 spring bean 的初始化回调方案是可行的实现方式 实现的 InitializingBean 接口的 afterPropertiesSet()方法 使用 @PostConstruct 注解标注方法 内存回收 随着时间推移,r 阅读全文
posted @ 2023-07-10 15:53 CyrusHuang 阅读(138) 评论(0) 推荐(0)
摘要:为什么需要持久化,持久化是什么 redis 是基于内存的所以速度快,没有与磁盘交互。但是缺点就是断电或宕机数据就没了,这是不可接受的 持久化就是把内存的数据也存在磁盘上,用于 redis 重启后时恢复数据 Redis 支持两种方式实现数据持久化: RDB 和 AOF RDB(Redis DataBa 阅读全文
posted @ 2023-07-10 15:52 CyrusHuang 阅读(49) 评论(0) 推荐(0)
摘要:占坑 阅读全文
posted @ 2023-07-10 15:51 CyrusHuang 阅读(59) 评论(0) 推荐(0)
摘要:主从环境搭建 主节点可以读写,从节点只能读,如果在从节点执行写命令会报错 每个服务器上准备 download redis 修改持久化方式为 RDB,关闭 AOF、关闭混合模式(主从节点都需要改) 启动每个 redis 服务 配置主从关系 如果在服务器启动后执行命令完成的配置只是临时的,重启后主从关系 阅读全文
posted @ 2023-06-28 17:55 CyrusHuang 阅读(52) 评论(0) 推荐(0)
摘要:Redis 数据结构 SDS 动态字符串,Redis 是 C 语言编写的,C 语言有字符串类型,Redis 没有直接使用 C 的字符串,因为 Redis 觉得 C 中的字符串存在一些问题: 获取字符串长度需要运算 非二进制安全 不可修改 所以 Redis 自己构建了一种新的字符串数据结构,简单动态字 阅读全文
posted @ 2023-06-28 17:54 CyrusHuang 阅读(34) 评论(0) 推荐(0)
摘要:基于 List 实现 生产者调用 LPUSH 往 list 存放消息,左插入,每次的消息都放在队列头 消费者调用 BRPOP 到 list 取消息,右弹出,弹出并返回队列末尾的一条消息 每次取的消息都是队列末尾的一条,如果队列有多条消息,要 BRPOP 多次 BPROP 会阻塞获取消息,如果队列没有 阅读全文
posted @ 2023-06-28 17:54 CyrusHuang 阅读(66) 评论(0) 推荐(0)
摘要:Bitmap 以二进制的数组存储(所有的数据都表示为 0 或 1,默认是0) 按bi位(bit)为单位参数,计算机是以字节(Byte)来计算容量的,一个字节等于8个位(1Byte=8bit) String 实现,所以最大支持 512M,二进制的数组容量上限是 512 * 1024 * 1024 * 阅读全文
posted @ 2023-06-28 17:53 CyrusHuang 阅读(57) 评论(0) 推荐(0)
摘要:GEO Geolocation 简写形式,表示一个地址位置,存储地理位置的数据类型,在 3.2 版本增加这种数据类型 底层是 zset 实现,所以删除成员要用 zrem 命令 GEOADD:GEOADD key longitude latitude member [longitude latitud 阅读全文
posted @ 2023-05-26 10:20 CyrusHuang 阅读(146) 评论(0) 推荐(0)
摘要:General 命令 作用 使用 描述 keys * 模糊搜索 keys qwe* 搜索 qwe 打头的 exists key 判断 keys 是否存在 exists mykey mykey 是否存在 type key 查看 key 的类型 type mykey del key 删除 key del 阅读全文
posted @ 2023-05-24 17:30 CyrusHuang 阅读(59) 评论(0) 推荐(0)
摘要:123 阅读全文
posted @ 2023-05-24 17:27 CyrusHuang 阅读(28) 评论(0) 推荐(0)
摘要:123 阅读全文
posted @ 2023-05-24 17:26 CyrusHuang 阅读(30) 评论(0) 推荐(0)
摘要:123 阅读全文
posted @ 2023-05-24 17:26 CyrusHuang 阅读(19) 评论(0) 推荐(0)
摘要:配置参数 long_query_time 的值(默认是10秒),超过这个值的就会被是为慢查询,后面可以根据 EXPLAIN 来跟踪 默认是关闭的。如果打开超过阈值的会被记录,所以建议在调优的时候才打开这个参数 -- 查看慢查询是否开启 show variables like 'slow_query_ 阅读全文
posted @ 2023-05-17 16:41 CyrusHuang 阅读(103) 评论(0) 推荐(0)
摘要:索引情况 -- 查询冗余索引(比如对于 name 字段创建了一个单列索引,有创建了一个 name 和 code 的联合索引) select * from sys.schema_redundant_indexes; -- 查询未使用过的索引 select * from sys.schema_unuse 阅读全文
posted @ 2023-05-17 16:24 CyrusHuang 阅读(83) 评论(0) 推荐(0)
摘要:连接查询 原理涉及到 index nested-loop join , block nested-loop join ,join buffer size ,hash join(mysql8)等,感觉没必要记那么多 需要知道会一次性把驱动表的数据加载到内存中(如果 join buffer size 放 阅读全文
posted @ 2023-05-17 16:19 CyrusHuang 阅读(69) 评论(0) 推荐(0)
摘要:一条 sql 的执行,会生成一个执行计划,这个执行计划是 优化器 认为最优的,然后执行器再执行这个执行计划 执行计划只是优化器自认为最优,不见得就是最优的 执行计划里面包括:可用的索引,真正用到的索引,表的读取顺序,每张表有多少行被优化等等 EXPLAIN 和 DESCRIBE 效果一样 EXPLA 阅读全文
posted @ 2023-05-17 16:14 CyrusHuang 阅读(87) 评论(0) 推荐(0)
摘要:范围条件放最后面,不管单列还是多列索引,把能过滤最多的索引放前面 用不用索引最终都是优化器决定的,EXPLAIN json 格式里的执行成本决定 最左匹配,如果是联合索引,查找索引树的时候,只能根据第一个索引才能找到第二个第三个,如果顺序没对就不会走索引 -- 联合索引(name, code, ad 阅读全文
posted @ 2023-05-17 16:05 CyrusHuang 阅读(55) 评论(0) 推荐(0)
摘要:回表 只查询一次索引得不到想要的数据,典型的场景就是非聚簇索引查询:先拿到主键ID,再根据id查询一次得到数据(再次查询这就是回表) 索引覆盖:根据普通索引查询不回表就能得到数据 -- 联合索引(age, addr) select age, addr from t_user where age > 阅读全文
posted @ 2023-05-17 15:47 CyrusHuang 阅读(116) 评论(0) 推荐(0)
摘要:列是唯一的,或有唯一约束(alibaba 规范指出只要是唯一的必须加索引,哪怕是多列组合是唯一的也要添加一个多列索引) 频繁作为 where 条件的字段 经常 group by 或 order by 的字段(对 select 结果集再次索引才能再次得到一个最终结果集) distinct 字段 upd 阅读全文
posted @ 2023-05-17 15:41 CyrusHuang 阅读(39) 评论(0) 推荐(0)