Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hanoi2005
redis
提交
48f0308a
R
redis
项目概览
hanoi2005
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
48f0308a
编写于
10月 30, 2009
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support for appendonly mode no, always, everysec
上级
16f92547
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
47 addition
and
2 deletion
+47
-2
redis.c
redis.c
+30
-2
redis.conf
redis.conf
+17
-0
未找到文件。
redis.c
浏览文件 @
48f0308a
...
...
@@ -190,6 +190,11 @@
#define ZSKIPLIST_MAXLEVEL 32
/* Should be enough for 2^32 elements */
#define ZSKIPLIST_P 0.25
/* Skiplist P = 1/4 */
/* Append only defines */
#define APPENDFSYNC_NO 0
#define APPENDFSYNC_ALWAYS 1
#define APPENDFSYNC_EVERYSEC 2
/*================================= Data types ============================== */
/* A redis object, that is a type able to hold a string / list / set */
...
...
@@ -262,6 +267,8 @@ struct redisServer {
int
dbnum
;
int
daemonize
;
int
appendonly
;
int
appendfsync
;
time_t
lastfsync
;
int
appendfd
;
int
appendseldb
;
char
*
pidfile
;
...
...
@@ -1029,6 +1036,8 @@ static void initServerConfig() {
server
.
glueoutputbuf
=
1
;
server
.
daemonize
=
0
;
server
.
appendonly
=
0
;
server
.
appendfsync
=
APPENDFSYNC_EVERYSEC
;
server
.
lastfsync
=
time
(
NULL
);
server
.
appendfd
=
-
1
;
server
.
appendseldb
=
-
1
;
/* Make sure the first time will not match */
server
.
pidfile
=
"/var/run/redis.pid"
;
...
...
@@ -1245,6 +1254,17 @@ static void loadServerConfig(char *filename) {
if
((
server
.
appendonly
=
yesnotoi
(
argv
[
1
]))
==
-
1
)
{
err
=
"argument must be 'yes' or 'no'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"appendfsync"
)
&&
argc
==
2
)
{
if
(
strcasecmp
(
argv
[
1
],
"no"
))
{
server
.
appendfsync
=
APPENDFSYNC_NO
;
}
else
if
(
strcasecmp
(
argv
[
1
],
"always"
))
{
server
.
appendfsync
=
APPENDFSYNC_ALWAYS
;
}
else
if
(
strcasecmp
(
argv
[
1
],
"everysec"
))
{
server
.
appendfsync
=
APPENDFSYNC_EVERYSEC
;
}
else
{
err
=
"argument must be 'no', 'always' or 'everysec'"
;
goto
loaderr
;
}
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"requirepass"
)
&&
argc
==
2
)
{
server
.
requirepass
=
zstrdup
(
argv
[
1
]);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"pidfile"
)
&&
argc
==
2
)
{
...
...
@@ -1651,6 +1671,7 @@ static void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv
sds
buf
=
sdsempty
();
int
j
;
ssize_t
nwritten
;
time_t
now
;
/* The DB this command was targetting is not the same as the last command
* we appendend. To issue a SELECT command is needed. */
...
...
@@ -1691,8 +1712,15 @@ static void feedAppendOnlyFile(struct redisCommand *cmd, int dictid, robj **argv
redisLog
(
REDIS_WARNING
,
"Aborting on short write while writing to the append-only file: %s"
,
strerror
(
errno
));
}
abort
();
}
fsync
(
server
.
appendfd
);
/* Let's try to get this data on the disk */
}
now
=
time
(
NULL
);
if
(
server
.
appendfsync
==
APPENDFSYNC_ALWAYS
||
(
server
.
appendfsync
==
APPENDFSYNC_EVERYSEC
&&
now
-
server
.
lastfsync
>
1
))
{
fsync
(
server
.
appendfd
);
/* Let's try to get this data on the disk */
server
.
lastfsync
=
now
;
}
}
static
void
processInputBuffer
(
redisClient
*
c
)
{
...
...
redis.conf
浏览文件 @
48f0308a
...
...
@@ -124,6 +124,23 @@ databases 16
# appendonly yes
# The fsync() calls tells the Operating System to actually write data on disk
# instead to wait for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log . Slow, Safest.
# everysec: fsync only if one second passed since the last fsync. Compromise.
#
# The default is "no" since it's faster and anyway safer than snapshots from
# the point of view of durability of the latest records modified.
appendfsync
no
# appendfsync always
# appendfsync everysec
############################### ADVANCED CONFIG ###############################
# Glue small output buffers together in order to send small replies in a
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录