redis
程序员历小冰
Thunder Thingking and Action to enjoy life 个人博客:http://remcarpediem.net/
展开
-
一万字详解 Redis Cluster Gossip 协议
大家好,我是历小冰,今天来讲一下 Reids Cluster 的 Gossip 协议和集群操作,文章的思维导图如下所示。集群模式和 Gossip 简介对于数据存储领域,当数据量或者请求流量大到一定程度后,就必然会引入分布式。比如 Redis,虽然其单机性能十分优秀,但是因为下列原因时,也不得不引入集群。单机无法保证高可用,需要引入多实例来提供高可用性单机能够提供高达 8W 左右的QPS,再高的QPS则需要引入多实例单机能够支持的数据量有限,处理更多的数据需要引入多实例;单机所处理的网络流量已原创 2020-12-03 21:12:23 · 11835 阅读 · 3 评论 -
带你100% 地了解 Redis 6.0 的客户端缓存
近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis Cluster Proxy 等诸多更新。我们今天就依次聊一下客户端缓存的必要性、具体使用、原理分析和实现。为什么需要客户端缓存?我们都知道,使用 Redis 进行数据的缓存的主要目的是减少对 MySQL 等数据库的访问,提供更快的访问速度,毕竟 《Redis in Action》中提到的, Redis原创 2020-05-11 21:04:36 · 2718 阅读 · 0 评论 -
Redis 命令执行过程(下)
在上一篇文章中《Redis 命令执行过程(上)》中,我们首先了解 Redis 命令执行的整体流程,然后细致分析了从 Redis 启动到建立 socket 连接,再到读取 socket 数据到输入缓冲区,解析命令,执行命令等过程的原理和实现细节。接下来,我们来具体看一下 set 和 get 命令的实现细节和如何将命令结果通过输出缓冲区和 socket 发送给 Redis 客户端。set 和 ge...原创 2019-12-14 10:35:40 · 2166 阅读 · 0 评论 -
Redis 命令执行过程(上)
今天我们来了解一下 Redis 命令执行的过程。在之前的文章中《当 Redis 发生高延迟时,到底发生了什么》我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 Redis 的了解。如下图所示,一条命令执行完成并且返回数据一共涉及三部分,第一步是建立连接阶段,响应了socket的建立,并且创建了client对象;第二步是处理阶段,从socket读取数据到输入缓冲区,然后解...原创 2019-12-11 18:42:19 · 2154 阅读 · 0 评论 -
当 Redis 发生高延迟时,到底发生了什么
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解决 Redis的延迟问题一条命令执行过程在本文场景下,延迟 (latency) 是指从客户端发送命令到客户端接收到命令返回值的时间间隔。所以我们先来看一下 Redis 一条命令执行的步骤,其中每个...原创 2019-11-12 20:48:03 · 6826 阅读 · 6 评论 -
详解 Redis 内存管理机制和实现
Redis是一个基于内存的键值数据库,其内存管理是非常重要的。本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略。最大内存限制Redis使用 maxmemory 参数限制最大可用内存,默认值为0,表示无限制。限制内存的目的主要 有:用于缓存场景,当超出内存上限 maxmemory 时使用 LRU 等删除策略释放空间。防止所用内存超过服务器物理内存。因为 Redis 默...原创 2019-10-28 22:00:24 · 3252 阅读 · 5 评论 -
Redis 事件机制详解
Redis 采用事件驱动机制来处理大量的网络IO。它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event。Redis中的事件驱动库只关注网络IO,以及定时器。该事件库处理下面两类事件:文件事件(file event):用于处理 Redis 服务器和客户端之间的网络IO。时间事件(time eveat):Redis 服...原创 2019-08-08 23:11:08 · 1795 阅读 · 0 评论 -
Redis AOF 持久化详解
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是一旦进程退出,Redis 的数据就会丢失。为了解决这个问题,Redis 提供了 RDB 和 AOF 两种持久化方案,将内存中的数据保存到磁盘中,避免数据丢失。RDB的介绍在这篇文章中《Redis RDB 持久化详解》,今天我们来看一下 AOF 相关的原理。AOF( append only...原创 2019-07-30 22:30:22 · 1270 阅读 · 0 评论 -
Redis RDB 持久化详解
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是一旦进程退出,Redis 的数据就会丢失。为了解决这个问题,Redis 提供了 RDB 和 AOF 两种持久化方案,将内存中的数据保存到磁盘中,避免数据丢失。antirez 在《Redis 持久化解密》一文中说,一般来说有三种常见的策略来进行持久化操作,防止数据损坏:方法1 是数据...原创 2019-07-04 00:23:08 · 7516 阅读 · 1 评论 -
分布式数据缓存中的一致性哈希算法
一致性哈希算法在分布式缓存领域的 MemCached,负载均衡领域的 Nginx 以及各类 RPC 框架中都有广泛的应用,它主要是为了解决传统哈希函数添加哈希表槽位数后要将关键字重新映射的问题。本文会介绍一致性哈希算法的原理及其实现,并给出其不同哈希函数实现的性能数据对比,探讨Redis 集群的数据分片实现等,文末会给出实现的具体 github 地址。Memcached 与客户端分布式缓存M...原创 2019-06-27 21:56:48 · 1607 阅读 · 1 评论 -
《Redis设计和实现》读书笔记1-简单动态字符串
临近过年,我离开了实习了4个多月的扇贝。临走前,导师赠送给我一本《Redis设计和实现》,于是心血来潮,想读一读这本书,然后仿照书中介绍的原理实现一个小型的数据库。这是redis系列的第一篇博文,希望我可以坚持下去,不要虎头蛇尾。简单动态字符串 我们都知道Redis是由纯c代码编写而成的,而c语言中的原生字符串有很多的缺陷,不利于大型工程的使用。于是Redis的作者便自己实现一套字符串数据结构,就是原创 2016-02-02 22:42:46 · 1614 阅读 · 0 评论