Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Turbo码先生
redis
提交
9b24d8ad
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,发现更多精彩内容 >>
提交
9b24d8ad
编写于
1月 03, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
serious performance enhancement of diskstore
上级
5d46e370
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
4 deletion
+20
-4
src/dscache.c
src/dscache.c
+20
-4
未找到文件。
src/dscache.c
浏览文件 @
9b24d8ad
...
...
@@ -587,6 +587,8 @@ void dsCreateIOJob(int type, redisDb *db, robj *key, robj *val) {
#define REDIS_IO_LOADINPROG 4
#define REDIS_IO_SAVEINPROG 8
void
cacheScheduleIOPushJobs
(
int
onlyloads
);
void
cacheScheduleIOAddFlag
(
redisDb
*
db
,
robj
*
key
,
long
flag
)
{
struct
dictEntry
*
de
=
dictFind
(
db
->
io_queued
,
key
);
...
...
@@ -647,6 +649,7 @@ void cacheScheduleIO(redisDb *db, robj *key, int type) {
* in queue for the same key. */
if
(
type
==
REDIS_IO_LOAD
&&
!
(
flags
&
REDIS_IO_SAVE
))
{
listAddNodeHead
(
server
.
cache_io_queue
,
op
);
cacheScheduleIOPushJobs
(
1
);
}
else
{
/* FIXME: probably when this happens we want to at least move
* the write job about this queue on top, and set the creation time
...
...
@@ -655,17 +658,25 @@ void cacheScheduleIO(redisDb *db, robj *key, int type) {
}
}
void
cacheCron
(
void
)
{
/* Push scheduled IO operations into IO Jobs that the IO thread can process.
* If 'onlyloads' is true only IO_LOAD jobs are processed: this is useful
* since it's save to push LOAD IO jobs from any place of the code, while
* SAVE io jobs should never be pushed while we are processing a command
* (not protected by lookupKey() that will block on keys in IO_SAVEINPROG
* state. */
#define MAX_IO_JOBS_QUEUE 100
void
cacheScheduleIOPushJobs
(
int
onlyloads
)
{
time_t
now
=
time
(
NULL
);
listNode
*
ln
;
int
jobs
,
topush
=
0
;
/* Sync stuff on disk, but only if we have less than 100 IO jobs */
/* Sync stuff on disk, but only if we have less
* than MAX_IO_JOBS_QUEUE IO jobs. */
lockThreadedIO
();
jobs
=
listLength
(
server
.
io_newjobs
);
unlockThreadedIO
();
topush
=
100
-
jobs
;
topush
=
MAX_IO_JOBS_QUEUE
-
jobs
;
if
(
topush
<
0
)
topush
=
0
;
if
(
topush
>
(
signed
)
listLength
(
server
.
cache_io_queue
))
topush
=
listLength
(
server
.
cache_io_queue
);
...
...
@@ -677,7 +688,7 @@ void cacheCron(void) {
topush
--
;
if
(
op
->
type
==
REDIS_IO_LOAD
||
(
now
-
op
->
ctime
)
>=
server
.
cache_flush_delay
)
(
!
onlyloads
&&
(
now
-
op
->
ctime
)
>=
server
.
cache_flush_delay
)
)
{
struct
dictEntry
*
de
;
robj
*
val
;
...
...
@@ -732,6 +743,11 @@ void cacheCron(void) {
break
;
/* too early */
}
}
}
void
cacheCron
(
void
)
{
/* Push jobs */
cacheScheduleIOPushJobs
(
0
);
/* Reclaim memory from the object cache */
while
(
server
.
ds_enabled
&&
zmalloc_used_memory
()
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录