redis基礎

一:簡介

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

 
Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了 memcached這類key/value存儲的不足,在部 分場合能夠對關係數據庫起到很好的補充做用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。  [1] 
 
Redis支持主從同步。數據能夠從主服務器向任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器。這使得Redis可執行單層樹複製。存盤能夠有意無心的對數據進行寫操做。因爲徹底實現了發佈/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發佈記錄。同步對讀取操做的可擴展性和數據冗餘頗有幫助。
redis的官網地址,很是好記,是redis.io。(特地查了一下,域名後綴io屬於國家域名,是british Indian Ocean territory,即英屬印度洋領地)

1.1存儲

redis使用了兩種 文件格式:全量數據和增量請求。
全量數據格式是把內存中的數據寫入磁盤,便於下次讀取文件進行加載;
增量請求文件則是把內存中的數據序列化爲操做請求,用於讀取文件進行replay獲得數據,序列化的操做包括SET、RPUSH、SADD、ZADD。
redis的存儲分爲內存存儲、 磁盤存儲和log文件三部分,配置文件中有三個參數對其進行配置。
save seconds updates,save配置,指出在多長時間內,有多少次更新操做,就將 數據同步到數據文件。這個能夠多個條件配合,好比默認配置文件中的設置,就設置了三個條件。
appendonly yes/no ,appendonly配置,指出是否在每次更新操做後進行日誌記錄,若是不開啓,可能會在斷電時致使一段時間內的數據丟失。由於redis自己同步數據文件是按上面的save條件來同步的,因此有的數據會在一段時間內只存在於內存中。
appendfsync no/always/everysec ,appendfsync配置,no表示等 操做系統進行 數據緩存同步到磁盤,always表示每次更新操做後手動調用fsync()將數據寫到磁盤,everysec表示每秒同步一次。
1.不適用操做系統提供的內存分配機制
2.在啓動時,一次性向操做系統申請一部份內存區域

1.1.2 軟件獲取和幫助

官方網站:https://redis.ioweb

官方各版本下載地址:http://download.redis.io/releases/redis

Redis 中文命令參考:http://redisdoc.comdocker

中文網站1:http://redis.cn數據庫

中文網站2:http://www.redis.net.cnvim

 

1.13功能特性

• 高速讀寫緩存

• 數據類型豐富安全

• 支持持久化服務器

• 多種內存分配及回收策略多線程

• 支持事務

• 消息隊列、消息訂閱

• 支持高可用

• 支持分佈式分片集羣

1.14企業緩存數據庫解決方案對比

Memcached: 優勢:高性能讀寫、單一數據類型、支持客戶端式分佈式集羣、一致性hash 多核結構、多線程讀寫性能高。 缺點:無持久化、節點故障可能出現緩存穿透、分佈式須要客戶端實現、跨 機房數據同步困難、架構擴容複雜度高

 

Redis: 優勢:高性能讀寫、多數據類型支持、數據持久化、高可用架構、支持自定 義虛擬內存、支持分佈式分片集羣、單線程讀寫性能極高 缺點:多線程讀寫較Memcached慢

 

Tair: 優勢:高性能讀寫、支持三種存儲引擎(ddb、rdb、ldb)、支持高可用、 支持分佈式分片集羣、支撐了幾乎全部淘寶業務的緩存。 缺點:單機狀況下,讀寫性能較其餘兩種產品較慢

1.15Redis應用場景

• 數據高速緩存

• web會話緩存(Session Cache)

• 排行榜應用

• 消息隊列

• 發佈訂閱等

二:安裝

環境檢查

[root@docker1 local]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@docker1 local]# uname -r
3.10.0-862.2.3.el7.x86_642018-05-17

 
下載,解壓,編譯:
cd /user/local
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
因爲makefile文件已經寫好,咱們只須要直接在源碼目錄執行make命令進行編譯便可:
$ make
make命令執行完成後,會在當前目錄下的下級目錄src中生成本個 可執行文件,分別是redis-server、redis-cli、redis-benchmark,它們的做用以下:
redis-server:Redis服務器的daemon啓動程序
redis-cli:Redis命令行操做工具。固然,你也能夠用telnet根據其純文本協議來操做
redis-benchmark:Redis 性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能
 
