Redis的安裝和部署


Redis介紹

Redis是當前比較熱門的NOSQL系統之一,它是一個key-value存儲系統。和Memcache類似,但很大程度補償了Memcache的不足,它支持存儲的value類型相對更多,包括string、list、set、zset和hash。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作。在此基礎上,Redis支持各種不同方式的排序。


同Memcache一樣,Redis數據都是緩存在計算機內存中,不同的是,Memcache只能將數據緩存到內存中,無法自動定期寫入硬盤,這就表示,一斷電或重啟,內存清空,數據丟失。所以Memcache的應用場景適用於緩存無需持久化的數據。而Redis不同的是它會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,實現數據的持久化。

基礎知識

1、Redis的數據類型:

  字符串、列表(lists)、集合(sets)、有序集合(sorts sets)、哈希表(hashs)

2、Redis和memcache相比的獨特之處:

  (1)redis可以用來做存儲(storge)、而memcache是來做緩存(cache)。這個特點主要是因為其有“持久化”功能

  (2)存儲的數據有“結構”,對於memcache來說,存儲的數據,只有一種類型——“字符串”,而redis則可以存儲字符串、鏈表、集合、有序集合、哈序結構

3、持久化的兩種方式:

  Redis將數據存儲於內存中,或被配置為使用虛擬內存。

  實現數據持久化的兩種方式:(1)使用截圖的方式,將內存中的數據不斷寫入磁盤(性能高,但可能會引起一定程度的數據丟失)

               (2)使用類似mysql的方式,記錄每次更新的日志

4、Redis的主從同步:對提高讀取性能非常有益

5、Redis服務端的默認端口是6379

安裝

環境准備

系統版本 CentOS 7.2 

軟件版本 Redis-4.0.2


 1、從官網下載Redis 壓縮包,地址:http://redis.io/download 下載穩定版即可。

[root@linux-node1 src]# cd /usr/local/src/
[root@linux-node1 src]# wget http://download.redis.io/releases/redis-4.0.2.tar.gz
2解壓安裝包
[root@linux-node1 src]# tar xzf redis-4.0.2.tar.gz 
[root@linux-node1 src]# ls
redis-4.0.2  redis-4.0.2.tar.gz
[root@linux-node1 src]# cd redis-4.0.2
[root@linux-node1 redis-4.0.2]# 
3、執行make 對Redis解壓后文件進行編譯 

需要提前安裝好gcc相關的包( yum install -y open-ssl-devel gcc glibc gcc-c*)

