一文搞懂redis分布式锁
我们熟悉在多线程并发编程中,需要对共享资源加锁,使得混乱的并发访问降级为合理的串行访问。同理在分布式系统中,可能存在多个进程对一个共享资源进行并发的修改,比如某个进程的数据库数据;这个时候需要对这个数据库上分布式锁,以保证该数据能被串行访问。 分布式锁的性质 工程上对分布式锁规定需要如下几项核心性质: 独占性:在某一时刻,锁只能被一个取锁方持有 健壮性:不允许产生死锁,假设持有...
我们熟悉在多线程并发编程中,需要对共享资源加锁,使得混乱的并发访问降级为合理的串行访问。同理在分布式系统中,可能存在多个进程对一个共享资源进行并发的修改,比如某个进程的数据库数据;这个时候需要对这个数据库上分布式锁,以保证该数据能被串行访问。 分布式锁的性质 工程上对分布式锁规定需要如下几项核心性质: 独占性:在某一时刻,锁只能被一个取锁方持有 健壮性:不允许产生死锁,假设持有...
设计高并发实时排行榜所需redis基础 redis四大统计 基数统计 基数 / Cardinality 是指集合中不同的元素的数量,简单来说,就是去重后的个数。 二值统计 二值统计是指将数据分为两个类别或状态,成功失败这样的,并对这些数据进行计数和分析。 排序统计 排序统计涉及将数据按照一定的顺序(升序或降序)进行排序,以便分析比较。 聚合统计 将多个数据记录组合成一个集合,并对该集合进行数...
实际开发中,我们经常会遇到这样的需求,在日常开发中,经常会遇到这样的需求:查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段。正常我们会这样处理,先查询有没有,然后在insert。针对这个需求,mysql提供了更加方便的指令 insert into ... on duplicate key update ... 在insert的时候,如果insert的数据会引起唯一索...
一个完整的go项目通常包括两个部分module 和 package。module表示第三方包;package表示项目源码,项目源码以package的形式组合,一个package包含多个代码源文件。module和package共同负责go项目的项目管理; module常用命令 module
protobuf的数据类型大致可以分为以下几种: 变长编码类型Varints 固定32bits类型 固定64bits类型 有长度标识的变量 根据这些类型,编码方式也就分成四种。下面我来一一介绍一下不同数据类型的编码方式。 Varints编码 Varints编码用于处理变长编码类型。 核心思想其实就一句话:数字小的占用空间小,数字大的占用空间大。那要如何实现这个结果呢...
高可用的基本策略就是部署redis服务集群,集群首先要解决的问题就是数据一致性问题。redis内使用主从复制来解决这个问题。 redis主从复制 redis哨兵机制 对于所有机制的学习,我们都可以遵循一下原则来学习。why-what-how原则。 why-为什么需要哨兵机制 what-什么是哨兵机制 how-如何实现哨兵机制
为了提高系统数据的高可用,通常会集群化部署MySQL,MySQL中又是使用了什么技术来实现其高可用的呢?答案是主从复制。主从复制保证集群内MySQL的数据保持一致性。主从复制的前提是binlog。 binlog 什么是binlog?binlog是Mysql Server层提供的在表结构或者表数据发生修改的时候进行保存的日志。每产生一条更新操作时,Server层就会产生一条binlog,在...
前言 久仰MIT6.5840大名,现开始做它的Lab。本篇讲下MapReduce这个Lab的基本流程。这里提供MapReduce的论文。这篇论文非常经典,值得一读,是经典的分布式任务框架。 MapReduce 要完成这个实验其实不需要把MapReduce这个框架研究多深,只需要理解Coordinator和Worker之间是如何通信协作的就可以。甚至实验代码中把Map和Reduce函数也提前...
前言 在一月份的实习面试中发现不少问题和需要进行补充的地方,在2月份的春季实习面试开始前,进行一些针对性的准备和学习,在这里发帖记录需要学习的内容。 需要准备的内容大致可以分为两个方向:cpp方向和go方向。由于cpp岗是在太少、加上就业形势不好,全部押宝cpp实在不是明智之举,因此打算在这个寒假多学一门语言 / GO。不过学习一门语言需要掌握的模块基本一致,可以快速速成。速成完语言学习后...