高速讀寫
數據類型豐富 (筆試、面試)*****
支持持久化 (筆試、面試)*****
多種內存分配及回收策略
支持事務 (面試) ****
消息隊列、消息訂閱
支持高可用 ****
支持分佈式分片集羣 (面試) *****
緩存穿透\雪崩(筆試、面試) *****
Redis API **mysql
優勢:高性能讀寫、單一數據類型、支持客戶端式分佈式集羣、一致性hash
多核結構、多線程讀寫性能高。
缺點:無持久化、節點故障可能出現緩存穿透、分佈式須要客戶端實現、跨機房數據同步困難、架構擴容複雜度
高面試
優勢:高性能讀寫、多數據類型支持、數據持久化、高可用架構、支持自定義虛擬內存、支持分佈式分片集羣、單線程讀寫性能極高
缺點:多線程讀寫較Memcached慢
新浪、京東、直播類平臺、網頁遊戲
memcache與redis在讀寫性能的對比redis
memcached 適合,多用戶訪問,每一個用戶少許的rw
redis 適合,少用戶訪問,每一個用戶大量rw sql
優勢:高性能讀寫、支持三種存儲引擎(ddb、rdb、ldb)、支持高可用、支持分佈式分片集羣、支撐了幾乎全部淘寶業務的緩存。
缺點:單機狀況下,讀寫性能較其餘兩種產品較慢數據庫
Memcached:多核的緩存服務,更加適合於多用戶併發訪問次數較少的應用場景vim
Redis:單核的緩存服務,單節點狀況下,更加適合於少許用戶,屢次訪問的應用場景。緩存
Redis通常是單機多實例架構,配合redis集羣出現。安全
-----------------------------------------------------------------------服務器
下載:
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
解壓:
上傳至 /data
tar xzf redis-3.2.12.tar.gz
mv redis-3.2.12 redis
安裝:
cd redis
make
啓動:
src/redis-server &多線程
環境變量:
vim /etc/profile
export PATH=/data/redis/src:$PATH
source /etc/profile
redis-server &
redis-cli
127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> get num
10
[root@standby ~]# redis-cli shutdown
mkdir /data/6379
cat >>/data/6379/redis.conf <<EOF
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF
重啓redis
redis-cli shutdown
redis-server /data/6379/redis.conf
netstat -lnp|grep 63
+++++++++++配置文件說明++++++++++++++
redis.conf
是否後臺運行:
daemonize yes
默認端口:
port 6379
日誌文件位置
logfile /var/log/redis.log
持久化文件存儲位置
dir /data/6379
RDB持久化數據文件:
dbfilename dump.rdb
+++++++++++++++++++++++++
redis-cli
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
redis-cli 客戶端命令經常使用參數說明
redis-cli 剛裝完,能夠在redis服務器上直接登陸redis
-p 6379 指定端口號
-h 指定連接地址
-a 指定連接密碼
redis-cli set num 10 ,無交互執行redis命令
cat /tmp/1.txt |redis-cli
[root@db01 ~]# redis-cli -h 10.0.0.51 -p 6379
10.0.0.51:6379>
-------------------------
redis默認開啓了保護模式,只容許本地迴環地址登陸並訪問數據庫。
禁止protected-mode
protected-mode yes/no (保護模式,是否只容許本地訪問)
----------------------
(1)Bind :指定IP進行監聽
echo "bind 10.0.0.200 127.0.0.1" >>/data/6379/redis.conf
(2)增長requirepass {password}
echo "requirepass 123" >>/data/6379/redis.conf
重啓redis
redis-cli shutdown
redis-server /data/6379/redis.conf
----------驗證-----
方法一:
[root@db03 ~]# redis-cli -a 123
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> exit
方法二:
[root@db03 ~]# redis-cli
127.0.0.1:6379> auth 123
OK
127.0.0.1:6379> set a b
CONFIG GET *
CONFIG GET requirepass
CONFIG SET requirepass 123
做用:能夠有效防止,在redis宕機後,緩存失效的問題.
RDB
AOF
RDB 持久化
能夠在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。
優勢:速度快,適合於用作備份,主從複製也是基於RDB持久化功能實現的。
缺點:會有數據丟失
rdb持久化核心配置參數:
vim /data/6379/redis.conf
dir /data/6379
dbfilename dump.rdb
save 900 1
save 300 10
save 60 10000
配置分別表示:
900秒(15分鐘)內有1個更改
300秒(5分鐘)內有10個更改
60秒內有10000個更改
----------
AOF 持久化(append-only log file)
記錄服務器執行的全部寫操做命令,並在服務器啓動時,經過從新執行這些命令來還原數據集。
AOF 文件中的命令所有以 Redis 協議的格式來保存,新命令會被追加到文件的末尾。
優勢:能夠最大程度保證數據不丟
缺點:日誌記錄量級比較大
-------------
AOF持久化配置
appendonly yes
appendfsync everysec
appendfsync always
appendfsync no
是否打開aof日誌功能
每1個命令,都當即同步到aof
每秒寫1次
寫入工做交給操做系統,由操做系統判斷緩衝區大小,統一寫入到aof.
vim /data/6379/redis.conf
appendonly yes
appendfsync everysec
面試: redis 持久化方式有哪些?有什麼區別?rdb:基於快照的持久化,速度更快,通常用做備份,主從複製也是依賴於rdb持久化功能aof:以追加的方式記錄redis操做日誌的文件。能夠最大程度的保證redis數據安全,相似於mysql的binlog