分类:攻城湿

38 篇文章

搞懂分布式锁

1. 为什么需要分布式锁? 首先我们需要明白为什么需要加锁,再并发环境下为保证数据一致性,则需要加锁;比如库存管理,当多个线程操作同一条库存记录的时候,需要加锁来保证互斥;我们可以通过ReentrantLock、synchronized来是实现; 加分布式锁是因为再分布式集群部署的情况下,并发指的不...

腾讯音乐:说说Redis脑裂问题?

Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会在从节点中选举出一个新的主节点,此时 Redis 的集群中就出现了两个主节点的问题,就是 Redis...

Asp.Net Core 混合全球化与本地化支持

前言 Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符串的国际化服务组件。可以在入门教程中找到相关内容。 但是内置实现方式有一个明显缺陷,resx 资源是要静态编译到程序集中的,无法在网站运行中临时编辑,灵活性较差。幸好我找到了一个基于数据...

基于EF Core存储的国际化服务

前言 .NET 官方有一个用来管理国际化资源的扩展包Microsoft.Extensions.Localization,ASP.NET Core也用这个来实现国际化功能。但是这个包的翻译数据是使用resx资源文件来管理的,这就意味着无法动态管理。虽然官方有在文档中提供了一些第三方管理方案,但是都不太...

C#中使用 record 的好处

一晃距C# 9发布已经4年了,对于record关键字想必大家都不陌生了,不过呢发现还是有很多同学不屑于使用这个语法糖,确实,本质上 record 就是 class 的封装,能用 record 书写的类,那100%都是可以自己手撸出来的,但是呢有没有考虑 别人可能一分钟写好的代码你可能会需要数分钟才能...

DDD领域驱动设计理论

一、前言 领域驱动设计简称“DDD”,一套“知易行难”的方法论。同时我所工作的这些年,尤其在某大厂做初创项目的那段时间,经常会产生各式各样的“思想碰撞”,特别在设计中台基建类领域时,为了保证充足的扩展性和稳定性,都要好好的“碰撞”一下。虽然在设计过程中,每个人的想法不尽相同,但是最终达成一致的那一刻...

.Net Core gRPC双向通信

.NET 客户端调用 gRPC 服务的四种通信方式 一元调用 客户端流模式 双向流模式 服务端流模式 一元调用 一元调用从客户端发送请求消息开始。 服务完成后,将返回响应消息。 客户端流模式 客户端流式处理调用在客户端发送消息的情况下启动。 客户端可以选择发送发送消息RequestStream.Wr...

C# 中的 volatile 关键字

volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。 volatile 修饰符通常用于由多个线程访问而不使用 lock 语句(C# 参考) 语句对访问进行序列化的字段。...

HTTP状态码(HTTP Status Code)

一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码。 代码 说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 10...

成熟的 Git 分支模型

今天介绍一下工作中会用到的 Git 分支模型。 先贴上图以表敬意 闲言 在学校不管是自己写课程设计还是给老师做项目,有 2 到 3 个人一起协作开发时就会使用 Git ,但是只是简单用了它所提供的代码协作功能,在学校的项目,比如课程设计,开发完老师检查完就没有维护了,给老师做项目也是,基于项目的特征...