創建軟鏈接 ln -s /user/local/redis-4.0.9 /user/local/redis    把/user/local/redis指向/usr/local/redis-4.0.9
redis -> /usr/local/redis-4.0.9
  至此服務配置完成
 

2.2客戶端鏈接

二進制文件是編譯完成後在src目錄下,經過下面的命令啓動Redis服務:
cd /usr/local/redis/src
$ ./redis-server    ##啓動redis
你可使用內置的客戶端命令redis-cli進行使用:

[root@docker1 src]# ./redis-cli

127.0.0.1:6379> set foo ba
OK
127.0.0.1:6379> get foo
"ba"
127.0.0.1:6379>

2.3編寫配置文件

2.31精簡化配置文件

[root@docker1 ~]# cd /usr/local/redis

[root@docker1 redis]# cp redis.conf{,.bak}

[root@docker1 redis]# grep -Ev '^$|#' redis.conf.bak > redis.conf

[root@docker1 redis]# cp redis.conf /etc/

2.32編輯配置文件

vim /etc/redis.conf

bind 127.0.0.1
protected-mode yes
port 6379                                  ##默認端口
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no                           ##是否後臺運行
supervised no
pidfile /var/run/redis_6379.pid
appendonly no/yes  AOF         ##日誌開關是否打開:
logfile /var/log/redis.log            ##日誌文件位置
dbfilename dump.rdb               ##RDB持久化數據文件:
requirepass 'passwd'               ##添加密碼訪問
https://www.cnblogs.com/zhang-ke/p/5981108.html    配置文件詳細說明

 

2.42Redis安全配置

• Bind 指定IP進行監聽 bind ip1 ip2 ip3 ip4

• 禁止protected-mode protected-mode yes/no (保護模式,是否只容許本地訪問)

• 增長requirepass {password}

requirepass root

• 在redis-cli中使用 auth {password} 進行認證

2.43編寫啓動腳本

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: - 85 15
REDISPORT=6379
EXEC=/usr/local/src/redis-server
CLIEXEC=/usr/local/src/redis-cli

PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/redis.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    status)
    if [ -f $PIDFILE ]
    then
        echo "redis server is running....."
    else
        echo "redis is stopped"
    fi
    ;;
    *)
        echo "Please use start or stop or status"
        ;;
esac
View Code redis啓動腳本

 2.5 redis多實例

注意:本次多實例配置基於單實例配置完成後

啓動三個redis多實例

mkdir /data/redis

mkdir 6380 6381 6382

複製redis的啓動文件到不一樣的redis實例中

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6380

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6381

[root@docker1 redis]# cp /usr/local/redis/src/redis-server /data/redis/6382

複製redis配置文件到不一樣的redis實例中

[root@docker1 redis]# cp /etc/redis.conf /data/redis/6380
[root@docker1 redis]# cp /etc/redis.conf /data/redis/6381
[root@docker1 redis]# cp /etc/redis.conf /data/redis/6382

修改不一樣redis實例的配置文件

    # 修改程序存儲目錄
    sed -i  "/dir/s#.*#dir /application/redis/6380/#g" /data/redis/6380/redis.conf 
    # 修改其餘端口信息
    sed -i  "s#6379#6380#g" /data/redis/6380/redis.conf
    #容許遠程鏈接redis
sed -i '/protected-mode/s#yes#no#g' /data/redis/6380/redis.conf
啓動多實例
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6380/redis.conf 
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6381/redis.conf 
[root@docker1 6380]# /data/redis/6380/redis-server /data/redis/6382/redis.conf 

複製redis啓動文件到/usr/bin下,這樣就能夠在任意目錄直接執行redis-cli鏈接客戶端了

[root@docker1 ~]# cp /usr/local/redis/src/redis-cli /usr/bin/
[root@docker1 ~]# redis-cli
127.0.0.1:6379>

至此:服務配置完成 

相關文章
相關標籤/搜索