Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
cbba7dd7
Commit
cbba7dd7
authored
Mar 07, 2010
by
antirez
Browse files
HSET fixes, now the new pointer is stored back in the object pointer field
parent
18e61fa2
Changes
3
Hide whitespace changes
Inline
Side-by-side
redis.c
View file @
cbba7dd7
...
@@ -226,6 +226,10 @@
...
@@ -226,6 +226,10 @@
#define APPENDFSYNC_ALWAYS 1
#define APPENDFSYNC_ALWAYS 1
#define APPENDFSYNC_EVERYSEC 2
#define APPENDFSYNC_EVERYSEC 2
/* Hashes related defaults */
#define REDIS_HASH_MAX_ZIPMAP_ENTRIES 64
#define REDIS_HASH_MAX_ZIPMAP_VALUE 512
/* We can print the stacktrace, so our assert is defined this way: */
/* We can print the stacktrace, so our assert is defined this way: */
#define redisAssert(_e) ((_e)?(void)0 : (_redisAssert(#_e,__FILE__,__LINE__),_exit(1)))
#define redisAssert(_e) ((_e)?(void)0 : (_redisAssert(#_e,__FILE__,__LINE__),_exit(1)))
static
void
_redisAssert
(
char
*
estr
,
char
*
file
,
int
line
);
static
void
_redisAssert
(
char
*
estr
,
char
*
file
,
int
line
);
...
@@ -391,6 +395,9 @@ struct redisServer {
...
@@ -391,6 +395,9 @@ struct redisServer {
off_t
vm_page_size
;
off_t
vm_page_size
;
off_t
vm_pages
;
off_t
vm_pages
;
unsigned
long
long
vm_max_memory
;
unsigned
long
long
vm_max_memory
;
/* Hashes config */
size_t
hash_max_zipmap_entries
;
size_t
hash_max_zipmap_value
;
/* Virtual memory state */
/* Virtual memory state */
FILE
*
vm_fp
;
FILE
*
vm_fp
;
int
vm_fd
;
int
vm_fd
;
...
@@ -1465,6 +1472,8 @@ static void initServerConfig() {
...
@@ -1465,6 +1472,8 @@ static void initServerConfig() {
server
.
vm_max_memory
=
1024LL
*
1024
*
1024
*
1
;
/* 1 GB of RAM */
server
.
vm_max_memory
=
1024LL
*
1024
*
1024
*
1
;
/* 1 GB of RAM */
server
.
vm_max_threads
=
4
;
server
.
vm_max_threads
=
4
;
server
.
vm_blocked_clients
=
0
;
server
.
vm_blocked_clients
=
0
;
server
.
hash_max_zipmap_entries
=
REDIS_HASH_MAX_ZIPMAP_ENTRIES
;
server
.
hash_max_zipmap_value
=
REDIS_HASH_MAX_ZIPMAP_VALUE
;
resetServerSaveParams
();
resetServerSaveParams
();
...
@@ -1725,6 +1734,12 @@ static void loadServerConfig(char *filename) {
...
@@ -1725,6 +1734,12 @@ static void loadServerConfig(char *filename) {
server
.
vm_pages
=
strtoll
(
argv
[
1
],
NULL
,
10
);
server
.
vm_pages
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"vm-max-threads"
)
&&
argc
==
2
)
{
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"vm-max-threads"
)
&&
argc
==
2
)
{
server
.
vm_max_threads
=
strtoll
(
argv
[
1
],
NULL
,
10
);
server
.
vm_max_threads
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"hash-max-zipmap-entries"
)
&&
argc
==
2
){
server
.
hash_max_zipmap_entries
=
strtol
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"hash-max-zipmap-value"
)
&&
argc
==
2
){
server
.
hash_max_zipmap_value
=
strtol
(
argv
[
1
],
NULL
,
10
);
}
else
if
(
!
strcasecmp
(
argv
[
0
],
"vm-max-threads"
)
&&
argc
==
2
)
{
server
.
vm_max_threads
=
strtoll
(
argv
[
1
],
NULL
,
10
);
}
else
{
}
else
{
err
=
"Bad directive or wrong number of arguments"
;
goto
loaderr
;
err
=
"Bad directive or wrong number of arguments"
;
goto
loaderr
;
}
}
...
@@ -2603,7 +2618,17 @@ static void freeZsetObject(robj *o) {
...
@@ -2603,7 +2618,17 @@ static void freeZsetObject(robj *o) {
}
}
static
void
freeHashObject
(
robj
*
o
)
{
static
void
freeHashObject
(
robj
*
o
)
{
dictRelease
((
dict
*
)
o
->
ptr
);
switch
(
o
->
encoding
)
{
case
REDIS_ENCODING_HT
:
dictRelease
((
dict
*
)
o
->
ptr
);
break
;
case
REDIS_ENCODING_ZIPMAP
:
zfree
(
o
->
ptr
);
break
;
default:
redisAssert
(
0
);
break
;
}
}
}
static
void
incrRefCount
(
robj
*
o
)
{
static
void
incrRefCount
(
robj
*
o
)
{
...
@@ -5577,7 +5602,7 @@ static void zrankCommand(redisClient *c) {
...
@@ -5577,7 +5602,7 @@ static void zrankCommand(redisClient *c) {
}
}
}
}
/* ===================================
=
Hash
=
=============================== */
/* =================================== Hash
es
=============================== */
static
void
hsetCommand
(
redisClient
*
c
)
{
static
void
hsetCommand
(
redisClient
*
c
)
{
int
update
=
0
;
int
update
=
0
;
robj
*
o
=
lookupKeyWrite
(
c
->
db
,
c
->
argv
[
1
]);
robj
*
o
=
lookupKeyWrite
(
c
->
db
,
c
->
argv
[
1
]);
...
@@ -5597,6 +5622,7 @@ static void hsetCommand(redisClient *c) {
...
@@ -5597,6 +5622,7 @@ static void hsetCommand(redisClient *c) {
zm
=
zipmapSet
(
zm
,
c
->
argv
[
2
]
->
ptr
,
sdslen
(
c
->
argv
[
2
]
->
ptr
),
zm
=
zipmapSet
(
zm
,
c
->
argv
[
2
]
->
ptr
,
sdslen
(
c
->
argv
[
2
]
->
ptr
),
c
->
argv
[
3
]
->
ptr
,
sdslen
(
c
->
argv
[
3
]
->
ptr
),
&
update
);
c
->
argv
[
3
]
->
ptr
,
sdslen
(
c
->
argv
[
3
]
->
ptr
),
&
update
);
o
->
ptr
=
zm
;
}
else
{
}
else
{
if
(
dictAdd
(
o
->
ptr
,
c
->
argv
[
2
],
c
->
argv
[
3
])
==
DICT_OK
)
{
if
(
dictAdd
(
o
->
ptr
,
c
->
argv
[
2
],
c
->
argv
[
3
])
==
DICT_OK
)
{
incrRefCount
(
c
->
argv
[
2
]);
incrRefCount
(
c
->
argv
[
2
]);
...
...
redis.conf
View file @
cbba7dd7
...
@@ -271,3 +271,10 @@ glueoutputbuf yes
...
@@ -271,3 +271,10 @@ glueoutputbuf yes
# your development environment so that we can test it better.
# your development environment so that we can test it better.
shareobjects
no
shareobjects
no
shareobjectspoolsize
1024
shareobjectspoolsize
1024
# Hashes are encoded in a special way (much more memory efficient) when they
# 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
zipmap.c
View file @
cbba7dd7
...
@@ -405,6 +405,13 @@ int main(void) {
...
@@ -405,6 +405,13 @@ int main(void) {
unsigned
char
*
zm
;
unsigned
char
*
zm
;
zm
=
zipmapNew
();
zm
=
zipmapNew
();
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"name"
,
4
,
(
unsigned
char
*
)
"foo"
,
3
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"surname"
,
7
,
(
unsigned
char
*
)
"foo"
,
3
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"age"
,
3
,
(
unsigned
char
*
)
"foo"
,
3
,
NULL
);
zipmapRepr
(
zm
);
exit
(
1
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"hello"
,
5
,
(
unsigned
char
*
)
"world!"
,
6
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"hello"
,
5
,
(
unsigned
char
*
)
"world!"
,
6
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"foo"
,
3
,
(
unsigned
char
*
)
"bar"
,
3
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"foo"
,
3
,
(
unsigned
char
*
)
"bar"
,
3
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"foo"
,
3
,
(
unsigned
char
*
)
"!"
,
1
,
NULL
);
zm
=
zipmapSet
(
zm
,(
unsigned
char
*
)
"foo"
,
3
,
(
unsigned
char
*
)
"!"
,
1
,
NULL
);
...
...
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