[root@linux-node1 redis-4.0.2]# make MALLOC=libc
cd src && make all
make[1]: Entering directory `/usr/local/src/redis-4.0.2/src'
rm -rf redis-server redis-sentinel redis-cli redis-benchmark redis-check-rdb redis-check-aof *.o *.gcda *.gcno *.gcov redis.info lcov-html Makefile.dep dict-benchmark
(cd ../deps && make distclean)
make[2]: Entering directory `/usr/local/src/redis-4.0.2/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
make[2]: Leaving directory `/usr/local/src/redis-4.0.2/deps'
(rm -f .make-*)
echo STD=-std=c99 -pedantic -DREDIS_STATIC= >> .make-settings
echo WARN=-Wall -W -Wno-missing-field-initializers >> .make-settings
echo OPT=-O2 >> .make-settings
echo MALLOC=libc >> .make-settings
echo CFLAGS= >> .make-settings
echo LDFLAGS= >> .make-settings
echo REDIS_CFLAGS= >> .make-settings
echo REDIS_LDFLAGS= >> .make-settings
echo PREV_FINAL_CFLAGS=-std=c99 -pedantic -DREDIS_STATIC= -Wall -W -Wno-missing-field-initializers -O2 -g -ggdb   -I../deps/hiredis -I../deps/linenoise -I../deps/lua/src >> .make-settings
echo PREV_FINAL_LDFLAGS=  -g -ggdb -rdynamic >> .make-settings
(cd ../deps && make hiredis linenoise lua)
make[2]: Entering directory `/usr/local/src/redis-4.0.2/deps'
(cd hiredis && make clean) > /dev/null || true
(cd linenoise && make clean) > /dev/null || true
(cd lua && make clean) > /dev/null || true
(cd jemalloc && [ -f Makefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
(echo "" > .make-cflags)
(echo "" > .make-ldflags)
MAKE hiredis
cd hiredis && make static
make[3]: Entering directory `/usr/local/src/redis-4.0.2/deps/hiredis'
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  net.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  hiredis.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  sds.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  async.c
cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb  read.c
ar rcs libhiredis.a net.o hiredis.o sds.o async.o read.o
make[3]: Leaving directory `/usr/local/src/redis-4.0.2/deps/hiredis'
MAKE linenoise
cd linenoise && make
make[3]: Entering directory `/usr/local/src/redis-4.0.2/deps/linenoise'
cc  -Wall -Os -g  -c linenoise.c
make[3]: Leaving directory `/usr/local/src/redis-4.0.2/deps/linenoise'
MAKE lua
cd lua/src && make all CFLAGS="-O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' " MYLDFLAGS="" AR="ar rcu"
make[3]: Entering directory `/usr/local/src/redis-4.0.2/deps/lua/src'
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lapi.o lapi.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lcode.o lcode.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldebug.o ldebug.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldo.o ldo.c
ldo.c: In function ‘f_parser’:
ldo.c:496:7: warning: unused variable ‘c’ [-Wunused-variable]
   int c = luaZ_lookahead(p->z);
       ^
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldump.o ldump.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lfunc.o lfunc.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lgc.o lgc.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o llex.o llex.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmem.o lmem.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lobject.o lobject.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lopcodes.o lopcodes.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lparser.o lparser.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstate.o lstate.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstring.o lstring.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltable.o ltable.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltm.o ltm.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lundump.o lundump.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lvm.o lvm.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lzio.o lzio.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o strbuf.o strbuf.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o fpconv.o fpconv.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lauxlib.o lauxlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lbaselib.o lbaselib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ldblib.o ldblib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o liolib.o liolib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lmathlib.o lmathlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loslib.o loslib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o ltablib.o ltablib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lstrlib.o lstrlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o loadlib.o loadlib.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o linit.o linit.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cjson.o lua_cjson.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_struct.o lua_struct.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_cmsgpack.o lua_cmsgpack.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua_bit.o lua_bit.c
ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o strbuf.o fpconv.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o lua_cjson.o lua_struct.o lua_cmsgpack.o lua_bit.o    # DLL needs all object files
ranlib liblua.a
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o lua.o lua.c
cc -o lua  lua.o liblua.a -lm 
liblua.a(loslib.o): In function `os_tmpname':
loslib.c:(.text+0x28c): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o luac.o luac.c
cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC=''    -c -o print.o print.c
cc -o luac  luac.o print.o liblua.a -lm 
make[3]: Leaving directory `/usr/local/src/redis-4.0.2/deps/lua/src'
make[2]: Leaving directory `/usr/local/src/redis-4.0.2/deps'
    CC adlist.o
    CC quicklist.o
    CC ae.o
    CC anet.o
    CC dict.o
    CC server.o
    CC sds.o
    CC zmalloc.o
    CC lzf_c.o
    CC lzf_d.o
    CC pqsort.o
    CC zipmap.o
    CC sha1.o
    CC ziplist.o
    CC release.o
    CC networking.o
    CC util.o
    CC object.o
    CC db.o
    CC replication.o
    CC rdb.o
    CC t_string.o
    CC t_list.o
    CC t_set.o
    CC t_zset.o
    CC t_hash.o
    CC config.o
    CC aof.o
    CC pubsub.o
    CC multi.o
    CC debug.o
    CC sort.o
    CC intset.o
    CC syncio.o
    CC cluster.o
    CC crc16.o
    CC endianconv.o
    CC slowlog.o
    CC scripting.o
    CC bio.o
    CC rio.o
    CC rand.o
    CC memtest.o
    CC crc64.o
    CC bitops.o
    CC sentinel.o
    CC notify.o
    CC setproctitle.o
    CC blocked.o
    CC hyperloglog.o
    CC latency.o
    CC sparkline.o
    CC redis-check-rdb.o
    CC redis-check-aof.o
    CC geo.o
    CC lazyfree.o
    CC module.o
    CC evict.o
    CC expire.o
    CC geohash.o
    CC geohash_helper.o
    CC childinfo.o
    CC defrag.o
    CC siphash.o
    CC rax.o
    LINK redis-server
    INSTALL redis-sentinel
    CC redis-cli.o
    LINK redis-cli
    CC redis-benchmark.o
    LINK redis-benchmark
    INSTALL redis-check-rdb
    INSTALL redis-check-aof

Hint: It's a good idea to run 'make test' ;)

make[1]: Leaving directory `/usr/local/src/redis-4.0.2/src'
[root@linux-node1 redis-4.0.2]# 
make MALLOC=libc

注意:如果make不加 MALLOC=libc可能報下面錯誤,

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
4編譯成功后,進入src文件夾,執行make install進行Redis安裝
[root@linux-node1 redis-4.0.2]# cd src/
[root@linux-node1 src]# make install PREFIX=/usr/local/redis

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

配置

1、為了方便管理,將Redis文件中的conf配置文件和常用命令移動到統一文件中

a)創建redis.conf文件

[root@linux-node1 redis]# mkdir -p /usr/local/redis/etc

b)cp相關文件到redis目錄 cp前面加\ 表示拷貝直接覆蓋不進行詢問:

 
         

[root@linux-node1 redis-4.0.2]# cp /usr/local/src/redis-4.0.2/redis.conf /usr/local/redis/etc/

[root@linux-node1 src]# \cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server /usr/local/redis/bin/

2、執行Redis-server 命令,啟動Redis 服務
[root@linux-node1 bin]# pwd
/usr/local/redis/bin
[root@linux-node1 bin]# ./redis-server 
87412:C 17 Oct 11:52:36.984 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
87412:C 17 Oct 11:52:36.985 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=87412, just started
87412:C 17 Oct 11:52:36.985 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
87412:M 17 Oct 11:52:36.988 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._ 
_.-``__ ''-._ 
_.-`` `. `_. ''-._ Redis 4.0.2 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._ 
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 87412
`-._ `-._ `-./ _.-' _.-' 
|`-._`-._ `-.__.-' _.-'_.-'| 
| `-._`-._ _.-'_.-' | http://redis.io 
`-._ `-._`-.__.-'_.-' _.-' 
|`-._`-._ `-.__.-' _.-'_.-'| 
| `-._`-._ _.-'_.-' | 
`-._ `-._`-.__.-'_.-' _.-' 
`-._ `-.__.-' _.-' 
`-._ _.-' 
`-.__.-'

87412:M 17 Oct 11:52:36.992 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
87412:M 17 Oct 11:52:36.992 # Server initialized
87412:M 17 Oct 11:52:36.992 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
87412:M 17 Oct 11:52:36.992 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
87412:M 17 Oct 11:52:36.992 * DB loaded from disk: 0.000 seconds
87412:M 17 Oct 11:52:36.992 * Ready to accept connections

 
./redis-server

注意:這里直接執行Redis-server 啟動的Redis服務,是在前台直接運行的(效果如上圖),也就是說,執行完該命令后,如果Lunix關閉當前會話,則Redis服務也隨即關閉。正常情況下,啟動Redis服務需要從后台啟動,並且指定啟動配置文件

3、后台啟動redis服務

a)首先編輯conf文件,將daemonize屬性改為yes和添加日志文件(表明需要在后台運行)

[root@linux-node1 bin]# vi /usr/local/redis/etc/redis.conf 
daemonize yes
logfile "/var/log/redis/redis.log"

b)再次啟動redis服務,並指定啟動服務配置文件

