02.27 生产环境Redis中的热点key如何发现并优化?

苏中山


Redis作为高性能的非关系数据库,在目前主流的网站都是非常广泛的应用。读写效率可达8-10w/s。一般作为缓存数据库,都是载入网站的一些热点性质额数据,而不是把缓存当做数据库来使用。

只有找到的是网站中的热点数据,才能够把Redis的性能发挥到极致,一般查找缓存的热点的key,常用的方式分为客户端的和我们服务的两大类。

客户端

1、客户端其实是距离key”最近”的地方,因为操作的Redis的命令就是客户端发出的。例如客户端设发送操作key命令的时候,把调用的key和调用的次数记录到日志里面进行统计,然后再服务端进行日志分析的统计,得到热点的key值,这样就在Redis缓存key的时候就可用统计出来的热点数据来操作。


2、凭借经验,进行预估,每一个网站在开始运行的时候都会存在热点场景,或者说访问的频率在非常高场景下,比如说像微博的热搜榜、商城里面活动促销商品,那这些就是我们可以提前将Key作为热点Key进行存储


3、采用抓包工具进行评估:Redis使用TCP协议与客户端进行通信,存在网络上面的通信,这时候就可以基于抓包工具去分析网络所携带的key的数据,然后做好访问key频率统计。通信协议采用的是RESP。

例如:tcpdump、Wireshark等工具

注:RESP(REdis Serialization Protocol, redis序列化协议)协议与Redis服务器交互。RESP是序列化数据之后,在建立在TCP通道上进行传输

服务端

1、使用monitor命令统计热点key可以记录redis的所有操作命令,记录并分析monitor日志得到key的访问频率。(monitor可能会造成性能问题,所以要选择好时机)


2、采用第三方开源项目,如facebook开源项目redis-faina,获取最近操作命令的热点key、热点命令、耗时分布等数据。为了减少网络开销以及加快输出缓冲区的消费速度,monitor要尽可能在本机执行。


PHP智慧与能力


redis的值有5种类型,不同的类型有不同的命令来获取:

字符直接 get key


队列 左端弹出一个元素 LPOP key

哈希 HGET key field

集合 SMEMBERS key 返回集合中的所有元素

有序集合ZRANGE key start stop


更详细的命令可以查看redis常用命令。


分享到:


相關文章: