redis数据库缓存服务
第一章 缓存服务1.1 作用redis是一款非关系型的数据库, 他的数据存储形式键值对结构, 通过内存存储关系型数据库数据的形式, 减少后端数据库服务器的压力1.2 工作原理缓存服务器有请求数据:web服务器接收请求, 之后将请求交给缓存服务器, 由缓存直接返回数据即可缓存服务器没有请求数据:若访问缓存服务器后没有数据, 这时web服务器会访问关系型数据库, 之后web服务器会先将结果保存到缓存服务器, 保存完成后, web服务器才会对客户端进行响应第二章 redis2.1 redis的特点支持多种数据结构支持数据的持久化支持事务支持主从集群2.2 redis数据持久化的方式2.2.1 RDB原理: redis会启动子进程, 将所有数据写入磁盘文件中, 是一次全量备份注意:启动子进程后, 原redis进程的工作并不影响2.2.2 AOF原理: 将redis每秒中的执行的写指令记录在日志当中2.3 redis主从集群2.3.1 主从集群同步原理全量同步: 从服务器会向主服务器发起同步指令, 之后主服务器调用bgsave指令来创建支持数据持久化的进程, 之后该进程会将所有的写操作写入到复制缓冲区当中, 当主服务器完成持久化工作后, 会将该文件发送给从服务器增量同步: 完成全量同步后, 主节点会将执行的所有写命令同步到复制积压缓冲区, 并记录偏移量, 之后从节点每秒都会向主服务发送同步确认偏移量, 来告知从服务器的同步进度, 主服务器接收到该偏移量后, 会将自身的偏移量与从服务器的偏移量进行比较, 之后在将复制积压缓冲区中未同步的数据发送给从服务进行同步注意:redis主从集群中, 主服务器可以关闭数据的持久化, 提升主服务器的性能2.4 哨兵机制作用: 通过检测主服务器的状态, 若主服务器挂掉, 会在从服务器中选举出主服务器, 保证数据的服务高可用性原理: 每个sentinel(哨兵)每秒都会向他所知的主服务器发送ping指令, 若主服务的回复时间超过设定的超时时间, 会将主服务器标记为主观下线, 这时若集群中足够多的哨兵将主服务器标记为主观下线, 那么主服务的下线就变为了客观下线, 这是就会在集群中选举出新的主服务器注意:主观下线: 当前哨兵将主服务器标记为下线客观下线: 多个哨兵将主服务器标记为下线第三章 部署redis3.1 单机部署安装redistar -zxvf redis-4.0.9.tar.gz -C /usr/localmv /usr/local/redis-4.0.9 /usr/local/rediscd /usr/local/redis#编译安装make配置开机启动mkdir /etc/rediscp /usr/local/redis/redis.conf /etc/redis/6379.confcp /usr/local/redis/utils/redis_init_script /etc/init.d/redis#配置redis的服务启动与关闭vim /etc/init.d/redis#chkconfig: 2345 10 90#description: start and top redis#redis端口REDSIPORT6379#服务启动文件路径EXEC/usr/local/redis/bin/redis-server#客户端启动文件路径CLIEXEC/usr/local/redis/erc/redis-cli#进程文件PIDFILE/var/run/redis_REDISPORT.pidCONF/etc/redis/{REDISPORT}.pid CONF/etc/redis/REDISPORT.pidCONF/etc/redis/{REDISPORT}.confcase “$1” instart)if [ -fPIDFILE]thenechoPIDFILE ] then echo PIDFILE]thenechoPIDFILE exists, process is already running or crashedelseecho “Starting Redis server…”#将进程在后台运行$EXEC $CONF fi ;;stop)if [ ! -fPIDFILE]thenechoPIDFILE ] then echo PIDFILE]thenechoPIDFILE does not exist, process is not runningelsePID$(cat $PIDFILE)echo “Stopping …”$CLIEXEC -pREDISPORTshutdownwhile[−x/proc/REDISPORT shutdown while [ -x /proc/REDISPORTshutdownwhile[−x/proc/{PID} ]doecho “Waiting for Redis to shutdown …”sleep 1doneecho “Redis stopped”fi;;*)echo “Please use start or stop as first argument”;;esac#授权chmod ax /etc/init.d/redis#增加开启启动项chkconfig --add redis#设置开机自启chkconfig redis onsystemctl daemon-reload#启动服务systemctl start redis测试/usr/local/redis/src/redis-cliset name zsget name3.2 搭建redis主从集群环境192.168.255.130: 主192.168.255.132: 从192.168.255.133: 从安装并配置服务管理tar -zxvf redis-4.0.9.tar.gz -C /usr/localmv /usr/local/redis-4.0.9 /usr/local/rediscd /usr/local/redis#编译安装make#配置服务管理mkdir /etc/rediscp /usr/local/redis/redis.conf /etc/redis/6379.confcp /usr/local/redis/utils/redis_init_script /etc/init.d/redis#配置redis的服务启动与关闭vim /etc/init.d/redis#chkconfig: 2345 10 90#description: start and top redis#redis端口REDSIPORT6379#服务启动文件路径EXEC/usr/local/redis/bin/redis-server#客户端启动文件路径CLIEXEC/usr/local/redis/erc/redis-cli#进程文件PIDFILE/var/run/redis_REDISPORT.pidCONF/etc/redis/{REDISPORT}.pid CONF/etc/redis/REDISPORT.pidCONF/etc/redis/{REDISPORT}.confcase “$1” instart)if [ -fPIDFILE]thenechoPIDFILE ] then echo PIDFILE]thenechoPIDFILE exists, process is already running or crashedelseecho “Starting Redis server…”#将进程在后台运行$EXEC $CONF fi ;;stop)if [ ! -fPIDFILE]thenechoPIDFILE ] then echo PIDFILE]thenechoPIDFILE does not exist, process is not runningelsePID$(cat $PIDFILE)echo “Stopping …”$CLIEXEC -pREDISPORTshutdownwhile[−x/proc/REDISPORT shutdown while [ -x /proc/REDISPORTshutdownwhile[−x/proc/{PID} ]doecho “Waiting for Redis to shutdown …”sleep 1doneecho “Redis stopped”fi;;*)echo “Please use start or stop as first argument”;;esac#授权chmod ax /etc/init.d/redis#增加开启启动项chkconfig --add redis#设置开机自启chkconfig redis onsystemctl daemon-reload#启动服务systemctl start redis配置主服务130vim /etc/redis/6379.conf#本机任意网卡都可接收请求bind 0.0.0.0#关闭保护模式protected-mode no#重启服务systemctl start redis配置从服务132, 133vim /etc/redis/6379.conf#声明主节点slaveof 192.168.255.130 6379bind 0.0.0.0protected-mode nosystemctl start redis测试#主服务器更新数据set sex mm#从服务器查看数据get mm3.3 配置哨兵模式延续上述集群配置, 开启哨兵模式: 130, 131, 132vim /usr/local/redis/sentinel.conf#当集群中有两个sentinel认为主服务挂掉, 才能判定主服务真的挂了sentinel monitor mymaster 192.168.255.130 6379 2#主服务器的应答超时时间, 若超过3000毫秒, 主服务没有回复, 哨兵会认为主服务为主观下线sentinel down-after-milliseconds mymaster 3000#若10秒内没有完成主服务的故障转移, 则认为本次转移失败sentinel failover-timeout mymaster 10000protected-mode no启动哨兵机制: 130, 132, 133cd /usr/local/redis./src/redis-sentinel sentinel.conf查看集群状态info replication#关闭主服务systemctl stop redis#查看集群选举信息info replication