[root@linux-node1 bin]#  /usr/local/redis/bin/redis-server  /usr/local/redis/etc/redis.conf 
87513:C 17 Oct 11:56:15.394 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
87513:C 17 Oct 11:56:15.395 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=87513, just started
87513:C 17 Oct 11:56:15.395 # Configuration loaded

[root@linux-node1 bin]# ps aux |grep redis
root      87514  0.5  0.1 141768  2012 ?        Ssl  11:56   0:00 /usr/local/redis/bin/redis-server 127.0.0.1:6379

c)用本地客戶端命令連接

[root@linux-node1 bin]# redis-cli 
127.0.0.1:6379> exit

d)為了方便維護添加環境變量,重新登陸一下窗口自動讀取環境變量

# vi /etc/profile
在最后行添加:
export PATH="$PATH:/usr/local/redis/bin"

e)優化配置下面的內核參數

#vim /etc/sysctl.conf

vm.overcommit_memory = 1 
#sysctl -p 

常用命令及配置文件介紹

Redis維護命令

1,啟動,關閉,連接

redis-server /usr/local/redis/redis.conf #啟動redis服務,並指定配置文件
redis-cli shutdown #關閉redis客戶端
redis-cli -h 127.0.0.1 -p 6379 #--連接指定的redis服務器
redis-cli -h 127.0.0.1 -p 6379 -a myPassword #-指定密碼登陸

2,鍵操作

DEL lind --刪除鍵
Exist lind --判斷鍵是否存在
EXPIRE lind 60 --設置時間為60秒,之后自動刪除
keys * --獲取所有鍵

3,集合操作

SADD lind zzl --添加到集合lind
SADD lind zhang 
SMEMBERS lind --獲取集合lind的列表

