1,慢查询分析
redis提供了slowlog-log-slower-than和slowlog-max-len配置解决预设阈值和慢查询的最大保存记录
2.Bitmaps
Bitmaps用位来保存一些信息。
3.HyperLogLog
利用很小的空间来统计总数,但是会有一些误差
4.事务
multi
会把multi和exec中的命令包起来,其中任何一个出错误,整个事务会回滚
redis>MULTI
OK
redis>SET key value
QUEUED
redis>SET key
(error)ERR wrong number of arguments for 'set' command
redis> errorCOMMAND key
(error) ERR unknown command 'errorCOMMAND'
redis> EXEC
(error) EXECABORT Transaction discarded because of previous errors.
但是运行错误
运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前Redis是无法发现的,所以在事务里这样的命令是会被Redis接受并执行的。如果事务里的一条命令出现了运行错误,事务里其他的命令依然会继续执行(包括出错命令之后的命令),示例如下:
redis>MULTI
OK
redis>SET key 1
QUEUED
redis>SADD key 2
QUEUED
redis>SET key 3
QUEUED
redis>EXEC
1) OK
2) (error) ERR Operation against a key holding the wrong kind of value
3) OK
redis>GET key
"3"
discard会抛弃之前的muti事务,在muti事务中的操作会作废如下
> SET foo 1
OK
> MULTI
OK
> INCR foo
QUEUED
> DISCARD
OK
> GET foo
"1"
watch命令采用了乐观锁控制,有点类似cas
当watch某个key的时候,如果在multi exec执行期间,key的值被改变了,那么整个multi exec中间的命令都不执行
常见的一个例子:用watch处理秒杀问题
5.输出缓冲区和出入缓冲区
两者都不受maxmemory影响,前者是redis的处理速度超过客户端接收速度,后者是因为接收的命令超过redis处理速度
前者常见的原因是monitor命令的使用
6.客户端常见异常
a。无法从连接池中获取连接 原因可能会有:存在慢查询,服务短异常,客户端没有归还连接等
b。主从节点内存不一样大,但是主内存特别大,超过了maxmemory的限制,很有可能是输入缓冲区或者输出缓冲区过大