Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
redis
提交
418d5eaf
R
redis
项目概览
别团等shy哥发育
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
418d5eaf
编写于
1月 04, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
strictly honour memory limit
上级
779fa2af
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
17 addition
and
9 deletion
+17
-9
src/diskstore.c
src/diskstore.c
+1
-1
src/dscache.c
src/dscache.c
+16
-8
未找到文件。
src/diskstore.c
浏览文件 @
418d5eaf
...
...
@@ -190,7 +190,7 @@ int dsSet(redisDb *db, robj *key, robj *val) {
len
=
dsKeyToPath
(
db
,
buf
,
key
);
memcpy
(
buf2
,
buf
,
len
);
snprintf
(
buf2
+
len
,
sizeof
(
buf2
)
-
len
,
"
%ld.
%ld"
,(
long
)
time
(
NULL
),(
long
)
val
);
snprintf
(
buf2
+
len
,
sizeof
(
buf2
)
-
len
,
"
_%ld_
%ld"
,(
long
)
time
(
NULL
),(
long
)
val
);
fp
=
fopen
(
buf2
,
"w"
);
if
((
retval
=
rdbSaveKeyValuePair
(
fp
,
db
,
key
,
val
,
time
(
NULL
)))
==
-
1
)
return
REDIS_ERR
;
...
...
src/dscache.c
浏览文件 @
418d5eaf
...
...
@@ -107,6 +107,7 @@
*/
void
spawnIOThread
(
void
);
int
cacheScheduleIOPushJobs
(
int
onlyloads
);
/* =================== Virtual Memory - Blocking Side ====================== */
...
...
@@ -210,10 +211,17 @@ int cacheFreeOneEntry(void) {
}
}
if
(
best
==
NULL
)
{
/* FIXME: If there are objects that are in the write queue
* so we can't delete them we should block here, at the cost of
* slowness as the object cache memory limit is considered
* n hard limit. */
/* Was not able to fix a single object... we should check if our
* IO queues have stuff in queue, and try to consume the queue
* otherwise we'll use an infinite amount of memory if changes to
* the dataset are faster than I/O */
if
(
listLength
(
server
.
cache_io_queue
)
>
0
)
{
cacheScheduleIOPushJobs
(
0
);
waitEmptyIOJobsQueue
();
processAllPendingIOJobs
();
return
REDIS_OK
;
}
/* Nothing to free at all... */
return
REDIS_ERR
;
}
key
=
dictGetEntryKey
(
best
);
...
...
@@ -597,8 +605,6 @@ 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
);
...
...
@@ -675,10 +681,10 @@ void cacheScheduleIO(redisDb *db, robj *key, int type) {
* (not protected by lookupKey() that will block on keys in IO_SAVEINPROG
* state. */
#define MAX_IO_JOBS_QUEUE 100
void
cacheScheduleIOPushJobs
(
int
onlyloads
)
{
int
cacheScheduleIOPushJobs
(
int
onlyloads
)
{
time_t
now
=
time
(
NULL
);
listNode
*
ln
;
int
jobs
,
topush
=
0
;
int
jobs
,
topush
=
0
,
pushed
=
0
;
/* Sync stuff on disk, but only if we have less
* than MAX_IO_JOBS_QUEUE IO jobs. */
...
...
@@ -749,10 +755,12 @@ void cacheScheduleIOPushJobs(int onlyloads) {
listDelNode
(
server
.
cache_io_queue
,
ln
);
decrRefCount
(
op
->
key
);
zfree
(
op
);
pushed
++
;
}
else
{
break
;
/* too early */
}
}
return
pushed
;
}
void
cacheCron
(
void
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录