redis简单的优化

1.慢查询

总所周知,一次连接redis操作分为四步:
网络发送 --redis队列–redis操作–网络返回

慢查询就是监控 第三步redis操作的
redis中的慢查询功能将 比较慢的操作维护在一个列表当中

至于操作多久算慢呢,这个你说的算:
slowlog-log-slower-than 自定义慢查询的阈值单位是微秒
(冷知识 1秒 =1000毫秒 = 1000 000 微秒)
slowlog-max-len 定义这个队列大小

通过 slowlog get n(条数) 可以查看慢查询的日志

值得注意的一点,如果慢查询的 队列爆仓了。那么队列策略是丢弃最早入队的慢查询,因此最好将slowlog-max-len设置大点,以免每次分析时丢失一些慢查询记录了

2.pipleline

慢查询可以监控redis操作,以此做出优化,那么网络发送和网络可以优化吗,毕竟不是都说redis的瓶颈在网路吗。

这时就要说pipleline了,pipleline可以将多个操作请求打包起来一起发给redis,类似于批操作,
将原本n次的的网络通信,压缩成1次,以此减少通信的成本
在这里插入图片描述
这时候我就想,既然可以通过pipleline可以减少网络通信成本,那我直接攒波大的一次发过去,那不是可以省很多事

网络带宽听了表示很淦。。
首先 一个TCP包的大小是 1460字节
如果超过这个数,就会出现分包,半包,粘包的情况
如果要求redis原子性比较高的情况下,多包的情况可能会影响到原子性
其次 过大的pipleline会造成网络阻塞,增加单次客户端的响应时间

所以还是建议一次pipleline在1460字节内

3.redis事务

有时我们需要多条命令一起执行,要么一起不执行,这段话是不是很耳熟,没错,该redis事务出场了

multi:开始事务
exec:结束事务
discard 都不执行

在这里插入图片描述
在事务当中,执行完一条命令后,redis会返回queued,表示这时的命令存在队列中, 在执行到exec后,一次性提交

这是有朋友就问了如果事务出现了错误会怎样
这时就分两种情况啦

第一种,命令错误
在这里插入图片描述
比如这个笔者手残输错了exec,结果就导致了整个事务都提交失败了

第二种,运行是错误
在这里插入图片描述
事务能够正确的执行结束,只有出错的不予执行

至于说回滚,redis没有redo日志,也没有undo日志,所以做不到回滚的啦

4.watch
上文当中说的pipleline多包会引起原子性问题
watch 操作类似于 cas 操作

原理是通过watch 命令 监控某个key 如果事务结束后该key发生变化 则不执行(事务的全部内容都不执行)

ps: watch 结束后记得unwatch 。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值