redis知识盘点【柒】_redis补遗

系列文章:


redis知识盘点【零】_redis常用命令


redis知识盘点【壹】_基础知识


redis知识盘点【贰】_五种类型


redis知识盘点【叁】_持久化


redis知识盘点【肆】_主从复制和sentinel哨兵


redis知识盘点【伍】_一致性哈希和cluster集群


redis知识盘点【陆】_客户端Jedis


redis知识盘点【柒】_redis补遗


本文将之前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策略。


猜你喜欢

转载自blog.csdn.net/xinzun/article/details/80148024