type
status
date
slug
summary
tags
category
icon
password
Property
目录
Redis
的慢查询日志功能用于记录执行时间超过给定时长的命令请求, 用户可以通过这个功能产生的日志来监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项:slowlog-log-slower-than
选项指定执行时间超过多少微秒(1
秒等于1,000,000
微秒)的命令请求会被记录到日志上
slowlog-max-len
选项指定服务器最多保存多少条慢查询日志
用
CONFIG_SET
命令将 slowlog-log-slower-than
选项的值设为0
微秒, 这样Redis
服务器执行的任何命令都会被记录到慢查询日志中, 接着将slowlog-max-len
选项的值设为5
, 让服务器最多只保存5
条慢查询日志接着, 用客户端发送几条命令请求:
type
status
date
slug
summary
tags
category
icon
password
Property
通过执行
MONITOR
命令, 客户端可以将自己变为一个监视器, 实时地接收并打印出服务器当前处理的命令请求的相关信息:每当一个客户端向服务器发送一条命令请求时, 服务器除了会处理这条命令请求之外, 还会将关于这条命令请求的信息发送给所有监视器:
发送
MONITOR
命令可以让一个普通客户端变为一个监视器, 该命令的实现原理的伪代码来:如果客户端
c10086
向服务器发送MONITOR
命令, 那么这个客户端的REDIS_MONITOR
标志会被打开, 并且这个客户端本身会被添加到monitors
链表的表尾。假设客户端
c10086
发送MONITOR
命令之前, monitors
链表的状态:那么在服务器执行客户端
c10086
发送的MONITOR
命令之后, monitors
链表将被更新为:type
status
date
slug
summary
tags
category
icon
password
Property
Redis
分区技术(Redis Partition)指的是将Redis
中的数据进行拆分,然后把拆分后的数据分散到多个不同的Redis
实例(即服务器)中,每个实例仅存储数据集的某一部分(一个子集),把这个过程称之为 Redis 分区操作。Redis
实例指的是一台安装了Redis
服务器的计算机。分区(Partition)不仅是
Redis
中的概念,几乎所有数据库管理系统都会涉及到“分区”的应用。分区的优势
Redis
分区技术有两个方面的优势,一是提升服务器的性能,二是提高了服务器的数据存储能力。一方面,单台机器的
Redis
服务器,其网络 IO 能力和计算资源都是非常有限的,但是如果我们将请求分散到多台机器上,那么就能充分利用多台计算机的算力和网络带宽,从而整体上提升Redis
服务器的性能。另一方面,随着存储数据的不断增加,单台机器的存储容量会达到极限,若将数据分散存储到多台Redis
服务器上,其存储能力也将得到大幅度提升。注意,
Redis
分区技术可以利用多台计算机的内存总和,从而创建出大型的Redis
数据库。分区常用方法
分区技术有两种常用方法,分别是“范围分区”和“哈希分区”。
type
status
date
slug
summary
tags
category
icon
password
Property
目录
在实际的业务场景中,
Redis
一般和其他数据库搭配使用,用来减轻后端数据库的压力,比如和关系型数据库 MySQL
配合使用。Redis
会把MySQL
中经常被查询的数据缓存起来,比如热点数据,这样当用户来访问的时候,就不需要到MySQL
中去查询了,而是直接获取Redis
中的缓存数据,从而降低了后端数据库的读取压力。如果说用户查询的数据Redis
没有,此时用户的查询请求就会转到MySQL
数据库,当MySQL
将数据返回给客户端时,同时会将数据缓存到Redis
中,这样用户再次读取时,就可以直接从Redis
中获取数据。在使用
Redis
作为缓存数据库的过程中,有时也会遇到一些棘手问题,比如常见缓存穿透、缓存击穿和缓存雪崩等问题缓存雪崩
通常为了保证缓存中的数据与数据库中的数据一致性,会给
Redis
里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并将数据更新到Redis
里,这样后续请求都可以直接命中缓存。type
status
date
slug
summary
tags
category
icon
password
Property
Redis
模块采用了两种连接模式:直接模式和连接池模式,它们都可以操作Redis
直连模式
db
表示当前选择的库,其参数值可以是 0-15
;如果设置连接数据库的密码,那么就需要使用password
进行验证,否则可以省略连接池模式
redis
模块使用 connection pool
(连接池)来管理 redis server
的所有连接,每个Redis
实例都会维护一个属于自己的连接池,这样做的目的是为了减少每次连接或断开的性能消耗。多个Redis
实例共享一个连接池:连接池的作用:当有新的客户端请求连接时,只需要去连接池获取一个连接即可,实际上就是把一个连接共享给多个客户端使用,这样就节省了每次连接所耗费的时间。