Redis 的读写速度很快,IO 压力小。因此没有必要读写分离,只是需要横向扩容。

Redis 占用的内存主要受 key 影响。如果存在很多 key ,或 key、value 的长度大,则会占用很多内存。

当 MySQL 等数据库的读操作远多于写操作时,可以用 Redis 作为读缓存。

当用户查询某个 Key 时,先到 Redis 缓存中查询,如果查询不到再到数据库查询。这样可以降低数据库的压力。

如果在数据库查询到了该 key 的值,则放入缓存,并设置几分钟的过期时间。

:将缓存服务器与客户端部署在同一主机,甚至集成在客户端进程中。

优点:响应速度很快,因为只需要读写内存,不需要等待网络 IO 。

:在客户端主机之外的其它主机上,部署一个或多个缓存服务器。

优点:容易横向扩容。

:将访问频率高的 key 存储在本地缓存中,其它 key 存储在分布式缓存中。

:有恶意请求不断地查询一些不存在的 key ,绕过缓存,直接冲向数据库。

即使查询到的值为空,也将该 key 放入缓存。

在查询缓存之前,先过滤掉明显不正常的查询请求。

:大量请求一直频繁地查询某个 key(称为热 key),当该 key 在某一时刻缓存过期时,这些请求会同时冲向数据库,造成数据库负载突增。

自动发现热 key ,并延长其过期时间。

:在某一时刻,大量 key 同时缓存过期,导致大量请求同时冲向数据库。

缓存击穿是研究一个热 key ,而缓存雪崩是研究大量普通 key 。

给不同用途的各个 key 设置不同的缓存时长,给同一用途的各个 key 设置缓存时长时加上随机数,尽量分散所有 key 的缓存时间。

redis-benchmark

即使用 -a 选项指定的密码是错的,redis-benchmark 也依然可以运行,且不会报错。

测试完之后不会删除。