Linux下Redis的編譯安裝

來源:互聯網
上載者:User

Linux下Redis的編譯安裝

介紹

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

Linux下編譯安裝

下載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

Ubuntu 14.04下Redis安裝及簡單測試

Redis叢集明細文檔

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis串連Redis

Redis系列-安裝部署維護篇

CentOS 6.3安裝Redis

Redis安裝部署學習筆記

Redis設定檔redis.conf 詳解

Redis 的詳細介紹:請點這裡
Redis 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.