缓存数据一致性问题(转载)

1. 缓存数据不一致 数据库的瓶颈是大家有目共睹的,高并发的环境下,很容易 I/O 锁死。当务之急,就是把常用的数据,给捞到速度更快的存储里去。 这个更快的存储,就有可能是分布式的,比如 Redis,也有可能是单机的,比如 Caffeine。 但一旦加入缓存,就不得不面对一个蛋疼的问题:数据的一致性。 数据不一致的问题,人世间多… 阅读更多 »缓存数据一致性问题(转载)

系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)

1. 系统吞度量要素 1.1. 基本概念 一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。 单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间 QPS(TPS):每秒钟request… 阅读更多 »系统吞吐量(TPS)、用户并发量、性能测试概念和公式(转载)

LRU Cache原理与实现(转载)

1. LRU原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.1. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部; 2. 每当缓存命中(即缓存数据被访… 阅读更多 »LRU Cache原理与实现(转载)

Golang单元测试gomock

1. go mock单元测试 搞单元测试,如果碰到这些情况: 一个函数,内部包含了很多并且很深的调用,但是如果单单测这个函数,其实实现的功能很简单。 一个函数,包含了其他还未实现的调用。 函数内部对数据的要求极为苛刻。 那么这时候就可以考虑使用mock来处理。 mock,简而言之就是可以通过注入我们所期望返回的数据,或者我们所期… 阅读更多 »Golang单元测试gomock

深入理解Golang之context(转载)

context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。 1. 前言 这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用cont… 阅读更多 »深入理解Golang之context(转载)