4,字符串,簡單字符

SET lind "一個人" --設置字符
GET lind --得到字符

5,哈希,用來存儲字符串對象,類型JSON串

HMSET lind name "zzl" description "一個人" --建立一個lind對象
HGETALL lind--得到這個lind對象所有內容(k/v)

6,發布/訂閱, pub/sub模式運行在redis進程中,不會被持久化過,進程掛了,信息丟失

SUBSCRIBE Lind --訂閱一個管道
PUBLISH Lind "你好,大叔!" --發布一個管道

7,事務,是一個單獨的隔離操作,事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷

redis 127.0.0.1:6379> MULTI --開始事務
redis 127.0.0.1:6379> SET lind "一個人"
QUEUED
redis 127.0.0.1:6379> GET lind
QUEUED
redis 127.0.0.1:6379> SADD lind_info "一個小人物"
QUEUED
redis 127.0.0.1:6379> SMEMBERS lind_info
QUEUED
redis 127.0.0.1:6379> EXEC
Redis的配置文件介紹

1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程

    daemonize no

2. 當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定

 pidfile /var/run/redis.pid

3. 指定Redis監聽端口,默認端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認端口,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字

  port 6379

4. 綁定的主機地址

bind 127.0.0.1

5.當 客戶端閑置多長時間后關閉連接,如果指定為0,表示關閉該功能

timeout 300

6. 指定日志記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose

loglevel verbose

7. 日志記錄方式,默認為標准輸出,如果配置Redis為守護進程方式運行,而這里又配置為日志記錄方式為標准輸出,則日志將會發送給/dev/null

logfile "/var/log/redis/redis.log"

8. 設置數據庫的數量,默認數據庫為0,可以使用SELECT <dbid>命令在連接上指定數據庫id

databases 16

9. 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

save <seconds> <changes>
    Redis默認配置文件中提供了三個條件:
    save 900 1
    save 300 10
    save 60 10000
    分別表示900秒(15分鍾)內有1個更改,300秒(5分鍾)內有10個更改以及60秒內有10000個更改。

10. 指定存儲至本地數據庫時是否壓縮數據,默認為yes,Redis采用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致數據庫文件變的巨大

rdbcompression yes

11. 指定本地數據庫文件名,默認值為dump.rdb

dbfilename dump.rdb

12. 指定本地數據庫存放目錄

dir ./

13. 設置當本機為slav服務時,設置master服務的IP地址及端口,在Redis啟動時,它會自動從master進行數據同步

slaveof <masterip> <masterport>

14. 當master服務設置了密碼保護時,slav服務連接master的密碼

masterauth <master-password>

15. 設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關閉

 requirepass foobared

16. 設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息

 maxclients 128

17. 指定Redis最大內存限制,Redis在啟動時會把數據加載到內存中,達到最大內存后,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 后,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區

 maxmemory <bytes>

18. 指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認為no

appendonly no

19. 指定更新日志文件名,默認為appendonly.aof

appendfilename appendonly.aof

20. 指定更新日志條件,共有3個可選值: 

    no:表示等操作系統進行數據緩存同步到磁盤(快) 
    always:表示每次更新操作后手動調用fsync()將數據寫到磁盤(慢,安全) 
    everysec:表示每秒同步一次(折衷,默認值)

    appendfsync everysec

 21. 指定是否啟用虛擬內存機制,默認值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中(在后面的文章我會仔細分析Redis的VM機制)

vm-enabled no

22. 虛擬內存文件路徑,默認值為/tmp/redis.swap,不可多個Redis實例共享

 vm-swap-file /tmp/redis.swap

23. 將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁盤。默認值為0

vm-max-memory 0

24. Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認值

vm-page-size 32

25. 設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。

vm-pages 134217728

26. 設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那么所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值為4

vm-max-threads 4

27. 設置在向客戶端應答時,是否把較小的包合並為一個包發送,默認為開啟

glueoutputbuf yes

28. 指定在超過一定的數量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默認為開啟(后面在介紹Redis的哈希算法時具體介紹)

activerehashing yes

30. 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

include /path/to/local.conf

yum安裝redis如下:

sudo yum-config-manager --enable epel
sudo yum install redis
# Start redis server
sudo redis-server /etc/redis.conf
## 或者下面的一條命令
yum --enablerepo=epel -y install redis

 添加到supervisor

[program:redis]
process_name=%(program_name)s
command=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 
autostart=true 
autorestart=true 
user=root
redirect_stderr=true 
stdout_logfile=/var/log/redis.log

 查看redis設置的最大內存

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "8589934592"

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM