【redis-2.6.12】 ChangeDetail

Redis 2.6.12

UPGRADE URGENCY: MODERATE, nothing very critical but a few non trivial bugs.

  • [BUGFIX] redis-cli –bigkeys: don't crash with empty DB.
  • [BUGFIX] stop-writes-on-bgsave-error now works in redis.conf
  • [BUGFIX] Don't crash at startup if RDB is there but can't be opened.
  • [BUGFIX] Initial value for master_link_down_since_seconds is now huge.
  • [BUGFIX] Allow SELECT while loading the DB.
  • [BUGFIX] Don't replicate/AOF an empty MULTI/EXEC if the transaction is empty or containing just read-only commands.
  • [BUGFIX] EXPIRE should not be able to resurrect keys (see issue #1026).
  • [IMPROVED] Extended SET back ported from Redis 2.8 / unstable
  • [IMPROVED] Test suite improved.

[BUGFIX] redis-cli –bigkeys: don't crash with empty DB.

对应 commit :
f93d9929d8bc2d97345070c9caa9509c0481496e
说明 :
修复了对空的数据库执行redis-cli –bigkeys因为数据库为空,返回nil由于指针问题会导致SIGSEGV。
所谓bigkeys就是在redis中找到value占用内存最大的key
redis使用RANDOMKEY指令,进行随机采样,暴力的地找出近似最大的key

[BUGFIX] stop-writes-on-bgsave-error now works in redis.conf

对应 commit :
18d16f8592500d54831dde07727a68fcfd243442
说明 :
之前_stop-writes-on-bgsave-error 配置不起作用,
因为读配置的函数loadServerConfiginitServer之前。
而initServer里直接给stop-writes-on-bgsave-error赋值1,所以直接覆盖掉了。
从选项的字面意思大致可以看出作用。bgsave主要由serverCron(
save_配置)或用户指令BGSAVE触发,
执行rdbSaveBackground函数,通过fork子进程来生成内存快照,有CoW技术保证数据一致。
然后serverCron不断等待子进程退出,如果子进程退出码非零,则表示出错。
通常由于磁盘只读引起。Redis在backgroundSaveDoneHandlerlastbgsave_status设成REDIS_ERR
此时,如果执行写操作的命令,并且设置了该配置就会直接返回具体的出错信息,“blabla disk blabla error …”

[BUGFIX] Don't crash at startup if RDB is there but can't be opened.

对应 commit :
b9f8c2a5b0e4a0217ff9c181e61595c89d1ba1f7
说明 :
这儿应该是作者表述有误, 在2.6.11里,只要fopen rdb文件失败都标记为ENOENT
这样当文件存在,但是不可以打开时会直接跳过(没任何日志)。
新版本出现这种问题会直接exit(1)
所以这个BUGFIX的说明有点点问题 :)

[BUGFIX] Initial value for master_link_down_since_seconds is now huge.

对应 commit :
4f8b18f3dd8a4a7feaa8b8d4c41d894b75f73405
说明 : 略… 主要是为了INFO显示时,可以更准确,并不是显示redis启动时间。

[BUGFIX] Allow SELECT while loading the DB.

对应 commit :
68189054067d54bf0c1f697244ff5b6b8842635c
说明 :
类似我上一篇写的[BUGFIX] Allow AUTH while loading the DB in memory.
这里我复制一下过来:
这儿增加了 'l' 标志,在redis中表示REDIS_CMD_LOADING
直观地说,就是允许redis仍在loading阶段(初始化、读rdb等等)就可以接收指令,
详见populateCommandTableprocessCommand两个函数。
同样为'l'标志的有sub/pub相关的cmd和info。

[BUGFIX] Don't replicate/AOF an empty MULTI/EXEC if the transaction is empty or containing just read-only commands.

对应 commit :
611dcb56ee6a07066dd491ffbae102f0498acdcc
说明 :
execCommand里对批量执行的多个指令进行过滤,跳过REDIS_CMD_READONLY(只读)的指令

[BUGFIX] EXPIRE should not be able to resurrect keys (see issue #1026).

对应 commit :
140260409eef36dd4d155e488eb9531cf119728e
说明 :
默认redis会在serverCronactiveExpireCycle来清理过期的key,但是每次只对每个db最多处理10个。
所以,如果expires dict比较多来不及清理,在后面调用EXPIRE的expireGenericCommand函数时,
因为原来使用dictFind不会检查expires dict,这样相当于原来本应该删除的key复活了…
lookupKeyRead函数会调expireIfNeeded来避免这种情况

[IMPROVED] Extended SET back ported from Redis 2.8 / unstable

对应 commit :
d785413d868e5817a2bfb5994e3833d6f6ced9c6
说明 :
新特性,详见:http://www.redis.io/commands/set
给SET指令丰富了选项,可以设超时、存在覆盖、非存在写入等。
感觉以后可以把那些SETEX, SEXTNX等等指令归一了。

[IMPROVED] Test suite improved.

对应 commit :
说明 : 一堆tcl测试脚本,针对本次bugfix和新特性

你可能感兴趣的:(redis,最新,修改,changelog)