Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
redis
提交
92f18d04
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,发现更多精彩内容 >>
提交
92f18d04
编写于
5月 15, 2013
作者:
A
antirez
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'config-rewrite' into unstable
上级
25e049cc
78167807
变更
5
展开全部
隐藏空白更改
内联
并排
Showing
5 changed file
with
781 addition
and
69 deletion
+781
-69
redis.conf
redis.conf
+2
-2
src/config.c
src/config.c
+658
-23
src/redis.c
src/redis.c
+94
-43
src/redis.h
src/redis.h
+26
-0
tests/assets/default.conf
tests/assets/default.conf
+1
-1
未找到文件。
redis.conf
浏览文件 @
92f18d04
...
...
@@ -63,10 +63,10 @@ tcp-keepalive 0
# warning (only very important / critical messages are logged)
loglevel
notice
# Specify the log file name. Also
'stdout'
can be used to force
# Specify the log file name. Also
the emptry string
can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile
stdout
logfile
""
# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
...
...
src/config.c
浏览文件 @
92f18d04
此差异已折叠。
点击以展开。
src/redis.c
浏览文件 @
92f18d04
...
...
@@ -269,11 +269,12 @@ void redisLogRaw(int level, const char *msg) {
FILE
*
fp
;
char
buf
[
64
];
int
rawmode
=
(
level
&
REDIS_LOG_RAW
);
int
log_to_stdout
=
server
.
logfile
[
0
]
==
'\0'
;
level
&=
0xff
;
/* clear flags */
if
(
level
<
server
.
verbosity
)
return
;
fp
=
(
server
.
logfile
==
NULL
)
?
stdout
:
fopen
(
server
.
logfile
,
"a"
);
fp
=
log_to_stdout
?
stdout
:
fopen
(
server
.
logfile
,
"a"
);
if
(
!
fp
)
return
;
if
(
rawmode
)
{
...
...
@@ -289,8 +290,7 @@ void redisLogRaw(int level, const char *msg) {
}
fflush
(
fp
);
if
(
server
.
logfile
)
fclose
(
fp
);
if
(
!
log_to_stdout
)
fclose
(
fp
);
if
(
server
.
syslog_enabled
)
syslog
(
syslogLevelMap
[
level
],
"%s"
,
msg
);
}
...
...
@@ -318,13 +318,13 @@ void redisLog(int level, const char *fmt, ...) {
* where we need printf-alike features are served by redisLog(). */
void
redisLogFromHandler
(
int
level
,
const
char
*
msg
)
{
int
fd
;
int
log_to_stdout
=
server
.
logfile
[
0
]
==
'\0'
;
char
buf
[
64
];
if
((
level
&
0xff
)
<
server
.
verbosity
||
(
server
.
logfile
==
NULL
&&
server
.
daemonize
))
return
;
fd
=
server
.
logfile
?
open
(
server
.
logfile
,
O_APPEND
|
O_CREAT
|
O_WRONLY
,
0644
)
:
STDOUT_FILENO
;
if
((
level
&
0xff
)
<
server
.
verbosity
||
(
log_to_stdout
&&
server
.
daemonize
))
return
;
fd
=
log_to_stdout
?
STDOUT_FILENO
:
open
(
server
.
logfile
,
O_APPEND
|
O_CREAT
|
O_WRONLY
,
0644
);
if
(
fd
==
-
1
)
return
;
ll2string
(
buf
,
sizeof
(
buf
),
getpid
());
if
(
write
(
fd
,
"["
,
1
)
==
-
1
)
goto
err
;
...
...
@@ -336,7 +336,7 @@ void redisLogFromHandler(int level, const char *msg) {
if
(
write
(
fd
,
msg
,
strlen
(
msg
))
==
-
1
)
goto
err
;
if
(
write
(
fd
,
"
\n
"
,
1
)
==
-
1
)
goto
err
;
err:
if
(
server
.
logfile
)
close
(
fd
);
if
(
!
log_to_stdout
)
close
(
fd
);
}
/* Return the UNIX time in microseconds */
...
...
@@ -1198,32 +1198,35 @@ void createSharedObjects(void) {
}
void
initServerConfig
()
{
int
j
;
getRandomHexChars
(
server
.
runid
,
REDIS_RUN_ID_SIZE
);
server
.
configfile
=
NULL
;
server
.
hz
=
REDIS_DEFAULT_HZ
;
server
.
runid
[
REDIS_RUN_ID_SIZE
]
=
'\0'
;
server
.
arch_bits
=
(
sizeof
(
long
)
==
8
)
?
64
:
32
;
server
.
port
=
REDIS_SERVERPORT
;
server
.
bindaddr
=
NULL
;
server
.
unixsocket
=
NULL
;
server
.
unixsocketperm
=
0
;
server
.
unixsocketperm
=
REDIS_DEFAULT_UNIX_SOCKET_PERM
;
server
.
ipfd
=
-
1
;
server
.
sofd
=
-
1
;
server
.
dbnum
=
REDIS_DEFAULT_DBNUM
;
server
.
verbosity
=
REDIS_
NOTICE
;
server
.
verbosity
=
REDIS_
DEFAULT_VERBOSITY
;
server
.
maxidletime
=
REDIS_MAXIDLETIME
;
server
.
tcpkeepalive
=
0
;
server
.
tcpkeepalive
=
REDIS_DEFAULT_TCP_KEEPALIVE
;
server
.
active_expire_enabled
=
1
;
server
.
client_max_querybuf_len
=
REDIS_MAX_QUERYBUF_LEN
;
server
.
saveparams
=
NULL
;
server
.
loading
=
0
;
server
.
logfile
=
NULL
;
/* NULL = log on standard output */
server
.
syslog_enabled
=
0
;
server
.
syslog_ident
=
zstrdup
(
"redis"
);
server
.
logfile
=
zstrdup
(
REDIS_DEFAULT_LOGFILE
);
server
.
syslog_enabled
=
REDIS_DEFAULT_SYSLOG_ENABLED
;
server
.
syslog_ident
=
zstrdup
(
REDIS_DEFAULT_SYSLOG_IDENT
);
server
.
syslog_facility
=
LOG_LOCAL0
;
server
.
daemonize
=
0
;
server
.
daemonize
=
REDIS_DEFAULT_DAEMONIZE
;
server
.
aof_state
=
REDIS_AOF_OFF
;
server
.
aof_fsync
=
AOF_FSYNC_EVERYSE
C
;
server
.
aof_no_fsync_on_rewrite
=
0
;
server
.
aof_fsync
=
REDIS_DEFAULT_AOF_FSYN
C
;
server
.
aof_no_fsync_on_rewrite
=
REDIS_DEFAULT_AOF_NO_FSYNC_ON_REWRITE
;
server
.
aof_rewrite_perc
=
REDIS_AOF_REWRITE_PERC
;
server
.
aof_rewrite_min_size
=
REDIS_AOF_REWRITE_MIN_SIZE
;
server
.
aof_rewrite_base_size
=
0
;
...
...
@@ -1236,21 +1239,21 @@ void initServerConfig() {
server
.
aof_fd
=
-
1
;
server
.
aof_selected_db
=
-
1
;
/* Make sure the first time will not match */
server
.
aof_flush_postponed_start
=
0
;
server
.
aof_rewrite_incremental_fsync
=
1
;
server
.
pidfile
=
zstrdup
(
"/var/run/redis.pid"
);
server
.
rdb_filename
=
zstrdup
(
"dump.rdb"
);
server
.
aof_rewrite_incremental_fsync
=
REDIS_DEFAULT_AOF_REWRITE_INCREMENTAL_FSYNC
;
server
.
pidfile
=
zstrdup
(
REDIS_DEFAULT_PID_FILE
);
server
.
rdb_filename
=
zstrdup
(
REDIS_DEFAULT_RDB_FILENAME
);
server
.
aof_filename
=
zstrdup
(
"appendonly.aof"
);
server
.
requirepass
=
NULL
;
server
.
rdb_compression
=
1
;
server
.
rdb_checksum
=
1
;
server
.
stop_writes_on_bgsave_err
=
1
;
server
.
activerehashing
=
1
;
server
.
rdb_compression
=
REDIS_DEFAULT_RDB_COMPRESSION
;
server
.
rdb_checksum
=
REDIS_DEFAULT_RDB_CHECKSUM
;
server
.
stop_writes_on_bgsave_err
=
REDIS_DEFAULT_STOP_WRITES_ON_BGSAVE_ERROR
;
server
.
activerehashing
=
REDIS_DEFAULT_ACTIVE_REHASHING
;
server
.
notify_keyspace_events
=
0
;
server
.
maxclients
=
REDIS_MAX_CLIENTS
;
server
.
bpop_blocked_clients
=
0
;
server
.
maxmemory
=
0
;
server
.
maxmemory_policy
=
REDIS_
MAXMEMORY_VOLATILE_LRU
;
server
.
maxmemory_samples
=
3
;
server
.
maxmemory
=
REDIS_DEFAULT_MAXMEMORY
;
server
.
maxmemory_policy
=
REDIS_
DEFAULT_MAXMEMORY_POLICY
;
server
.
maxmemory_samples
=
REDIS_DEFAULT_MAXMEMORY_SAMPLES
;
server
.
hash_max_ziplist_entries
=
REDIS_HASH_MAX_ZIPLIST_ENTRIES
;
server
.
hash_max_ziplist_value
=
REDIS_HASH_MAX_ZIPLIST_VALUE
;
server
.
list_max_ziplist_entries
=
REDIS_LIST_MAX_ZIPLIST_ENTRIES
;
...
...
@@ -1263,7 +1266,7 @@ void initServerConfig() {
server
.
repl_timeout
=
REDIS_REPL_TIMEOUT
;
server
.
cluster_enabled
=
0
;
server
.
cluster_node_timeout
=
REDIS_CLUSTER_DEFAULT_NODE_TIMEOUT
;
server
.
cluster_configfile
=
zstrdup
(
"nodes.conf"
);
server
.
cluster_configfile
=
zstrdup
(
REDIS_DEFAULT_CLUSTER_CONFIG_FILE
);
server
.
lua_caller
=
NULL
;
server
.
lua_time_limit
=
REDIS_LUA_TIME_LIMIT
;
server
.
lua_client
=
NULL
;
...
...
@@ -1285,10 +1288,10 @@ void initServerConfig() {
server
.
repl_master_initial_offset
=
-
1
;
server
.
repl_state
=
REDIS_REPL_NONE
;
server
.
repl_syncio_timeout
=
REDIS_REPL_SYNCIO_TIMEOUT
;
server
.
repl_serve_stale_data
=
1
;
server
.
repl_slave_ro
=
1
;
server
.
repl_serve_stale_data
=
REDIS_DEFAULT_SLAVE_SERVE_STALE_DATA
;
server
.
repl_slave_ro
=
REDIS_DEFAULT_SLAVE_READ_ONLY
;
server
.
repl_down_since
=
0
;
/* Never connected, repl is down since EVER. */
server
.
repl_disable_tcp_nodelay
=
0
;
server
.
repl_disable_tcp_nodelay
=
REDIS_DEFAULT_REPL_DISABLE_TCP_NODELAY
;
server
.
slave_priority
=
REDIS_DEFAULT_SLAVE_PRIORITY
;
server
.
master_repl_offset
=
0
;
...
...
@@ -1302,15 +1305,8 @@ void initServerConfig() {
server
.
repl_no_slaves_since
=
time
(
NULL
);
/* Client output buffer limits */
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_NORMAL
].
hard_limit_bytes
=
0
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_NORMAL
].
soft_limit_bytes
=
0
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_NORMAL
].
soft_limit_seconds
=
0
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_SLAVE
].
hard_limit_bytes
=
1024
*
1024
*
256
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_SLAVE
].
soft_limit_bytes
=
1024
*
1024
*
64
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_SLAVE
].
soft_limit_seconds
=
60
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_PUBSUB
].
hard_limit_bytes
=
1024
*
1024
*
32
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_PUBSUB
].
soft_limit_bytes
=
1024
*
1024
*
8
;
server
.
client_obuf_limits
[
REDIS_CLIENT_LIMIT_CLASS_PUBSUB
].
soft_limit_seconds
=
60
;
for
(
j
=
0
;
j
<
REDIS_CLIENT_LIMIT_NUM_CLASSES
;
j
++
)
server
.
client_obuf_limits
[
j
]
=
clientBufferLimitsDefaults
[
j
];
/* Double constants initialization */
R_Zero
=
0
.
0
;
...
...
@@ -2077,7 +2073,8 @@ sds genRedisInfoString(char *section) {
"uptime_in_seconds:%ld
\r\n
"
"uptime_in_days:%ld
\r\n
"
"hz:%d
\r\n
"
"lru_clock:%ld
\r\n
"
,
"lru_clock:%ld
\r\n
"
"config_file:%s
\r\n
"
,
REDIS_VERSION
,
redisGitSHA1
(),
strtol
(
redisGitDirty
(),
NULL
,
10
)
>
0
,
...
...
@@ -2097,7 +2094,8 @@ sds genRedisInfoString(char *section) {
uptime
,
uptime
/
(
3600
*
24
),
server
.
hz
,
(
unsigned
long
)
server
.
lruclock
);
(
unsigned
long
)
server
.
lruclock
,
server
.
configfile
?
server
.
configfile
:
""
);
}
/* Clients */
...
...
@@ -2772,6 +2770,58 @@ void redisSetProcTitle(char *title) {
#endif
}
/* Given the filename, return the absolute path as an SDS string, or NULL
* if it fails for some reason. Note that "filename" may be an absolute path
* already, this will be detected and handled correctly.
*
* The function does not try to normalize everything, but only the obvious
* case of one or more "../" appearning at the start of "filename"
* relative path. */
sds
getAbsolutePath
(
char
*
filename
)
{
char
cwd
[
1024
];
sds
abspath
;
sds
relpath
=
sdsnew
(
filename
);
relpath
=
sdstrim
(
relpath
,
"
\r\n\t
"
);
if
(
relpath
[
0
]
==
'/'
)
return
relpath
;
/* Path is already absolute. */
/* If path is relative, join cwd and relative path. */
if
(
getcwd
(
cwd
,
sizeof
(
cwd
))
==
NULL
)
{
sdsfree
(
relpath
);
return
NULL
;
}
abspath
=
sdsnew
(
cwd
);
if
(
sdslen
(
abspath
)
&&
abspath
[
sdslen
(
abspath
)
-
1
]
!=
'/'
)
abspath
=
sdscat
(
abspath
,
"/"
);
/* At this point we have the current path always ending with "/", and
* the trimmed relative path. Try to normalize the obvious case of
* trailing ../ elements at the start of the path.
*
* For every "../" we find in the filename, we remove it and also remove
* the last element of the cwd, unless the current cwd is "/". */
while
(
sdslen
(
relpath
)
>=
3
&&
relpath
[
0
]
==
'.'
&&
relpath
[
1
]
==
'.'
&&
relpath
[
2
]
==
'/'
)
{
relpath
=
sdsrange
(
relpath
,
3
,
-
1
);
if
(
sdslen
(
abspath
)
>
1
)
{
char
*
p
=
abspath
+
sdslen
(
abspath
)
-
2
;
int
trimlen
=
1
;
while
(
*
p
!=
'/'
)
{
p
--
;
trimlen
++
;
}
abspath
=
sdsrange
(
abspath
,
0
,
-
(
trimlen
+
1
));
}
}
/* Finally glue the two parts together. */
abspath
=
sdscatsds
(
abspath
,
relpath
);
sdsfree
(
relpath
);
return
abspath
;
}
int
main
(
int
argc
,
char
**
argv
)
{
struct
timeval
tv
;
...
...
@@ -2839,6 +2889,7 @@ int main(int argc, char **argv) {
resetServerSaveParams
();
loadServerConfig
(
configfile
,
options
);
sdsfree
(
options
);
if
(
configfile
)
server
.
configfile
=
getAbsolutePath
(
configfile
);
}
else
{
redisLog
(
REDIS_WARNING
,
"Warning: no config file specified, using the default config. In order to specify a config file use %s /path/to/%s.conf"
,
argv
[
0
],
server
.
sentinel_mode
?
"sentinel"
:
"redis"
);
}
...
...
src/redis.h
浏览文件 @
92f18d04
...
...
@@ -98,6 +98,26 @@
#define REDIS_DEFAULT_REPL_BACKLOG_TIME_LIMIT (60*60)
/* 1 hour */
#define REDIS_REPL_BACKLOG_MIN_SIZE (1024*16)
/* 16k */
#define REDIS_BGSAVE_RETRY_DELAY 5
/* Wait a few secs before trying again. */
#define REDIS_DEFAULT_PID_FILE "/var/run/redis.pid"
#define REDIS_DEFAULT_SYSLOG_IDENT "redis"
#define REDIS_DEFAULT_CLUSTER_CONFIG_FILE "nodes.conf"
#define REDIS_DEFAULT_DAEMONIZE 0
#define REDIS_DEFAULT_UNIX_SOCKET_PERM 0
#define REDIS_DEFAULT_TCP_KEEPALIVE 0
#define REDIS_DEFAULT_LOGFILE ""
#define REDIS_DEFAULT_SYSLOG_ENABLED 0
#define REDIS_DEFAULT_STOP_WRITES_ON_BGSAVE_ERROR 1
#define REDIS_DEFAULT_RDB_COMPRESSION 1
#define REDIS_DEFAULT_RDB_CHECKSUM 1
#define REDIS_DEFAULT_RDB_FILENAME "dump.rdb"
#define REDIS_DEFAULT_SLAVE_SERVE_STALE_DATA 1
#define REDIS_DEFAULT_SLAVE_READ_ONLY 1
#define REDIS_DEFAULT_REPL_DISABLE_TCP_NODELAY 0
#define REDIS_DEFAULT_MAXMEMORY 0
#define REDIS_DEFAULT_MAXMEMORY_SAMPLES 3
#define REDIS_DEFAULT_AOF_NO_FSYNC_ON_REWRITE 0
#define REDIS_DEFAULT_ACTIVE_REHASHING 1
#define REDIS_DEFAULT_AOF_REWRITE_INCREMENTAL_FSYNC 1
/* Protocol and I/O related defines */
#define REDIS_MAX_QUERYBUF_LEN (1024*1024*1024)
/* 1GB max query buffer. */
...
...
@@ -241,6 +261,7 @@
#define REDIS_NOTICE 2
#define REDIS_WARNING 3
#define REDIS_LOG_RAW (1<<10)
/* Modifier to log without timestamp */
#define REDIS_DEFAULT_VERBOSITY REDIS_NOTICE
/* Anti-warning macro... */
#define REDIS_NOTUSED(V) ((void) V)
...
...
@@ -252,6 +273,7 @@
#define AOF_FSYNC_NO 0
#define AOF_FSYNC_ALWAYS 1
#define AOF_FSYNC_EVERYSEC 2
#define REDIS_DEFAULT_AOF_FSYNC AOF_FSYNC_EVERYSEC
/* Zip structure related defaults */
#define REDIS_HASH_MAX_ZIPLIST_ENTRIES 512
...
...
@@ -274,6 +296,7 @@
#define REDIS_MAXMEMORY_ALLKEYS_LRU 3
#define REDIS_MAXMEMORY_ALLKEYS_RANDOM 4
#define REDIS_MAXMEMORY_NO_EVICTION 5
#define REDIS_DEFAULT_MAXMEMORY_POLICY REDIS_MAXMEMORY_VOLATILE_LRU
/* Scripting */
#define REDIS_LUA_TIME_LIMIT 5000
/* milliseconds */
...
...
@@ -490,6 +513,8 @@ typedef struct clientBufferLimitsConfig {
time_t
soft_limit_seconds
;
}
clientBufferLimitsConfig
;
extern
clientBufferLimitsConfig
clientBufferLimitsDefaults
[
REDIS_CLIENT_LIMIT_NUM_CLASSES
];
/* The redisOp structure defines a Redis Operation, that is an instance of
* a command with an argument vector, database ID, propagation target
* (REDIS_PROPAGATE_*), and command pointer.
...
...
@@ -672,6 +697,7 @@ typedef struct {
struct
redisServer
{
/* General */
char
*
configfile
;
/* Absolute config file path, or NULL */
int
hz
;
/* serverCron() calls frequency in hertz */
redisDb
*
db
;
dict
*
commands
;
/* Command table */
...
...
tests/assets/default.conf
浏览文件 @
92f18d04
...
...
@@ -6,7 +6,7 @@ pidfile /var/run/redis.pid
port
6379
timeout
0
loglevel
verbose
logfile
stdout
logfile
''
databases
16
save
900
1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录