Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hanoi2005
redis
提交
3c49070b
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,发现更多精彩内容 >>
提交
3c49070b
编写于
12月 23, 2010
作者:
P
Pieter Noordhuis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Find substrings to randomize when the client is created
上级
d69a4835
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
31 deletion
+27
-31
src/redis-benchmark.c
src/redis-benchmark.c
+27
-31
未找到文件。
src/redis-benchmark.c
浏览文件 @
3c49070b
...
...
@@ -80,7 +80,8 @@ typedef struct _client {
redisContext
*
context
;
int
state
;
sds
obuf
;
char
*
randptr
;
char
*
randptr
[
10
];
/* needed for MSET against 10 keys */
size_t
randlen
;
unsigned
int
written
;
/* bytes of 'obuf' already written */
long
long
start
;
/* start time of a request */
long
long
latency
;
/* request latency */
...
...
@@ -145,29 +146,14 @@ static void resetClient(client c) {
}
static
void
randomizeClientKey
(
client
c
)
{
char
*
p
,
*
newline
;
char
buf
[
32
];
long
r
;
size_t
i
,
r
;
if
(
c
->
randptr
==
NULL
)
return
;
/* Check if we have to randomize (only once per connection) */
if
(
c
->
randptr
==
(
void
*
)
-
1
)
{
p
=
strstr
(
c
->
obuf
,
":rand:"
);
if
(
!
p
)
{
c
->
randptr
=
NULL
;
return
;
}
else
{
newline
=
strstr
(
p
,
"
\r\n
"
);
assert
(
newline
-
(
p
+
6
)
==
12
);
/* 12 chars for randomness */
c
->
randptr
=
p
+
6
;
}
for
(
i
=
0
;
i
<
c
->
randlen
;
i
++
)
{
r
=
random
()
%
config
.
randomkeys_keyspacelen
;
snprintf
(
buf
,
sizeof
(
buf
),
"%012lu"
,
r
);
memcpy
(
c
->
randptr
[
i
],
buf
,
12
);
}
/* Set random number in output buffer */
r
=
random
()
%
config
.
randomkeys_keyspacelen
;
snprintf
(
buf
,
sizeof
(
buf
),
"%012ld"
,
r
);
memcpy
(
c
->
randptr
,
buf
,
12
);
}
static
void
clientDone
(
client
c
)
{
...
...
@@ -249,7 +235,7 @@ static void writeHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
}
}
static
client
createClient
()
{
static
client
createClient
(
char
*
cmd
,
int
len
)
{
client
c
=
zmalloc
(
sizeof
(
struct
_client
));
if
(
config
.
hostsocket
==
NULL
)
{
c
->
context
=
redisConnectNonBlock
(
config
.
hostip
,
config
.
hostport
);
...
...
@@ -265,9 +251,22 @@ static client createClient() {
exit
(
1
);
}
c
->
state
=
CLIENT_CONNECTING
;
c
->
obuf
=
NULL
;
c
->
rand
ptr
=
(
void
*
)
-
1
;
c
->
obuf
=
sdsnewlen
(
cmd
,
len
)
;
c
->
rand
len
=
0
;
c
->
written
=
0
;
/* Find substrings in the output buffer that need to be randomized. */
if
(
config
.
randomkeys
)
{
char
*
p
=
c
->
obuf
,
*
newline
;
while
((
p
=
strstr
(
p
,
":rand:"
))
!=
NULL
)
{
newline
=
strstr
(
p
,
"
\r\n
"
);
assert
(
newline
-
(
p
+
6
)
==
12
);
/* 12 chars for randomness */
assert
(
c
->
randlen
<
(
signed
)(
sizeof
(
c
->
randptr
)
/
sizeof
(
char
*
)));
c
->
randptr
[
c
->
randlen
++
]
=
p
+
6
;
p
=
newline
+
2
;
}
}
redisSetReplyObjectFunctions
(
c
->
context
,
NULL
);
aeCreateFileEvent
(
config
.
el
,
c
->
context
->
fd
,
AE_WRITABLE
,
writeHandler
,
c
);
listAddNodeTail
(
config
.
clients
,
c
);
...
...
@@ -279,9 +278,8 @@ static void createMissingClients(client c) {
int
n
=
0
;
while
(
config
.
liveclients
<
config
.
numclients
)
{
client
new
=
createClient
();
new
->
obuf
=
sdsdup
(
c
->
obuf
);
if
(
config
.
randomkeys
)
randomizeClientKey
(
c
);
client
new
=
createClient
(
c
->
obuf
,
sdslen
(
c
->
obuf
));
if
(
config
.
randomkeys
)
randomizeClientKey
(
new
);
/* Listen backlog is quite limited on most systems */
if
(
++
n
>
64
)
{
...
...
@@ -329,8 +327,7 @@ static void benchmark(char *title, char *cmd, int len) {
config
.
title
=
title
;
config
.
donerequests
=
0
;
c
=
createClient
();
c
->
obuf
=
sdsnewlen
(
cmd
,
len
);
c
=
createClient
(
cmd
,
len
);
createMissingClients
(
c
);
config
.
start
=
mstime
();
...
...
@@ -458,8 +455,7 @@ int main(int argc, char **argv) {
if
(
config
.
idlemode
)
{
printf
(
"Creating %d idle connections and waiting forever (Ctrl+C when done)
\n
"
,
config
.
numclients
);
c
=
createClient
(
0
);
/* will never receive a reply */
c
->
obuf
=
sdsempty
();
c
=
createClient
(
""
,
0
);
/* will never receive a reply */
createMissingClients
(
c
);
aeMain
(
config
.
el
);
/* and will wait for every */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录