Redis - 慢查询&Resp协议&弱事务&消息发布订阅

1. 什么是 Redis 慢查询?

当执行时间超过极大值时,会将发生时间 耗时 命令记录
在这里插入图片描述
redis命令生命周期:发送 排队 执行 返回
慢查询只统计第3个执行步骤的时间
Redis 的所有指令全部会存放到队列, 由单线程按顺序获取并执行指令, 如果某个指令执
行很慢, 会出现阻塞

2. 设置

  1. 动态设置 6379:> config set slowlog-log-slower-than 10000 //10 毫秒
    使用 config set 完后,若想将配置持久化保存到 redis.conf,要执行 config rewrite
  2. redis.conf 修改:找到 slowlog-log-slower-than 10000 ,修改保存即可
    注意:slowlog-log-slower-than =0 记录所有命令 -1 命令都不记录

3. 慢查询原理

慢查询记录也是存在队列里的,slow-max-len 存放的记录最大条数,比如设置的 slow-max-len=10,当有第 11 条慢查询命令插入时,队列的第一条命令就会出列,第 11 条入列到慢查询队列中, 可以 config set 动态设置,也可以修改 redis.conf 完成配置

4. 慢查询的命令

获取队列里慢查询的命令:slowlog get
获取慢查询列表当前的长度:slowlog len //以上只有 1 条慢查询,返回 1;

  1. 对慢查询列表清理(重置):slowlog reset //再查 slowlog len 此时返回 0 清空;
  2. 对于线上 slow-max-len 配置的建议:线上可加大 slow-max-len 的值,记录慢查询存
    长命令时 redis 会做截断,不会占用大量内存,线上可设置 1000 以上
  3. 对于线上 slowlog-log-slower-than 配置的建议:默认为 10 毫秒,根据 redis 并发量
    来调整,对于高并发比建议为 1 毫秒
  4. 慢查询是先进先出的队列,访问日志记录出列丢失,需定期执行 slowlog get,将结果
    存储到其它设备中(如 mysql)

5. Redis 性能测试工具如何使用?

A、redis-benchmark -h 192.168.42.111 -p 6379 -c 100 -n 10000
//100 个并发连接,10000 个请求,检测服务器性能
B、redis-benchmark -h 192.168.42.111 -p 6379 -q -d 100
//测试存取大小为100 字节的数据包的性能
C、redis-benchmark -h 192.168.42.111 -p 6379 -t set,get -n 100000 -q
//只测试set,lpush 操作的性能
D 、redis-benchmark -h 192.168.42.111 -p 6379 -n 100000 -q script load “redis.call(‘set’,‘foo’,‘bar’)”
//只测试某些数值存取的性能

6. 什么是Resp 协议?

Redis 服务器与客户端通过RESP(REdis Serialization Protocol)协议通信。
主要以下特点:容易实现,解析快,人类可读.
RESP 底层采用的是TCP 的连接方式,通过tcp 进行数据传输,然后根据解析规则解析相
应信息,完成交互。
服务端程序如下:
在这里插入图片描述
客户端程序如下:
在这里插入图片描述
测试发现, 服务端打印的信息如下:
在这里插入图片描述

7. 将你现有表数据快速存放到Redis

流程如下:
A) , 使用用户名和密码登陆连接数据库
B) , 登陆成功后执行order.sql 的select 语句得到查询结果集result
C) , 使用密码登陆Redis
D), Redis 登陆成功后, 使用PIPE 管道将result 导入Redis.
操作指令如下:
mysql -utest -ptest stress --default-character-set=utf8 --skip-column-names --raw < order.sql |
redis-cli -h 192.168.42.111 -p 6379 -a 12345678 --pipe

8. PIPELINE 操作流程

使用Pipeline 模式,客户端可以一次性的发送多个命令,无需等待服务端返回。这样就大大的减少了网络往返时间,提高了系统性能。
在这里插入图片描述
将多个指令打包后,一次性提交到Redis, 网络通信只有一次

9. Redis 弱事务

pipeline 是多条命令的组合,为了保证它的原子性,redis 提供了简单的事务

  1. redis 的简单事务,将一组需要一起执行的命令放到multi 和exec 两个命令之间,其中multi 代表事务开始,exec 代表事务结束.
    注:在multi 前set user:age 4 //请提前初始化该值
    在这里插入图片描述
  2. 停止事务discard
    在这里插入图片描述
  3. 命令错误,语法不正确,导致事务不能正常结束
    在这里插入图片描述
  4. 运行错误,语法正确,但类型错误,事务可以正常结束
    在这里插入图片描述
    可以看到redis 不支持回滚功能
  5. Watch 让事务失效,操作命令
    在这里插入图片描述

10. redis 主要提供发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅

  1. 发布消息
    publish channel:test “hello world”
    在这里插入图片描述
  2. 订阅消息
    subscrible channel:test
    此时另一个客户端发布一个消息:publish channel:test “james test”
    当前订阅者客户端会收到如下消息:
    在这里插入图片描述
    和很多专业的消息队列(kafka rabbitmq),redis 的发布订阅显得很lower, 比如无法实现消息规程和回溯, 但就是简单,如果能满足应用场景,用这个也可以
  3. 查看订阅数:
    pubsub numsub channel:test // 频道channel:test 的订阅数
  4. 取消订阅
    unsubscribe channel:test
    客户端可以通过unsubscribe 命令取消对指定频道的订阅,取消后,不会再收到该频道的消息
  5. 按模式订阅和取消订阅
    psubscribe ch* //订阅以ch 开头的所有频道
    在这里插入图片描述
    punsubscribe ch* //取消以ch 开头的所有频道
    在这里插入图片描述
  6. 应用场景
    1、今日头条订阅号、微信订阅公众号、新浪微博关注、邮件订阅系统
    2、即使通信系统
    3、群聊部落系统(微信群)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值