Redis的編譯安裝

介紹

    redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

編譯安裝

下載redis

############目前最新穩定版##########
[root@redis ~]# wget http://download.redis.io/releases/redis-2.8.19.tar.gz

解壓縮redis

[root@redis ~]# tar xzf redis-2.8.19.tar.gz

編譯redis

redis的編譯非常簡單,已經有現成的Makefile文件,直接運行make命令即可

[root@redis redis-2.8.19]# cd redis-2.8.19
[root@redis redis-2.8.19]# make

make命令執行完成后,會在src目錄下生成6個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump、redis-sentinel,它們的作用如下:

redis-server:               Redis服務器的daemon啟動程序
redis-cli:                  Redis命令行操作工具。當然,你也可以用telnet根據其純文本協議來操作
redis-benchmark:            Redis性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能
redis-check-aof:            更新日志檢查
redis-check-dump:           用于本地數據庫檢查
redis-sentinel:             Redis實例的監控管理、通知和實例失效備援服務,是Redis集群的管理工具

安裝redis

[root@redis src]# make install

配置redis的配置文件

[root@redis redis-2.8.19]# cp redis.conf /etc/
##########編輯Redis配置文件###################
[root@redis redis-2.8.19]# vim /etc/redis.conf
    daemonize yes                       #37行      #是否以后臺daemon方式運行,默認不是后臺運行
    pidfile /var/run/redis/redis.pid    #41行      #redis的PID文件路徑
    bind 10.168.85.25                   #64行      #綁定主機IP,默認值為127.0.0.1,我們是跨機器運行,所以需要更改
    logfile /var/log/redis/redis.log    #104行     #定義log文件位置,模式log信息定向到stdout,輸出到/dev/null
   save 60 1000                         #145行     #重新定義快照的頻率
    dir /usr/local/rdbfile              #188行     #本地數據庫存放路徑,默認為./,編譯安裝默認存在在/usr/local/bin下

啟動測試Redis服務器

#############啟動Redis服務器############
[root@redis redis-2.8.19]# redis-server /etc/redis.conf
#############查看是否啟動成功###########
[root@redis redis-2.8.19]# ss -tanlp | grep redis
LISTEN     0      128            10.168.85.25:6379                     *:*      users:(("redis-server",17379,4))
#############測試Redis##################
[root@redis redis-2.8.19]# redis-cli -h 10.168.85.25 -p 6379
10.168.85.25:6379> set test hello
OK
10.168.85.25:6379> get test
"hello"

更改內核信息

