你要如何衡量你的人生

坚持,努力,让好事发生

本文主要讲述Redis数据集中过期导致CPU使用率高的相关原理。

(1) 遇到的问题

2023.08.16 00:00 忽然收到报警,Redis集群CPU使用率 > 75% ,持续报警了好几分钟。

 看监控业务流量和请求的QPS相比昨天都没变化;
 看到Redis命令分布的监控里有大量unlink命令,而且时间和CPU使用率飙升的时间吻合。

阅读全文 »

redis加载RedisBloom整体流程

  1. 确认 RedisServer 版本。
  2. 根据 RedisServer 版本选取对应版本的 RedisBloom 。
  3. 修改 redis.conf 启用 bloom filter module 。
  4. 重启 RedisServer 加载 bloom filter module 。

(1) 确认RedisServer版本

[weikeqin@localhost redis (6.0 =) ]$ ./src/redis-server -v
Redis server v=6.0.20 sha=de0d9632:0 malloc=jemalloc-5.1.0 bits=64 build=db68ee83ba489356
[weikeqin@localhost redis (6.0 =) ]$
[weikeqin@localhost redis (6.0 =) ]$ pwd
/Users/weikeqin/WorkSpaces/middleware/redis
[weikeqin@localhost redis (6.0 =) ]$

可以看到 redis-server 版本是 6.0.20


阅读全文 »

在网页爬虫、垃圾邮件检测、用户频控 等 元素是否存在于某个集合中的判断时,为了节省内存,往往会考虑使用 布隆过滤器。

我们遇到了一个类似的场景,比如 用户是否存在集合中。
最开始用户数少的时候,使用 Redis string对象,set biz:uid true 来标识用户存在集合中。
查询时根据 get biz:uid 来判断结果为空识别使用是否在集合中。

随着数据量增大到千万级,忽然有一天下午,Redis内存使用率报警,超过60%,几个小时后,Redis内存写满。出现大量报错。

后来通过计算,发现 redis string 的内存利用率太低,大概只有 5% 左右,想找一个节省内存的办法。

阅读全文 »

通过 info命令可以查看Redis Server的基本信息、CPU、内存、持久化、客户端连接信息等等;
通过 info memory 可以查看Redis Server的内存相关信息。

(1) 从 info memory 看Redis内存使用情况

Redis Server info memory

阅读全文 »

通过源代码编译来安装 Redis ,在自己的机器上搭建一套可以 Debug 的 Redis 源码环境。
推荐在 Linux 或者 MacOS 上Debug。

redis-server调试截图

阅读全文 »

我们经常会计算我们有多少钱,每个月吃饭开销多少,交通开销多少,以及其它开销多少,方便管理,避免透支。

在使用Redis时也要有同样的意识,各种数据占用多少内存,要做到心中有数,避免Redis内存不够用,造成问题。

Redis整体内存结构-主要

(1) 2012年微博是怎么用缓存支撑千亿级数据存储的

[WeiDesign]微博计数器的设计(下)

(1.1) 背景

当时(2012年)微博总数量,千亿级而且每秒都在飞速增长中。每条微博都有一个64位的唯一id。

访问量 每秒百万级 还在稳步增长中。根据微博的id来访问。

主要接口 获取评论数 + 获取转发数 。

阅读全文 »

像大家原来使用纸币,平时用的纸币只有 1元 5元 10元 20元 50元 100元,为什么没有 1.5元 3元 ?
因为有了 3元 人们使用不方便,也不方便管理。

(1) Redis内存分配器

Redis在内存使用时也是类似纸币,为了方便管理,Redis在分配内存时按照设计的大小分配。

(1.1) 为什么要设置内存分配器

举个简单的例子,你找妈妈要零花钱,你想要1.5元,但是她没有1.5元,给了个你5元。

  1. 内存分配器的目标主要有2个:
    1.1 减少内存碎片,包括内部碎片和外部碎片:
    内部碎片:分配出去的但没有使用到的内存,比如需要 32 字节,分配了 40 字节,多余的 8 字节就是内部碎片。
    外部碎片:大小不合适导致无法分配出去的内存,比如一直申请 16 字节的内存,但是内存分配器中保存着部分 8 字节的内存,一直分配不出去。
  2. 提高性能:
  3. 1 单线程性能
  4. 2 多线程性能
阅读全文 »

# Redis配置文件

# 启用AOF持久化
appendonly yes

# 当AOF文件增长 100% 时重写AOF文件
auto-aof-rewrite-percentage 100

# 当AOF文件大于 64M 时重写AOF文件
auto-aof-rewrite-min-size 64mb
阅读全文 »

(1) RESP协议是什么

Redis Serialization ProtocolRESP)是Redis客户端服务器之间使用的通信协议。
它是一种简单、高效的文本协议,易于实现和解析。

(1.1) 协议定义

以下是一个简单的RESP协议示例:

redis-client 发给 redis-server 的数据。

// querybuf =  "*6\r\n$3\r\nset\r\n$19\r\n9223372036854775806\r\n$1\r\n1\r\n$2\r\nex\r\n$5\r\n86400\r\n$2\r\nnx\r\n"
*6
$3
set
$19
9223372036854775806
$1
1
$2
ex
$5
86400
$2
nx

这个示例对应的redis命令 set 9223372036854775806 1 ex 86400 nx

阅读全文 »

有一个常见的问题,Redis是如何实现高可用的?

(1) 如何实现高可用

在分布式环境中,有可能出现某台机器挂了,为了保障高可用,首先要提高服务的分区容错性,一般都会通过冗余来实现。

图片

Redis主从是冗余的一种体现。

阅读全文 »
0%