0%

除了RDB持久化功能之外,Redis还提供了AOF(Append Only File)持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的,如图11-1所示。

阅读全文 »

本文首先介绍Redis服务器保存和载人RDB文件的方法,重点说明 SAVE 命令和 BGSAVE 命令的实现方式。之后,本章会继续介绍Redis服务器自动保存功能的实现原理。

在介绍完关于保存和载入RDB文件方面的内容之后,我们会详细分析RDB文件中的各个组成部分,并说明这些部分的结构和含义。

阅读全文 »

1. 服务器中的数据库

Redis 服务器将所有数据库都保存在服务器状态 redis.h/redisServer 结构的 db 数组中, db 数组的每个项都是一个 redis.h/redisDb 结构, 每个 redisDb 结构代表一个数据库。在初始化服务器时, 程序会根据服务器状态的 dbnum 属性来决定应该创建多少个数据库,默认为 16。如图 9- 所示:

1
2
3
4
5
6
7
8
9
struct redisServer {
// ...
// 一个数组,保存着服务器中的所有数据库
redisDb *db;
// ...
// 服务器的数据库数量
int dbnum;
// ...
}

阅读全文 »

1. 背景

商户系统采用微信支付时,当用户支付完成之后,微信支付平台会以 xml 字符串文本回调通知商户系统此次支付是否成功。显然,商户系统首先需要解析 xml 字符串,但是需要注意的是,可能存在恶意程序伪造微信支付平台的回调通知请求,发送恶意的 xml 字符文本。当商户系统解析 xml 文本时,可能引起 xxe 注入攻击。

与 sql 注入攻击和 xss 跨站脚本攻击类似,xxe 是一种 xml 注入攻击。xml 本身采用 DTD(文档类型定义)来定义约束 xml 文档的文档结构。DTD 中的实体可引用外部声明,比如引用外部的 dtd 文件等,那么在引用外部实体可能就存在恶意的引入隐患。

阅读全文 »

项目

  • TSF 泳道
  • Cannal
  • 分布式定时任务
  • 灰度、AB Test
  • 蓝网、绿网

交易

  • 下单

支付

  • 全球购订单支付、报关
  • 第三方支付渠道支付、退款,补偿

发票

  • 蓝票开具,蓝票红冲

在 Redis 中, 用户可以通过执行 SLAVEOF 命令或者设置 slaveof 选项, 让一个服务器去复制 (replicate) 另一个服务器, 我们称呼被复制的服务器为主服务器 (master), 而对主服务器进行复制的服务器则被称为从服务器 (slave), 如图15-1所示:

本文首先介绍 Redis 在 2.8 版本以前使用的旧版复制功能的实现原理, 并说明旧版复制功能在处理断线后重新连接的从服务器时, 会遇上怎样的低效情况。

接着, 本章将介绍 Redis 从 2.8 版本开始使用的新版复制功能是如何通过部分重同步来解决旧版复制功能的低效问题的, 并说明部分重同步的实现原理。

在此之后, 本章将列举 SLAVEOF 命令的具体实现步骤, 并在本文最后, 说明主从服务器心跳检测机制的实现原理, 并对基于心跳检测实现的几个功能进行介绍。

阅读全文 »

1. 前言

Redis 数据库里面的每个键值对 (key-value pair) 都是由对象 (object) 组成的, 其中:

  • 数据库键总是一个字符串对象 (string object);
  • 而数据库键的值则可以是字符串对象、列表对象 (list object)、哈希对象 (hash object)、集合对象 (set object)、有序集合对象 (sorted set object) 这五种对象中的其中一种。

比如说, 执行以下命令将在数据库中创建一个键为字符串对象, 值也为字符串对象的键值对:

1
2
redis> SET msg "helloworld"
OK

Redis 的五种不同类型的对象底层至少采用两种以上不同的数据结构实现。本文将削析这些对象所使用的底层数据结构。

阅读全文 »

开心一刻

昨晚我和我爸聊天

我:“爸,你怎么把烟戒了,也不出去喝酒了,是因为我妈不让,还是自己醒悟,开始爱惜自己啦?”

爸:“儿子啊,你说的都不对,是彩礼又涨价了。”

我:“你不是有媳妇了吗?”

爸:“我有,可你没有啊!”

我:“爸,我长大了不娶媳妇,好好孝敬您!”

爸:“臭小子,你想的美,我一定要给你娶媳妇,让你的孩子也好好折腾你,让你也体会一下有一个不争气的儿子是什么感受!”

我:“……”

阅读全文 »