#############查看日志信息###############
[root@redis redis-2.8.19]# tail -f /var/log/redis/redis.log
[5033] 04 Jan 15:47:05.378 # Server started, Redis version 2.8.19
[5033] 04 Jan 15:47:05.379 # 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.
[5033] 04 Jan 15:47:05.379 # 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.
[5033] 04 Jan 15:47:05.380 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
[5033] 04 Jan 15:47:05.380 * DB loaded from disk: 0.000 seconds
[5033] 04 Jan 15:47:05.380 * The server is now ready to accept connections on port 6379
日志顯示有兩個關于內核設置的警告信息!
##############sysctl文件###############
[root@redis ~]# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
[root@redis ~]# sysctl -p
#############kerbel####################
[root@redis ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled

重新啟動Redis服務器

#######將緩存保存到硬盤上#####
[root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 BGSAVE
Background saving started
#######關閉Redis#############
[root@redis ~]# redis-cli -h 10.168.85.25 -p 6379 SHUTDOWN
########啟動Redis############
[root@redis ~]# redis-server /etc/redis.conf

編輯Redis啟動腳本

[root@redis ~]# vi /etc/init.d/redis
#!/bin/sh
#
# redis        init file for starting up the redis daemon
#
# chkconfig:   - 20 80
# description: Starts and stops the redis daemon.
# Source function library.
. /etc/rc.d/init.d/functions
name="redis-server"
exec="/usr/local/bin/$name"                                   # 指定redis-server命令的位置(whereis redis-server)
pidfile="/var/run/redis/redis.pid"                            # 指定redis的pid文件路徑(和配置文件里保持一致)
REDIS_CONFIG="/etc/redis.conf"                                # 指定redis的配置文件路徑
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
    [ -f $REDIS_CONFIG ] || exit 6
    [ -x $exec ] || exit 5
    echo -n $"Starting $name: "
    daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $name: "
    killproc -p $pidfile $name
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    stop
    start
}
reload() {
    false
}
rh_status() {
    status -p $pidfile $name
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
        exit 2
esac
exit $?
[root@redis ~]# chmod 700 /etc/init.d/redis
[root@redis ~]# servcie redis restart

附加信息

Redis無法編譯安裝報錯處理?

###########make時錯誤信息#########
[root@redis redis-2.8.19]# make
cd src && make all
make[1]: Entering directory `/root/redis-2.8.19/src'
    CC adlist.o
In file included from adlist.c:34:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/root/redis-2.8.19/src'
make: *** [all] Error 2
############解決方法#############
make MALLOC=libc

vm.overcommit_memory參數解析

如果內存情況比較緊張的話,需要設定內核參數overcommit_memory,指定內核針對內存分配的策略,其值可以是0、1、2。
0,表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,并把錯誤返回給應用進程。     
1,表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2,表示內核允許分配超過所有物理內存和交換空間總和的內存Redis在dump數據的時候,會fork出一個子進程,理論上child進程所占用的內存和parent是一樣的,比如parent占用的內存為 8G,這個時候也要同樣分配8G的內存給child, 如果內存無法負擔,往往會造成redis服務器的down機或者IO負載過高,效率下降。所以這里比較優化的內存分配策略應該設置為 1(表示內核允許分配所有的物理內存,而不管當前的內存狀態如何)。
設置方式有兩種,需確定當前用戶的權限活使用root用戶修改:
1:重設文件echo 1 > /proc/sys/vm/overcommit_memory(默認為0)
2:echo "vm.overcommit_memory=1" >> /etc/sysctl.conf  && sysctl -p

BGSAVE參數解析

在后臺異步(Asynchronously)保存當前數據庫的數據到磁盤。
BGSAVE 命令執行之后立即返回 OK ,然后 Redis fork 出一個新子進程,原來的 Redis 進程(父進程)繼續處理客戶端請求,而子進程則負責將數據保存到磁盤,然后退出。
客戶端可以通過 LASTSAVE 命令查看相關信息,判斷 BGSAVE 命令是否執行成功。
請移步 持久化文檔 查看更多相關細節。
可用版本:>= 1.0.0時間復雜度:O(N), N 為要保存到數據庫中的 key 的數量。返回值:反饋信息。
redis> BGSAVE
Background saving started

原創文章,作者:ZhaoYong,如若轉載,請注明出處:http://www.www58058.com/536

(0)
ZhaoYongZhaoYong
上一篇 2015-02-27 14:08
下一篇 2015-02-28 11:36

相關推薦

  • 用戶和用戶組相關的配置文件

    用戶和用戶組相關的配置文件 一、與用戶相關的配置文件 一般來說,與用戶配置相關的幾個文件如下: l  /etc/passwd: 最重要的文件,存儲著用戶的用戶名,UID,Shell等信息 l  /etc/shadow: 用戶密碼文件,使用sha-1算法加密存儲(注意該文件的權限) l  /etc/skel/: 用戶的模板文件,新…

    Linux干貨 2016-10-23
  • N22-℡浮生.若夢 ╮第八周作業

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器:集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離 網橋:是早期的兩端口二層網絡設備,用來連接不同網段。網橋的兩個端口分別有一條獨立的交換信道,       不是共享一條背板總線,可隔離沖突域…

    Linux干貨 2016-11-28
  • Linux下LVM

    LVM(Logic Volume Management,邏輯卷管理         由多個塊設備(pv,卷)組成一個邏輯卷組(vg),接著在邏輯組上創建邏輯卷(lv),實現在線縮減邏輯卷與邏輯卷組。 實驗:     1、VM虛擬機添加硬盤:…

    Linux干貨 2016-06-09
  • N23-卡卡琦-第二周

    1、文件管理類命令 常規命令:copy、mv、rm (1).copy 文件復制 用法: 注意:復制文件只是復制文件的數據而不是元數據,但是可以保留元數據的信息。 單源復制:目錄是否存在都可以 多源復制:目錄必須是存在的 -i:提醒用戶操作確認(交互式) -f:強行覆蓋 -r:遞歸復制目錄 -p:保留源數據 -a:用于實現歸檔,做備份 -d:不跟蹤符號鏈接所指…

    Linux干貨 2016-12-11
  • 軟件包管理

    一、軟件管理程序rpm 簡介:RPM是通過預編譯并打包成為RPM文件格式后再加以安裝的一種方式,并且還能夠進行數據庫的記載。 1、優點:     1、RPM內含已經編譯過的程序與設置文件等數據,可以讓用戶免除重新編譯的困擾;     2、RPM在被安裝之前,會先檢查系統的硬盤容量…

    Linux干貨 2016-08-24
  • 什么是Ansible?

    自動化工具——ansible   ansibleArchitecture ansibleProject 1. 什么是ansible ansible是個什么東西呢?官方的title是“Ansible is Simple IT Automation”——簡單的自動化IT工具。這個工具的目標有這么幾項:讓我們自動化部署APP;自動化管理配置項;自動化的持…

    2017-09-24
欧美性久久久久