2009-03-22 17:30:00 +08:00
|
|
|
# Redis configuration file example
|
|
|
|
|
|
|
|
# By default Redis does not run as a daemon. Use 'yes' if you need it.
|
|
|
|
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
|
|
|
|
daemonize no
|
|
|
|
|
2009-03-23 19:31:33 +08:00
|
|
|
# When run as a daemon, Redis write a pid file in /var/run/redis.pid by default.
|
|
|
|
# You can specify a custom pid file location here.
|
|
|
|
pidfile /var/run/redis.pid
|
|
|
|
|
2009-03-22 17:30:00 +08:00
|
|
|
# Accept connections on the specified port, default is 6379
|
|
|
|
port 6379
|
|
|
|
|
|
|
|
# If you want you can bind a single interface, if the bind option is not
|
|
|
|
# specified all the interfaces will listen for connections.
|
|
|
|
#
|
|
|
|
# bind 127.0.0.1
|
|
|
|
|
|
|
|
# Close the connection after a client is idle for N seconds
|
|
|
|
timeout 300
|
|
|
|
|
|
|
|
# Save the DB on disk:
|
|
|
|
#
|
|
|
|
# save <seconds> <changes>
|
|
|
|
#
|
|
|
|
# Will save the DB if both the given number of seconds and the given
|
|
|
|
# number of write operations against the DB occurred.
|
|
|
|
#
|
|
|
|
# In the example below the behaviour will be to save:
|
|
|
|
# after 900 sec (15 min) if at least 1 key changed
|
|
|
|
# after 300 sec (5 min) if at least 10 keys changed
|
|
|
|
# after 60 sec if at least 10000 keys changed
|
|
|
|
save 900 1
|
|
|
|
save 300 10
|
|
|
|
save 60 10000
|
|
|
|
|
|
|
|
# For default save/load DB in/from the working directory
|
|
|
|
# Note that you must specify a directory not a file name.
|
|
|
|
dir ./
|
|
|
|
|
|
|
|
# Set server verbosity to 'debug'
|
|
|
|
# it can be one of:
|
|
|
|
# debug (a lot of information, useful for development/testing)
|
|
|
|
# notice (moderately verbose, what you want in production probably)
|
|
|
|
# warning (only very important / critical messages are logged)
|
|
|
|
loglevel debug
|
|
|
|
|
|
|
|
# Specify the log file name. Also 'stdout' can be used to force
|
|
|
|
# the demon 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
|
|
|
|
|
|
|
|
# Set the number of databases.
|
|
|
|
databases 16
|
|
|
|
|
|
|
|
################################# REPLICATION #################################
|
|
|
|
|
|
|
|
# Master-Slave replication. Use slaveof to make a Redis instance a copy of
|
|
|
|
# another Redis server. Note that the configuration is local to the slave
|
|
|
|
# so for example it is possible to configure the slave to save the DB with a
|
|
|
|
# different interval, or to listen to another port, and so on.
|
|
|
|
|
|
|
|
# slaveof <masterip> <masterport>
|
|
|
|
|
|
|
|
############################### ADVANCED CONFIG ###############################
|
|
|
|
|
|
|
|
# Glue small output buffers together in order to send small replies in a
|
|
|
|
# single TCP packet. Uses a bit more CPU but most of the times it is a win
|
|
|
|
# in terms of number of queries per second. Use 'yes' if unsure.
|
|
|
|
glueoutputbuf yes
|
2009-03-26 04:00:48 +08:00
|
|
|
|
|
|
|
# Use object sharing. Can save a lot of memory if you have many common
|
|
|
|
# string in your dataset, but performs lookups against the shared objects
|
|
|
|
# pool so it uses more CPU and can be a bit slower. Usually it's a good
|
|
|
|
# idea.
|
|
|
|
shareobjects no
|
Adds AUTH command.
$ make
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g adlist.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g ae.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g anet.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g dict.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g redis.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g sds.c
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g zmalloc.c
cc -o redis-server -O2 -Wall -W -DSDS_ABORT_ON_OOM -g adlist.o ae.o anet.o dict.o redis.o sds.o zmalloc.o
Hint: To run the test-redis.tcl script is a good idea.
Launch the redis server with ./redis-server, then in another
terminal window enter this directory and run 'make test'.
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g benchmark.c
cc -o redis-benchmark -O2 -Wall -W -DSDS_ABORT_ON_OOM -g ae.o anet.o benchmark.o sds.o adlist.o zmalloc.o
cc -c -O2 -Wall -W -DSDS_ABORT_ON_OOM -g redis-cli.c
cc -o redis-cli -O2 -Wall -W -DSDS_ABORT_ON_OOM -g anet.o sds.o adlist.o redis-cli.o zmalloc.o
$ tail -1 redis.conf
$ ./redis-server redis.conf &
[1] 52494
$ - Server started, Redis version 0.08
- DB loaded from disk
- The server is now ready to accept connections on port 6379
. 0 clients connected (0 slaves), 1932 bytes in use
$ make test
tclsh test-redis.tcl
DEL all keys to start with a clean DB . Accepted 127.0.0.1:54490
PASSED
SET and GET an item PASSED
DEL against a single item PASSED
KEYS with pattern PASSED
KEYS to get all keys PASSED
DBSIZE PASSED
DEL all keys PASSED
Very big payload in GET/SET PASSED
SET 10000 numeric keys and access all them in reverse order . DB 0: 10001 keys in 16384 slots HT.
. 1 clients connected (0 slaves), 4885707 bytes in use
PASSED
DBSIZE should be 10001 now PASSED
INCR against non existing key PASSED
INCR against key created by incr itself PASSED
INCR against key originally set with SET PASSED
SETNX target key missing PASSED
SETNX target key exists PASSED
EXISTS PASSED
Zero length value in key. SET/GET/EXISTS PASSED
Commands pipelining PASSED
Non existing command PASSED
Basic LPUSH, RPUSH, LLENGTH, LINDEX PASSED
DEL a list PASSED
Create a long list and check every single element with LINDEX PASSED
Test elements with LINDEX in random access PASSED
LLEN against non-list value error PASSED
LINDEX against non-list value error PASSED
LPUSH against non-list value error PASSED
RPUSH against non-list value error PASSED
RENAME basic usage PASSED
RENAME source key should no longer exist PASSED
RENAME against already existing key PASSED
RENAMENX basic usage PASSED
RENAMENX against already existing key PASSED
RENAMENX against already existing key (2) PASSED
RENAME against non existing source key PASSED
RENAME where source and dest key is the same PASSED
DEL all keys again (DB 0) PASSED
DEL all keys again (DB 1) PASSED
MOVE basic usage PASSED
MOVE against key existing in the target DB PASSED
SET/GET keys in different DBs PASSED
Basic LPOP/RPOP PASSED
LPOP/RPOP against empty list PASSED
LPOP against non list value PASSED
Mass LPUSH/LPOP PASSED
LRANGE basics PASSED
LRANGE inverted indexes PASSED
LRANGE out of range indexes including the full list PASSED
LRANGE against non existing key PASSED
LTRIM basics PASSED
LSET PASSED
LSET out of range index PASSED
LSET against non existing key PASSED
LSET against non list value PASSED
SADD, SCARD, SISMEMBER, SMEMBERS basics PASSED
SADD adding the same element multiple times PASSED
SADD against non set PASSED
SREM basics PASSED
Mass SADD and SINTER with two sets PASSED
SINTERSTORE with two sets PASSED
SINTER against three sets PASSED
SINTERSTORE with three sets PASSED
SAVE - make sure there are all the types as values - DB saved on disk
PASSED
Create a random list . DB 0: 6057 keys in 16384 slots HT.
. DB 1: 3 keys in 16 slots HT.
. 1 clients connected (0 slaves), 1045147 bytes in use
PASSED
SORT with BY against the newly created list PASSED
SORT direct, numeric, against the newly created list PASSED
SORT decreasing sort PASSED
SORT speed, sorting 10000 elements list using BY, 100 times
Average time to sort: 5.28 milliseconds PASSED
SORT speed, sorting 10000 elements list directly, 100 times
Average time to sort: 1.53 milliseconds PASSED
SORT speed, pseudo-sorting 10000 elements list, BY <const>, 100 times
Average time to sort: 0.47 milliseconds PASSED
SORT regression for issue #19, sorting floats - DB saved on disk
PASSED
LREM, remove all the occurrences - DB saved on disk
PASSED
LREM, remove the first occurrence PASSED
LREM, remove non existing element PASSED
LREM, starting from tail with negative count - DB saved on disk
PASSED
LREM, starting from tail with negative count (2) PASSED
MGET - DB saved on disk
PASSED
MGET against non existing key PASSED
MGET against non-string key PASSED
FLUSHALL - DB saved on disk
PASSED
79 tests, 79 passed, 0 failed
. Client closed connection
. 0 clients connected (0 slaves), 1347660 bytes in use
$ kill -15 %1
[1]+ Terminated ./redis-server redis.conf
$ vim redis.conf
$ tail -1 redis.conf
requirepass foobared
$ ./redis-server redis.conf &
[1] 52518
$ - Server started, Redis version 0.08
- DB loaded from disk
- The server is now ready to accept connections on port 6379
. 0 clients connected (0 slaves), 1945 bytes in use
$ make test
tclsh test-redis.tcl
. Accepted 127.0.0.1:54492
DEL all keys to start with a clean DB
ERR operation not permitted
while executing
"::redis::redis_read_reply $fd"
(procedure "::redis::__dispatch__" line 13)
invoked from within
"$r keys *"
("uplevel" body line 2)
invoked from within
"uplevel 1 $code"
(procedure "test" line 4)
invoked from within
"test {DEL all keys to start with a clean DB} {
foreach key [$r keys *] {$r del $key}
$r dbsize
} {0}"
(procedure "main" line 13)
invoked from within
"main 127.0.0.1 6379"
invoked from within
"if {[llength $argv] == 0} {
main 127.0.0.1 6379
} elseif {[llength $argv] == 1 && [lindex $argv 0] eq {stress}} {
stress
} else {
main [li..."
(file "test-redis.tcl" line 630)
. Client closed connection
make: *** [test] Error 1
. 0 clients connected (0 slaves), 2041 bytes in use
. 0 clients connected (0 slaves), 2041 bytes in use
$ kill -15 %1
[1]+ Terminated ./redis-server redis.conf
$ vim test-redis.tcl
$ git diff test-redis.tcl
2009-03-26 11:03:56 +08:00
|
|
|
|
|
|
|
# Require clients to issue AUTH <PASSWORD> before processing any other
|
|
|
|
# commands. This might be useful in environments in which you do not trust
|
|
|
|
# others with access to the host running redis-server.
|
|
|
|
#
|
|
|
|
# This should stay commented out for backward compatibility and because most
|
|
|
|
# people do not need auth (e.g. they run their own servers).
|
|
|
|
|
|
|
|
#requirepass foobared
|