Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
8ff13537
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
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,体验更适合开发者的 AI 搜索 >>
提交
8ff13537
编写于
1月 17, 2011
作者:
P
Pieter Noordhuis
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '2.2' of
git://github.com/antirez/redis
into 2.2
上级
7ac1b364
99677e89
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
71 addition
and
18 deletion
+71
-18
redis.conf
redis.conf
+2
-2
src/db.c
src/db.c
+2
-2
src/networking.c
src/networking.c
+19
-0
src/redis.c
src/redis.c
+18
-0
src/redis.h
src/redis.h
+4
-2
src/zmalloc.c
src/zmalloc.c
+23
-12
src/zmalloc.h
src/zmalloc.h
+3
-0
未找到文件。
redis.conf
浏览文件 @
8ff13537
...
...
@@ -369,8 +369,8 @@ vm-max-threads 4
# have at max a given numer of elements, and the biggest element does not
# exceed a given threshold. You can configure this limits with the following
# configuration directives.
hash
-
max
-
zipmap
-
entries
64
hash
-
max
-
zipmap
-
value
512
hash
-
max
-
zipmap
-
entries
512
hash
-
max
-
zipmap
-
value
64
# Similarly to hashes, small lists are also encoded in a special way in order
# to save a lot of space. The special representation is only used when
...
...
src/db.c
浏览文件 @
8ff13537
...
...
@@ -453,6 +453,8 @@ void propagateExpire(redisDb *db, robj *key) {
int
expireIfNeeded
(
redisDb
*
db
,
robj
*
key
)
{
time_t
when
=
getExpire
(
db
,
key
);
if
(
when
<
0
)
return
0
;
/* No expire for this key */
/* If we are running in the context of a slave, return ASAP:
* the slave key expiration is controlled by the master that will
* send us synthesized DEL operations for expired keys.
...
...
@@ -464,8 +466,6 @@ int expireIfNeeded(redisDb *db, robj *key) {
return
time
(
NULL
)
>
when
;
}
if
(
when
<
0
)
return
0
;
/* Return when this key has not expired */
if
(
time
(
NULL
)
<=
when
)
return
0
;
...
...
src/networking.c
浏览文件 @
8ff13537
...
...
@@ -821,3 +821,22 @@ void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) {
}
processInputBuffer
(
c
);
}
void
getClientsMaxBuffers
(
unsigned
long
*
longest_output_list
,
unsigned
long
*
biggest_input_buffer
)
{
redisClient
*
c
;
listNode
*
ln
;
listIter
li
;
unsigned
long
lol
=
0
,
bib
=
0
;
listRewind
(
server
.
clients
,
&
li
);
while
((
ln
=
listNext
(
&
li
))
!=
NULL
)
{
c
=
listNodeValue
(
ln
);
if
(
listLength
(
c
->
reply
)
>
lol
)
lol
=
listLength
(
c
->
reply
);
if
(
sdslen
(
c
->
querybuf
)
>
bib
)
bib
=
sdslen
(
c
->
querybuf
);
}
*
longest_output_list
=
lol
;
*
biggest_input_buffer
=
bib
;
}
src/redis.c
浏览文件 @
8ff13537
...
...
@@ -1141,9 +1141,11 @@ sds genRedisInfoString(void) {
int
j
;
char
hmem
[
64
];
struct
rusage
self_ru
,
c_ru
;
unsigned
long
lol
,
bib
;
getrusage
(
RUSAGE_SELF
,
&
self_ru
);
getrusage
(
RUSAGE_CHILDREN
,
&
c_ru
);
getClientsMaxBuffers
(
&
lol
,
&
bib
);
bytesToHuman
(
hmem
,
zmalloc_used_memory
());
info
=
sdscatprintf
(
sdsempty
(),
...
...
@@ -1162,6 +1164,8 @@ sds genRedisInfoString(void) {
"used_cpu_user_childrens:%.2f
\r\n
"
"connected_clients:%d
\r\n
"
"connected_slaves:%d
\r\n
"
"client_longest_output_list:%lu
\r\n
"
"client_biggest_input_buf:%lu
\r\n
"
"blocked_clients:%d
\r\n
"
"used_memory:%zu
\r\n
"
"used_memory_human:%s
\r\n
"
...
...
@@ -1201,6 +1205,7 @@ sds genRedisInfoString(void) {
(
float
)
c_ru
.
ru_stime
.
tv_sec
+
(
float
)
c_ru
.
ru_stime
.
tv_usec
/
1000000
,
listLength
(
server
.
clients
)
-
listLength
(
server
.
slaves
),
listLength
(
server
.
slaves
),
lol
,
bib
,
server
.
bpop_blocked_clients
,
zmalloc_used_memory
(),
hmem
,
...
...
@@ -1313,6 +1318,19 @@ sds genRedisInfoString(void) {
eta
);
}
info
=
sdscat
(
info
,
"allocation_stats:"
);
for
(
j
=
0
;
j
<=
ZMALLOC_MAX_ALLOC_STAT
;
j
++
)
{
size_t
count
=
zmalloc_allocations_for_size
(
j
);
if
(
count
)
{
if
(
info
[
sdslen
(
info
)
-
1
]
!=
':'
)
info
=
sdscatlen
(
info
,
","
,
1
);
info
=
sdscatprintf
(
info
,
"%s%d=%zu"
,
(
j
==
ZMALLOC_MAX_ALLOC_STAT
)
?
">="
:
""
,
j
,
count
);
}
}
info
=
sdscat
(
info
,
"
\r\n
"
);
for
(
j
=
0
;
j
<
server
.
dbnum
;
j
++
)
{
long
long
keys
,
vkeys
;
...
...
src/redis.h
浏览文件 @
8ff13537
...
...
@@ -189,8 +189,8 @@
#define APPENDFSYNC_EVERYSEC 2
/* Zip structure related defaults */
#define REDIS_HASH_MAX_ZIPMAP_ENTRIES
64
#define REDIS_HASH_MAX_ZIPMAP_VALUE
512
#define REDIS_HASH_MAX_ZIPMAP_ENTRIES
512
#define REDIS_HASH_MAX_ZIPMAP_VALUE
64
#define REDIS_LIST_MAX_ZIPLIST_ENTRIES 512
#define REDIS_LIST_MAX_ZIPLIST_VALUE 64
#define REDIS_SET_MAX_INTSET_ENTRIES 512
...
...
@@ -656,6 +656,8 @@ void addReplyDouble(redisClient *c, double d);
void
addReplyLongLong
(
redisClient
*
c
,
long
long
ll
);
void
addReplyMultiBulkLen
(
redisClient
*
c
,
long
length
);
void
*
dupClientReplyValue
(
void
*
o
);
void
getClientsMaxBuffers
(
unsigned
long
*
longest_output_list
,
unsigned
long
*
biggest_input_buffer
);
#ifdef __GNUC__
void
addReplyErrorFormat
(
redisClient
*
c
,
const
char
*
fmt
,
...)
...
...
src/zmalloc.c
浏览文件 @
8ff13537
...
...
@@ -33,6 +33,7 @@
#include <string.h>
#include <pthread.h>
#include "config.h"
#include "zmalloc.h"
#ifdef HAVE_MALLOC_SIZE
#define PREFIX_SIZE (0)
...
...
@@ -52,19 +53,22 @@
#define free(ptr) tc_free(ptr)
#endif
#define
increment_used_memory(__n
) do { \
#define
update_zmalloc_stat_alloc(__n,__size
) do { \
size_t _n = (__n); \
size_t _stat_slot = (__size < ZMALLOC_MAX_ALLOC_STAT) ? __size : ZMALLOC_MAX_ALLOC_STAT; \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (zmalloc_thread_safe) { \
pthread_mutex_lock(&used_memory_mutex); \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
pthread_mutex_unlock(&used_memory_mutex); \
} else { \
used_memory += _n; \
zmalloc_allocations[_stat_slot]++; \
} \
} while(0)
#define
decrement_used_memory
(__n) do { \
#define
update_zmalloc_stat_free
(__n) do { \
size_t _n = (__n); \
if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); \
if (zmalloc_thread_safe) { \
...
...
@@ -79,6 +83,8 @@
static
size_t
used_memory
=
0
;
static
int
zmalloc_thread_safe
=
0
;
pthread_mutex_t
used_memory_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
/* Note that malloc_allocations elements are initialized to zero by C */
size_t
zmalloc_allocations
[
ZMALLOC_MAX_ALLOC_STAT
+
1
];
static
void
zmalloc_oom
(
size_t
size
)
{
fprintf
(
stderr
,
"zmalloc: Out of memory trying to allocate %zu bytes
\n
"
,
...
...
@@ -92,11 +98,11 @@ void *zmalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
)
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
),
size
);
return
ptr
;
#else
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -106,11 +112,11 @@ void *zcalloc(size_t size) {
if
(
!
ptr
)
zmalloc_oom
(
size
);
#ifdef HAVE_MALLOC_SIZE
increment_used_memory
(
redis_malloc_size
(
ptr
)
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
ptr
),
size
);
return
ptr
;
#else
*
((
size_t
*
)
ptr
)
=
size
;
increment_used_memory
(
size
+
PREFIX_SIZE
);
update_zmalloc_stat_alloc
(
size
+
PREFIX_SIZE
,
size
);
return
(
char
*
)
ptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -128,8 +134,8 @@ void *zrealloc(void *ptr, size_t size) {
newptr
=
realloc
(
ptr
,
size
);
if
(
!
newptr
)
zmalloc_oom
(
size
);
decrement_used_memory
(
oldsize
);
increment_used_memory
(
redis_malloc_size
(
newptr
)
);
update_zmalloc_stat_free
(
oldsize
);
update_zmalloc_stat_alloc
(
redis_malloc_size
(
newptr
),
size
);
return
newptr
;
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
...
...
@@ -138,8 +144,8 @@ void *zrealloc(void *ptr, size_t size) {
if
(
!
newptr
)
zmalloc_oom
(
size
);
*
((
size_t
*
)
newptr
)
=
size
;
decrement_used_memory
(
oldsize
);
increment_used_memory
(
size
);
update_zmalloc_stat_free
(
oldsize
);
update_zmalloc_stat_alloc
(
size
,
size
);
return
(
char
*
)
newptr
+
PREFIX_SIZE
;
#endif
}
...
...
@@ -152,12 +158,12 @@ void zfree(void *ptr) {
if
(
ptr
==
NULL
)
return
;
#ifdef HAVE_MALLOC_SIZE
decrement_used_memory
(
redis_malloc_size
(
ptr
));
update_zmalloc_stat_free
(
redis_malloc_size
(
ptr
));
free
(
ptr
);
#else
realptr
=
(
char
*
)
ptr
-
PREFIX_SIZE
;
oldsize
=
*
((
size_t
*
)
realptr
);
decrement_used_memory
(
oldsize
+
PREFIX_SIZE
);
update_zmalloc_stat_free
(
oldsize
+
PREFIX_SIZE
);
free
(
realptr
);
#endif
}
...
...
@@ -179,6 +185,11 @@ size_t zmalloc_used_memory(void) {
return
um
;
}
size_t
zmalloc_allocations_for_size
(
size_t
size
)
{
if
(
size
>
ZMALLOC_MAX_ALLOC_STAT
)
return
0
;
return
zmalloc_allocations
[
size
];
}
void
zmalloc_enable_thread_safeness
(
void
)
{
zmalloc_thread_safe
=
1
;
}
...
...
src/zmalloc.h
浏览文件 @
8ff13537
...
...
@@ -40,5 +40,8 @@ size_t zmalloc_used_memory(void);
void
zmalloc_enable_thread_safeness
(
void
);
float
zmalloc_get_fragmentation_ratio
(
void
);
size_t
zmalloc_get_rss
(
void
);
size_t
zmalloc_allocations_for_size
(
size_t
size
);
#define ZMALLOC_MAX_ALLOC_STAT 256
#endif
/* _ZMALLOC_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录