Redis 慢查询与弱事务
Posted VVII
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 慢查询与弱事务相关的知识,希望对你有一定的参考价值。
慢查询
慢查询阈值及队列长度
redis.cli
127.0.0.1:6379> config get slowlog-log-slower-than
1) "slowlog-log-slower-than"
2) "10000"
127.0.0.1:6379> config get slowlog-max-len
1) "slowlog-max-len"
2) "128"
redis.windows.conf
# 慢查询 默认十秒
# The following time is expressed in microseconds, so 1000000 is equivalent
# to one second. Note that a negative number disables the slow log, while
# a value of zero forces the logging of every command.
slowlog-log-slower-than 10000
# slowlog-log-slower-than =0记录所有命令 -1所有命令都不记录
# 队列记录数量
slowlog-max-len 128
# 此时当有第129条慢查询命令插入时,队列的第一条命令就会出列,第11条入列到慢查询队列中,先进先出
慢查询队列的长度
127.0.0.1:6379> slowlog len
(integer) 0
127.0.0.1:6379>
获取队列中慢查询记录的命令
slowlog get
redis 弱事务
事务相关操作
# 事务开始
multi
# 可发多条命令,但是命令不会立即被执行,而是被放到一个队列中
# 提交事务
exec
# 此时会执行所有事务块内的命令。返回事务块内所有命令的返回值,按命令执行的先后顺序排列。
# 停止事务
discard
# 客户端可以清空事务队列,并放弃执行事务, 并且客户端会从事务状态中退出
#
WATCH
# 使用watch后, multi失效,事务失效
- Redis事务特性
1.redis 不支持回滚“Redis 在事务失败时不进行回滚,而是继续执行余下的命令”, 所以 Redis 的内部可以保持简单且快速。
2.如果在一个事务中的命令出现错误,那么所有的命令都不会执行;
3.如果在一个事务中出现运行错误,那么正确的命令会被执行。
Lua 解决Redis的弱事务
- 优点1减少网络开销,2.原子性,3,复用性
# eval script numkeys key [key ...] arg [arg ...]
# KEYS[1],ARGV[1]区分大小写,数字代表参数位置
eval "return {KEYS[1],KEYS[3],ARGV[1]}" 3 hello redis Redis !!
#当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL script numkeys key [key …] arg [arg …] 命令的阻塞当中退出,并收到一个错误作为返回值。
#另一方面,假如当前正在运行的脚本已经执行过写操作,那么即使执行 SCRIPT KILL ,也无法将它杀死,因为这是违反 Lua 脚本的原子性执行原则的。
#在这种情况下,唯一可行的办法是使用 SHUTDOWN NOSAVE 命令,通过停止整个 Redis 进程来停止脚本的运行,并防止不完整(half-written)的信息被写入数据库中
script kill
# 其他命令
script flush
script exists ‘sha nm‘
以上是关于Redis 慢查询与弱事务的主要内容,如果未能解决你的问题,请参考以下文章
redis 学习系列07Redis小功能大用处01 慢查询分析以及Redis Shell