Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Turbo码先生
redis
提交
a34e0a25
R
redis
项目概览
Turbo码先生
/
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,发现更多精彩内容 >>
提交
a34e0a25
编写于
5月 10, 2010
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CONFIG command now supports hot modification of RDB saving parameters.
上级
89e689c5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
66 addition
and
0 deletion
+66
-0
redis.c
redis.c
+58
-0
sds.c
sds.c
+7
-0
sds.h
sds.h
+1
-0
未找到文件。
redis.c
浏览文件 @
a34e0a25
...
...
@@ -9683,6 +9683,40 @@ static void configSetCommand(redisClient *c) {
server
.
masterauth
=
zstrdup
(
o
->
ptr
);
}
else
if
(
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
"maxmemory"
))
{
server
.
maxmemory
=
strtoll
(
o
->
ptr
,
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
c
->
argv
[
2
]
->
ptr
,
"save"
))
{
int
vlen
,
j
;
sds
*
v
=
sdssplitlen
(
o
->
ptr
,
sdslen
(
o
->
ptr
),
" "
,
1
,
&
vlen
);
/* Perform sanity check before setting the new config:
* - Even number of args
* - Seconds >= 1, changes >= 0 */
if
(
vlen
&
1
)
{
sdsfreesplitres
(
v
,
vlen
);
goto
badfmt
;
}
for
(
j
=
0
;
j
<
vlen
;
j
++
)
{
char
*
eptr
;
long
val
;
val
=
strtoll
(
v
[
j
],
&
eptr
,
10
);
if
(
eptr
[
0
]
!=
'\0'
||
((
j
&
1
)
==
0
&&
val
<
1
)
||
((
j
&
1
)
==
1
&&
val
<
0
))
{
sdsfreesplitres
(
v
,
vlen
);
goto
badfmt
;
}
}
/* Finally set the new config */
resetServerSaveParams
();
for
(
j
=
0
;
j
<
vlen
;
j
+=
2
)
{
time_t
seconds
;
int
changes
;
seconds
=
strtoll
(
v
[
j
],
NULL
,
10
);
changes
=
strtoll
(
v
[
j
+
1
],
NULL
,
10
);
appendServerSaveParams
(
seconds
,
changes
);
}
sdsfreesplitres
(
v
,
vlen
);
}
else
{
addReplySds
(
c
,
sdscatprintf
(
sdsempty
(),
"-ERR not supported CONFIG parameter %s
\r\n
"
,
...
...
@@ -9692,6 +9726,14 @@ static void configSetCommand(redisClient *c) {
}
decrRefCount
(
o
);
addReply
(
c
,
shared
.
ok
);
return
;
badfmt:
/* Bad format errors */
addReplySds
(
c
,
sdscatprintf
(
sdsempty
(),
"-ERR invalid argument '%s' for CONFIG SET '%s'
\r\n
"
,
(
char
*
)
o
->
ptr
,
(
char
*
)
c
->
argv
[
2
]
->
ptr
));
decrRefCount
(
o
);
}
static
void
configGetCommand
(
redisClient
*
c
)
{
...
...
@@ -9726,6 +9768,22 @@ static void configGetCommand(redisClient *c) {
addReplyBulkCString
(
c
,
buf
);
matches
++
;
}
if
(
stringmatch
(
pattern
,
"save"
,
0
))
{
sds
buf
=
sdsempty
();
int
j
;
for
(
j
=
0
;
j
<
server
.
saveparamslen
;
j
++
)
{
buf
=
sdscatprintf
(
buf
,
"%ld %d"
,
server
.
saveparams
[
j
].
seconds
,
server
.
saveparams
[
j
].
changes
);
if
(
j
!=
server
.
saveparamslen
-
1
)
buf
=
sdscatlen
(
buf
,
" "
,
1
);
}
addReplyBulkCString
(
c
,
"save"
);
addReplyBulkCString
(
c
,
buf
);
sdsfree
(
buf
);
matches
++
;
}
decrRefCount
(
o
);
lenobj
->
ptr
=
sdscatprintf
(
sdsempty
(),
"*%d
\r\n
"
,
matches
*
2
);
}
...
...
sds.c
浏览文件 @
a34e0a25
...
...
@@ -335,3 +335,10 @@ cleanup:
}
#endif
}
void
sdsfreesplitres
(
sds
*
tokens
,
int
count
)
{
if
(
!
tokens
)
return
;
while
(
count
--
)
sdsfree
(
tokens
[
count
]);
zfree
(
tokens
);
}
sds.h
浏览文件 @
a34e0a25
...
...
@@ -65,6 +65,7 @@ sds sdsrange(sds s, long start, long end);
void
sdsupdatelen
(
sds
s
);
int
sdscmp
(
sds
s1
,
sds
s2
);
sds
*
sdssplitlen
(
char
*
s
,
int
len
,
char
*
sep
,
int
seplen
,
int
*
count
);
void
sdsfreesplitres
(
sds
*
tokens
,
int
count
);
void
sdstolower
(
sds
s
);
void
sdstoupper
(
sds
s
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录