Redis集群之Codis
摘要:【Codis简介】首先理清楚几个概念,Redis的主从,从从都是一种备份机制,所有节点上的内容基本相同,从节点努力赶上主节点的数据状态;而Sentinel哨兵是一种调度机制,能够监控、并在主节点挂掉的时候择优选择从节点为新主节点。接下来要介绍的Codis是一种分治工具。在大数据高并发的场景下,单个R
阅读全文
posted @
2021-12-31 22:43
长江同学
阅读(739)
推荐(0) 编辑
Redis之Sentinel
摘要:Redis的主从同步配合哨兵模式,可以有效地提升我们Redis的高可用性。当主节点挂掉之后,哨兵集群可以择优选取从节点作为新的主节点,从而保证服务的可用性。Redis Sentinel集群类似一个zookeeper集群,是集群高可用的心脏,一般由3-5个节点组成,即使个别节点挂了,集群还是可以正常运
阅读全文
posted @
2021-12-31 19:51
长江同学
阅读(41)
推荐(0) 编辑
Redis主从同步
摘要:Redis主节点挂掉时,运维可以让从节点来接管,服务就可以继续,否则线上业务就需要很长时间才能恢复。没有Redis集群,起码要配备Redis主从,否则线上服务的风险就会比较大。 【CAP原理】CAP原理是分布式领域的理论基石。C-Consistent,A-Availability,P-Partiti
阅读全文
posted @
2021-12-28 22:10
长江同学
阅读(521)
推荐(1) 编辑
Spring事务的一些基本知识(四)--大事务的危害与优化
摘要:【汇总表】 【大事务带来的风险】 并发情况下,数据库连接池容易被撑爆(如果配置连接池大小虽然不会撑爆、但会占用大量连接池资源) 锁定太多的数据,造成大量的阻塞和锁超时 执行时间长,容易造成主从延迟,而且造成大量锁等待 回滚所需要的时间比较长 undo log日志膨胀,不仅增加了存储的空间,而且可能降
阅读全文
posted @
2021-12-27 22:10
长江同学
阅读(969)
推荐(0) 编辑
Spring事务的一些基本知识(三)--事务不生效,事务不回滚
摘要:一、事务不生效 1.访问权限问题众所周知,java 的访问权限主要有四种:private、default、protected、public,它们的权限从左到右,依次变大。但如果我们在开发过程中,把某些事务方法,定义了错误的访问权限,就会导致事务功能出问题。方法的访问权限被定义成了private,这样
阅读全文
posted @
2021-12-27 21:38
长江同学
阅读(1636)
推荐(0) 编辑
Spring事务的一些基本知识(二)--关于方法A调用方法B
摘要:总结:方法A调用方法B:1、如果只有A加@Transactional注解;则AB在同一事务中;2、如果只有B加@Transactional注解;AB方法为同一类,事务失效;AB不同类,只有B有事务; 原理:spring 在扫描bean的时候会扫描方法上是否包含@Transactional注解,如果包
阅读全文
posted @
2021-12-27 20:49
长江同学
阅读(2104)
推荐(0) 编辑
Spring事务的一些基本知识(一)
摘要:【事务的属性和行为】 事务的ACID属性:原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。持久性(Durability):已被提交的事务对数据库的修改
阅读全文
posted @
2021-12-27 20:30
长江同学
阅读(113)
推荐(0) 编辑
RabbitMQ安装记录(erlang24.1.7与rabbitmq3.9.11)
摘要:【参考】 https://blog.csdn.net/qq_45173404/article/details/116429302 说明:本篇只是用RPM安装了Erlang和RabbitMQ服务,如果想了解Docker版的安装,可以参考上面的链接。 安装Erlang环境方案1 先进行一些必要的组件安装
阅读全文
posted @
2021-12-23 20:47
长江同学
阅读(842)
推荐(0) 编辑
Redis的小对象压缩
摘要:Redis如果使用32bit进行编译,内部所有数据结构所使用的指针空间占用会少一半。 【ziplist】如果Redis内部管理的集合数据结构很小,它会使用紧凑存储形式压缩存储。Redis的ziplist是一个紧凑的字节数组结构,协议如下图所示: 这种结构下,如果是存储hash结构,那么key和val
阅读全文
posted @
2021-12-22 21:01
长江同学
阅读(154)
推荐(0) 编辑
Redis之PubSub
摘要:【发布者订阅者模式】 为了支持消息多播,Redis 不能再依赖于那5种基本数据类型了,它单独使用了一个模块来支持消息多播,这个模块的名字叫作 PubSub,也就是 PublisherSubscriber(发布者/订阅者模式)。【简单使用】 subscribe可以根据主题进行订阅,多个消费端可以同时收
阅读全文
posted @
2021-12-21 22:14
长江同学
阅读(465)
推荐(0) 编辑
Redis事务
摘要:事务的作用是为了确保多个连续的操作的原子性,Redis也支持事务,但与MySQL不同,Redis的事务模型并不严格,使用前还是需要对其特性准确把握,避免误用。【基本用法】Redis中与事务相关的指令分别是multi,exec,discard,watch,unwatch。multi表示事务开始,类似b
阅读全文
posted @
2021-12-20 21:20
长江同学
阅读(154)
推荐(0) 编辑
Redis管道
摘要:【参考】 《Redis深度历险 核心原理与应用实践》 【原理】Redis管道是从客户端打包一批待执行的指令,一起发送到服务器,执行完结果之后,又将获取到的数据打包发回客户端,节省了多个RTT的时间,从而提升了客户端的处理效率。对于服务器来说,没有什么变化,但是对于客户端来说,读和写的等待时间减少,使
阅读全文
posted @
2021-12-19 20:23
长江同学
阅读(172)
推荐(0) 编辑
Redis持久化-AOF与RDB快照
摘要:【参考】 《Redis深度历险 核心原理与应用实践》 Redis所有的数据全部在内存中,如果突然宕机,内存中的数据就都会丢失,那么Redis是怎么保障数据不因故障丢失呢?【Redis的持久化策略】第一种是快照,第二种是AOF日志。所谓快照,就是将这一瞬间所有存于内存的数据全部保留下来,也就是一次性的
阅读全文
posted @
2021-12-18 22:47
长江同学
阅读(64)
推荐(0) 编辑
Redis通信协议-RESP
摘要:【RESP-协议内容】Redis序列化协议的简写(Redis Serialization Protocol),是一种直观的文本协议,虽然浪费了一些流量,但是实现简单,解析性能极好。协议规定了5种最小单元类型的传输数据结构,单元结束时统一加上回车换行符\r\n。 单行字符串 以'+'开头 多行字符串
阅读全文
posted @
2021-12-17 23:02
长江同学
阅读(270)
推荐(0) 编辑
记录一次退款bug的排查与总结
摘要:【Bug场景】 一个收费充电的系统中,由于有一些因为设备故障而导致用户没有放点成功但不能及时主动给用户退款的情况,所以会有一个定时任务,在每天的固定时间为这些订单主动发起一次退款。在查看退款情况时发现了一个很奇怪的现象,一笔订单本来应该在11-23日就退款给用户的,但到了12-16日还是没有成功退款
阅读全文
posted @
2021-12-17 21:23
长江同学
阅读(304)
推荐(0) 编辑
Redis单线程IO模型
摘要:【Redis是单线程】除Redis之外,Node.js以及Nginx都是单线程,都是服务器高性能的典范。Redis所有的数据都在内存中,所有的运算都是内存级别的运算。对于复杂度为O(n)级别的指令,一定要谨慎使用,否则可能会因为处理这个指令而导致其它客户端使用Redis卡顿。那么Redis既然是单线
阅读全文
posted @
2021-12-16 21:21
长江同学
阅读(147)
推荐(0) 编辑
Redis之scan
摘要:【场景】生产环境没有对外放开端口,所以在本机Windows、Macos环境下下载的客户端没办法使用,只能在Linux下查看当前的redis使用情况。此时我们可以用redis提供的客户端redis-cli进行操作: 此时我们可以用dbsize查看redis中有多少个key,用info keyspace
阅读全文
posted @
2021-12-15 22:39
长江同学
阅读(2765)
推荐(0) 编辑
业务系统数据库设计经验总结(十二)-增减类业务表的解耦设计
摘要:【简化场景】现有一批充电站,被一个物业公司运营着,用户来使用充电站里的设备给自己的电瓶车充电,每次充电会扫码付费。这里已经做好了这个公司的利润汇总表,每天的订单,根据充电桩的使用情况进行进账。当然这里面还涉及到这个公司和上级代理商的一些合同,分成等,为了简化场景这里不表述,但有个限制,这里公司每天的
阅读全文
posted @
2021-12-15 20:14
长江同学
阅读(179)
推荐(0) 编辑
MySQL中查看Blob类型的字段内容
摘要:直接查blob字段是看不到具体的内容的 需要用convert函数将blob类型字段内容转换编码:select convert(column using utf8mb4) from table;
阅读全文
posted @
2021-12-15 09:47
长江同学
阅读(3704)
推荐(0) 编辑
Redis之GeoHash-根据经纬度距离排序
摘要:【位置排序相关的需求】其实这种需求是比较多的,这里举一个简单的场景。比如我们在全国各地有很多充电站,每个充电站在数据库里都有对应的省市县以及经度纬度,在对充电站维护的时候经常会依据电工的即时位置查看周边有哪些充电站,并对这些充电站的位置参照电工的即时位置计算距离,并根据距离大小进行排序。 首先,我们
阅读全文
posted @
2021-12-13 21:48
长江同学
阅读(2449)
推荐(0) 编辑
Redis限流
摘要:【参考】 《Redis深度历险 核心原理与应用实践》https://blog.csdn.net/liubao616311/article/details/89247622 【引】 1.当系统处理能力有限时,如何进行限流?2.控制用户行为,避免垃圾请求(避免短时间多次操作)。比如一段时间内用户只能操作
阅读全文
posted @
2021-12-12 13:09
长江同学
阅读(230)
推荐(0) 编辑
Redis之布隆过滤器BloomFilter
摘要:【引】基数很大的集合,需要我们比较某个元素是不是存在于这个集合。如果这个查询验证的频率还很高,那么如何设计呢?【方案】1.数据库查询可能我们要考虑的就是如何去分库了,然后再hash到对应的库中进行查找元素。这会是一个比较复杂,实施起来也麻烦的方案。2.HashSet对于查询的热点数据,我们也可以存于
阅读全文
posted @
2021-12-09 22:25
长江同学
阅读(1472)
推荐(0) 编辑
Redis中的HyperLogLog
摘要:【统计PV与UV】Redis提供了一组略有误差的统计指令,pfadd与pfcount,这两个指令配合使用,可以进行上亿数据的去重不精确统计,它的优势就是节省空间(12KB就能统计2^64个数据)。想想如果使用set进行过滤与存储会是多大的空间消耗。另外,使用pfmerge可以将多个pf数值累加在一起
阅读全文
posted @
2021-12-07 22:11
长江同学
阅读(246)
推荐(0) 编辑
Maven版本管理的小技巧-versions-maven-plugin的使用
摘要:在子模块比较多的Maven项目中,无论是项目上线前发release版本,还是稳定之后再次改SNAPSHOT版本进行集中开发,父POM与子Module的版本修改总是需要一个一个将子pom以及子module中的<parent/>内的version修改过来(maven不支持不写version,并且不支持变
阅读全文
posted @
2021-12-07 17:36
长江同学
阅读(4184)
推荐(0) 编辑
Redis中的位图结构
摘要:【参考】《Redis深度历险 核心原理与应用实践》【位图的概念】对于一些bool类型的数据,如是否签到的场景,虽然单个记录简单,但是需要长期、固定地去记录且用户量很大的时候,那么存储空间是特别惊人的。我们可以利用位图的结构来进行处理,这样可以节省大量空间。位图,即在每一位上设置1或者0来标记bool
阅读全文
posted @
2021-12-06 22:56
长江同学
阅读(209)
推荐(0) 编辑
分布式锁比较-Redis,MySQL,Zookeeper
摘要:Redis分布式锁【分布式锁】分布式场景中的数据一致性问题一直是一个比较重要的话题,其中的核心就是分布式锁。在大多数系统设计时我们一般会牺牲掉强一致性来保证数据的最终一致性,这需要我们合理地使用分布式锁和分布式事务。一个合格的分布式锁需要做到多客户端互斥、安全(谁持有该锁谁才能删除)、避免死锁(客户
阅读全文
posted @
2021-12-05 20:17
长江同学
阅读(603)
推荐(0) 编辑
Redis消息队列与主流的消息队列中间件对比
摘要:【前言】与主流的消息队列组件,如Kafka,RabbitMQ等相比,Redis可以轻松实现一个轻量级的消息队列。基本上现在的系统都会涉及到缓存,如果不是单体应用,一般主流会选择Redis作为一个跨服务的缓存组件。所以如果对于实时性没有特别苛刻的要求,Redis是可以胜任作为一个消息队列来使用的。【R
阅读全文
posted @
2021-12-04 15:40
长江同学
阅读(655)
推荐(0) 编辑
Redis的5种基本数据结构以及基本操作命令
摘要:来源于《Redis深度历险:核心原理与应用实践》的阅读笔记。Redis的常见用途: 记录帖子的点赞数,评论数和点击数(hash); 记录用户的帖子ID列表(便于快速显示用户帖子列表)(zset); 记录帖子的标题、摘要、作者和封面信息,用于列表展示(hash); 记录帖子的点赞用户ID列表,评论ID
阅读全文
posted @
2021-12-03 22:40
长江同学
阅读(228)
推荐(0) 编辑