系列文章:
本文将之前redis系列文章中遗漏的知识点进行补充,大致分为pipeline、事务、发布订阅和内存管理四个方面。
pipeline
pipeline(流水线)机制能将一组redis命令进行组装,通过一次RTT(Round Trip Time,往返时间)传输给redis,再将这组redis命令的执行结果按顺序返回给客户端。
和原生的批量命令相比:
1.原生批量命令是原子的,而pipeline不是;
2.原生批量命令是一个命令对应多个key,pipeline支持多个命令;
3.原生批量命令是redis服务器支持实现的,而pipeline需要服务器和客户端共同实现;
事务
redis提供了简单的事务功能,将一组需要一起执行的命令放到multi和exec两个命令之间。multi代表事务开始,exec命令代表事务结束,他们之间的命令是原子顺序执行的。可用discard命令代替exec来终止事务执行。
错误处理机制:
1.如果是命令语法错误,会导致整个事务无法执行;
2.如果是运行时错误,redis不支持回滚功能,需要开发人员自行修复。
发布订阅
redis提供了发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅等命令。
发布消息:publish channel message
订阅消息:subscribe channel [channel ... ]
取消订阅:unsubscribe channel
[channel ... ]
模糊匹配:p
subscribe/p
unsubscribe
channel [channel ... ]
查看活跃的订阅:pubsub channels [pattern]
查看频道订阅数:pubsub numsub [channel ..]
需要注意:新开启的订阅客户端无法接收到频道之前的消息,因为redis不会对发布的消息进行持久化。
内存管理
redis通过控制内存上限和回收策略来实现内存管理。
redis默认无限使用服务器内存,为防止极端情况下导致系统内存耗尽,建议所有redis服务器都设置maxmemory。具体命令语句为:
config set maxmemory 2GB
redis采用惰性删除(当客户端查询到设置了过期时间的键时再做删除操作,缺点是可能导致内存泄漏)和定时任务删除机制(默认每秒运行10次,根据键的过期比例、使用快慢两种速率模式回收键)来实现过期键的内存回收。
关于内存溢出控制策略,redis支持6种策略,由config set maxmemory-policy [policy]命令配置:
1.
noeviction:默认策略,不会删除任何数据,拒绝所有写入操作并返
回客户端错误信息(error)OOM command not allowed when used memory,此
时Redis只响应读操作。
2.volatile-lru:根据LRU算法删除设置了超时属性(expire)的键,直
到腾出足够空间为止。如果没有可删除的键对象,回退到noeviction策略。
3.allkeys-lru:根据LRU算法删除键,不管数据有没有设置超时属性,
直到腾出足够空间为止。
4.allkeys-random:随机删除所有键,直到腾出足够空间为止。
5.volatile-random:随机删除过期键,直到腾出足够空间为止。
6.volatile-ttl:根据键值对象的ttl属性,删除最近将要过期数据。如果
没有,回退到noeviction策略。