Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
8ff13537
Commit
8ff13537
authored
Jan 17, 2011
by
Pieter Noordhuis
Browse files
Merge branch '2.2' of
git://github.com/antirez/redis
into 2.2
parents
7ac1b364
99677e89
Changes
7
Show whitespace changes
Inline
Side-by-side
redis.conf
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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 */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment