西北玄天一片云

Ctl+C, Ctl+V


  • 首页

  • 标签

  • 归档

  • 分类

  • 关于

数据库与缓存一致性分析

发表于 2020-02-10 | 分类于 系统设计

缓存是目前解决高并发场景下的主流解决方案必不可少的工具之一。
在高并发或者多线程的情况下,如何保证缓存和持久化存储的数据一致是业界面临的一个普遍问题。
本文针对几种常见的数据库、缓存更新方式,分析一下并发场景下存在的问题。

缓存数据库更新的几种常见方式

  1. 先更新缓存,后更新数据库
  2. 先更新数据库,后更新缓存
  3. 先删除缓存,后更新数据库
  4. 先更新数据库,后删除缓存

我们考虑一下这种场景。假设有并发请求A和B,按一下情况顺序执行。然后我们依次说明。

第一种情况

先更新缓存,后更新数据库

考虑A/B执行顺序如下:

  • A更新缓存
  • B更新缓存
  • B更新数据库
  • A更新数据库

最终导致的结果就是:缓存里是B的结果,但数据库里是A的结果,二者不一致。

第二种情况

先更新数据库,后更新缓存

考虑A/B执行顺序如下:

  • A更新数据库
  • B更新数据库
  • B更新缓存
  • A更新缓存

最终导致的结果就是:缓存里是A的结果,但数据库是B的结果,二者不一致。

阅读全文 »

深入理解Copy-On-Write机制

发表于 2019-06-19 | 分类于 Linux

本文主要介绍Copy-On-Write的基本思想已经应用场景。

名词解释

COW是Copy On Write的缩写,意为写时复制

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//Step 1
echo memory_get_usage();
echo "\n";
//输出:352072
//Step 2
$a = 'fasdfadfadasdfasdfadadafqoweuhfoquhfasjdajdfoquwehfhoqjdfajdnoqwuehfoqwudfadjfnlasjdfqowuefoquwefadbflasjdfoqjfoquwfqofqiuwfqowufdfqijfqjewpqifpqwfqdfn23u9qwey82934r7803yr10423701710374047hfjnvmxcbvbxcvmnxcnvlcnvlamnv.anvlaksdvnaldjavnv.cvnbvbvcnzbv,cnvz.cvncvz.cvn,cv.zv';
echo memory_get_usage();
echo "\n";
//输出:352104
//Step 3
$b = $a;
echo memory_get_usage();
echo "\n";
//输出:352104
//Step 4
$a = substr($a, 0, strlen($a)-2);
echo memory_get_usage();
echo "\n";
//输出:352424

情景分析

1、$b = $a变量赋值的时候内存占用并没有翻倍

2、修改变量$a的值的时候,内存占用升高

原理解析

1、创建变量$a,为$a申请内存

2、创建变量$b,并将$a的值复制给$b,这时候其实并没有为$b申请新的内存空间

3、修改变量$a的值后,这时候会为$a重新申请内存

阅读全文 »

Mac下搭建hexo-next博客教程

发表于 2019-06-17 | 分类于 工具

本文主要介绍在Mac环境下搭建hexo-theme-next的过程,以及其中遇到的问题的解决方法

安装环境

  1. 机器:MacBook Air
  2. OS: macOS HighSierra 10.13.2

安装步骤

安装git

brew install git

安装node

brew install node

安装hexo

sudo npm install -g hexo
安装报错,换个命令
sudo npm install --unsafe-perm --verbose -g hexo
验证是否安装成功
hexo -v

安装Next主题

  1. cd your-hexo-dir
  2. git clone https://github.com/iissnan/hexo-theme-next themes/next
  3. 修改站点_config.yml, theme: next
阅读全文 »
123
John Doe

John Doe

23 日志
22 分类
57 标签

Tag Cloud

  • 4991
  • 5021
  • 5041
  • B+树1
  • Binlog1
  • Binlog与Redolog一致性1
  • COW1
  • Cache1
  • HTTP1
  • Hexo1
  • InnoDB1
  • MySQL3
  • MySQL查询1
  • Mysql1
  • Next1
  • Redis数据结构1
  • Redo log1
  • SOA架构1
  • TCP1
  • UDP1
  • WAL1
  • copy on write1
  • fork1
  • http1.11
  • http1.21
  • http协议1
  • keepalive1
  • php1
  • php源码1
  • redis1
  • 一致性1
  • 七层协议栈1
  • 二分查找1
  • 分布式锁1
  • 分库1
  • 分表1
  • 分表扩容1
  • 博客搭建1
  • 双指针1
  • 回溯算法1
  • 容量预估1
  • 弱类型1
  • 微服务架构1
  • 持久化1
  • 数组源码1
  • 架构1
  • 查询过程1
  • 短连接1
  • 系统设计1
  • 红黑树1
  • 网络协议1
  • 负载均衡1
  • 长连接1
  • 面试算法2
  • 高可用1
© 2020 John Doe
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4
本站访问数 本站总访问量