Redis 4.0的主要特性解释
Redis 4.0 正式版发布
终于在昨天(2017/07/15),redis 4.0的稳定版发布了。
我想简要总结一下redis与之前版本的不同之处。
如果有错误,请不吝指正。
上一篇qiita文章
在生产中使用RedisCluster运营了两年
版本说明
如果取一段抜粋
请注意,4.0 可能是 Redis 中最具极端性的发布之一,它在内部的更改方面做出了很多的改动:所有的聚合数据类型不再使用 Redis 对象结构,而是直接使用 SDS 对象,某些删除操作现在已经使用了线程,复制引擎也进行了多方面的修改。因此,请您小心处理此版本。接下来的几个补丁级别的发布将在未来数周和数月中修复用户发现的重要问题。
Redis 4.0可能是迄今为止最极端的一个版本更新之一。
请谨慎使用,因为用户发现的重大问题将在数周至数月内通过补丁发布来解决。
根据所说的情况,如果还要再观察一段时间,或者如果确实需要使用的话,最好自己充分验证一下。
重要提示:Redis Cluster用户请注意,在不兼容列表中指定的情况下,Redis 4.0集群总线协议与Redis 3.2不兼容。因此,为了升级,需要对实例进行大量重启,并且无法进行滚动升级。为了增加与容器/ NAT的兼容性,需要更改许多东西,例如在固定偏移处的总线端口不再是可接受的设计,导致了不兼容的协议。
另外,似乎无法在Redis Cluster中混合使用3系和4系,需要完全停止群集并进行更新。我该怎么办呢?
眼睛的功能
好的,似乎4.0版本有以下几个亮点功能。我们一一来看。
-
- a modules system
-
- much better replication (PSYNC2)
-
- improvements to eviction policies
-
- threaded DEL/FLUSH
-
- mixed RDB+AOF format
-
- Raspberry Pi support as primary platform
-
- the new MEMORY command
-
- Redis Cluster support for Nat/Docker
-
- active memory defragmentation
-
- memory usage and performance improvements
- much faster Redis Cluster key creation
模块系统 (mó xì
Redis不仅已经拥有哈希类型、集合类型和列表类型等多种数据类型,还可以执行Lua脚本等功能,功能方面已经相当丰富。现在它将进一步增强。
请参考以下的 Qiita 文章以获取详细信息:
http://qiita.com/saidie/items/06a14529006635a18b2f
http://qiita.com/saidie/items/251084941ffd73871a1a
更好的复制(PSYNC2)
之前的Redis中确实有部分同步(Partial-Sync),但存在一些问题。
具体来说,无法从除了同一主服务器之外的其他服务器进行部分同步,这意味着当组建Redis集群等情况下,
每次新的从服务器提升为主服务器时,都会进行全量同步,这是一个有点麻烦的设计。
如果想更详细了解这个问题,请点击这里。
ざっくり試算すると、5GBのデータをRedisに格納している場合、NWが1Gbpsの場合、悲観的に考えると40秒もかかりますね。Redis Clusterを組んでいるのに、非常に悲しいダウンタイムです。しかし、この問題は改善されました。詳細はantirezのgistをご覧ください。
对驱逐政策的改进
Redis有一些策略来处理内存溢出时的情况,现在也可以使用LFU(最低频率使用)。
以前被称为LRU(最近使用)的策略是指最近使用的键不太容易被删除。
而LFU的策略是指缓存命中率高的键不太容易被删除。
如果在使用Redis作为缓存时,也许这个策略更好。
请在antirez新闻中查看更详细的信息。
线程化的DEL/FLUSH
在过去,例如删除了已经大型成长的SET类型等键时,由于是在单线程中执行,所以直到删除完成之前,不会接受任何其他操作。
当版本升级为4.0后,新增了在后台执行DEL命令的UNLINK命令,可以异步删除键值。
此外,FLUSHALL和FLUSHDB命令也增加了async选项,可以同样以异步方式删除。
混合RDB+AOF格式
迄今为止,Redis的文件备份方式有两种。
-
- 定期的にmemoryの完全dumpを取るRDB
- 追記型でredisに発行されたコマンドを保存するAOF
如果用MySQL的话,前者是mysqldump,后者是binlog对吧?
顺便提一下,在文件大小方面,以下是redis内存使用量的情况。
$ redis-cli info memory
# Memory
used_memory:717116400
used_memory_human:683.90M
这个文件大小有如此大的差别。
$ ls -lh
-rw-r--r-- 1 root root 668M 7月 15 10:53 2017 redis.aof
-rw-r--r-- 1 root root 288M 7月 15 10:52 2017 redis.rdb
然而,由于rdb文件一次性进行了288MB的磁盘写入,因此写入负载非常高。
此外,由于这是定期备份,备份后的数据会丢失。
aof是追加写入模式,因此写入负载较低,但读取时的负载较高。
粗略估算一下,Redis重启所需的时间是读取一个5GB的aof文件,使用HDD(350 IOPS * IO块大小4KB=1.36MB/sec)进行读取的话,需要3744秒。也就是大约需要一个小时的时间来进行Redis重启。
为了解决这些问题,似乎出现了一种将RDB-AOF结合起来的混合模式。
可以恢复到RDB文件的状态,然后再用AOF来继续恢复。
我并没有实际验证过,如果有人验证过,请告诉我。
树莓派作为首选平台提供支持。 (Shù zuò .)
一模一样。省略
新的MEMORY命令
听说这是一个用于故障排除的内存使用量命令。
由于官方网站的命令列表中还没有详细说明,所以我们还需要等待详细信息。
据说可以通过一个单一键来查看内存使用量报告。
Redis 集群对于 Nat/Docker 的支持
在使用Docker组建集群时,许多人可能陷入的陷阱似乎已经得到解决。具体来说,Redis集群应该支持announce-ip和announce-port功能。
主动内存碎片整理
根据文字意思,已经加入了主动(在线)内存优化功能。
这是一个实验性质的功能, 默认情况下是禁用的。
有关注意事项以及何时应该启用的详细信息,请参阅4.0.0版本的redis.conf文件。
内存使用和性能的改进
听说内存使用和性能好像有所改进。
Redis现在使用更少的内存来存储相同数量的数据。这种节约在很大程度上取决于存储的数据集的类型。
只写着“と”罢了。
Redis集群的键创建速度大幅加快
听说有什么东西变得更快了,但不知道详细信息在哪。
以上、祝您享受美好的Redis生活。