redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。html
官方網站:https://redis.ioweb
官方各版本下載地址:http://download.redis.io/releases/redis
Redis 中文命令參考:http://redisdoc.comdocker
中文網站1:http://redis.cn數據庫
中文網站2:http://www.redis.net.cnvim
• 高速讀寫緩存
• 數據類型豐富安全
• 支持持久化服務器
• 多種內存分配及回收策略多線程
• 支持事務
• 消息隊列、消息訂閱
• 支持高可用
• 支持分佈式分片集羣
• Memcached: 優勢:高性能讀寫、單一數據類型、支持客戶端式分佈式集羣、一致性hash 多核結構、多線程讀寫性能高。 缺點:無持久化、節點故障可能出現緩存穿透、分佈式須要客戶端實現、跨 機房數據同步困難、架構擴容複雜度高
• Redis: 優勢:高性能讀寫、多數據類型支持、數據持久化、高可用架構、支持自定 義虛擬內存、支持分佈式分片集羣、單線程讀寫性能極高 缺點:多線程讀寫較Memcached慢
• Tair: 優勢:高性能讀寫、支持三種存儲引擎(ddb、rdb、ldb)、支持高可用、 支持分佈式分片集羣、支撐了幾乎全部淘寶業務的緩存。 缺點:單機狀況下,讀寫性能較其餘兩種產品較慢
• 數據高速緩存
• 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
[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.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
https://www.cnblogs.com/zhang-ke/p/5981108.html 配置文件詳細說明
• Bind 指定IP進行監聽 bind ip1 ip2 ip3 ip4
• 禁止protected-mode protected-mode yes/no (保護模式,是否只容許本地訪問)
• 增長requirepass {password}
requirepass root
• 在redis-cli中使用 auth {password} 進行認證
#!/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
注意:本次多實例配置基於單實例配置完成後
啓動三個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>
至此:服務配置完成