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‘

相关推荐