写在前面的话

redis 的各种架构搭建暂时就到这里,本文主要用于补充说明 Redis 的一些概念以及配置文件的相关信息。

常用词汇

缓存穿透:

类似热点数据存储 Redis 一样,对于非热点数据存储到后端 DB,当服务访问一个 Redis 不存在的 KEY,然后请求被交予后端的 DB,当请求量过大时,会导致后端 DB 挂掉。

解决办法:增大 KEY 的量,使用布隆过滤器将不存在的 KEY 过滤掉,访问到不存在的 KEY 时候,将 KEY 以空值存到缓存,并设置一个过期时间。

缓存雪崩:

大量的 KEY 设置了相同的过期时间,导致同一时间失效,造成 DB 瞬间请求变大,引起雪崩。

解决方法:过期时间可以加上一个随机时间值,使每个 KEY 过期时间错开。

缓存击穿:

一个 KEY,在过期时,同时有大量请求,这些请求会被交予 DB,造成 DB 压力剧增。

解决方案:访问之前,可以使用 SETNX 判断 KEY 是否存在。

基础配置说明

#################################################################################################
# Redis 配置文件说明:
#################################################################################################
# 启动命令:/data/services/redis/bin/redis-server /data/services/redis/conf/redis.conf &
# 监听端口:6379
# 服务密码:helloworld
################################################################################################# #################################################################################################
# 注释的不常用配置
#################################################################################################
# 引入其它配置或者模块
# include /path/to/local.conf
# loadmodule /path/to/my_module.so # 在使用socket作为连接的时候可以使用
# unixsocket /tmp/redis.sock
# unixsocketperm 700 # 系统日志设置
# syslog-enabled no
# syslog-ident redis
# syslog-facility local0 # 为了安全,可以将某些命令重命名
# rename-command CONFIG "" # 客户端最大并发数,默认0不限制
# maxclients 10000 # 指定Redis最大内存限制
# maxmemory <bytes> # 当达到最大内存的清除策略,默认不清除只是报错
# maxmemory-policy noeviction # 清除算法选择的样本数量
# maxmemory-samples 5 #################################################################################################
# 基础配置
#################################################################################################
# 保护模式,如果【yes】必须绑定IP或者设置密码
protected-mode yes # 绑定IP地址,多个使用空格隔开,全部可以使用0.0.0.0
bind 127.0.0.1 192.168.200.101 # 配置密码
requirepass helloworld # 运行端口
port 6379 # TCP已完成连接队列长度,一般大于/proc/sys/net/core/somaxconn,在高并发环境建议调大该值和系统somaxconn的值
tcp-backlog 2048 # 关闭空闲连接的时间,0为不关闭
timeout 0 # TCP保活策略,单位秒,Redis每300s检测一次客户端存活,如果没响应就关闭连接
tcp-keepalive 300 # 以守护进程运行
daemonize yes # 可以通过upstart和systemd来管理进程,no表示不需要
supervised no # PID文件
pidfile /data/services/redis/logs/redis-6379.pid # 日志级别
loglevel notice # 日志文件
logfile "/data/services/redis/logs/redis-6379.log" # 数据库数目,默认是0库
databases 16 # 启动显示logo
always-show-logo yes #################################################################################################
# RDB持久化配置
#################################################################################################
# 快照保存名字
dbfilename dump-6379.rdb # 快照保存目录
dir "/data/services/redis/data" # 持久化规则,15分钟一次变化,5分钟10次变化。1分钟10000次变化都会触发持久化
save 900 1
save 300 10
save 60 10000 # 如果开启RDB快照,如果持久化失败,Redis就会拒绝所有写请求
stop-writes-on-bgsave-error yes # 对于快照是否进行压缩
rdbcompression yes # 快照保存后是否进行数据校验
rdbchecksum yes #################################################################################################
# AOF持久化配置
#################################################################################################
# RDB持久化宕机可能丢失部分数据,AOF相当于MySQL binlog
appendonly yes # AOF持久化文件名称
appendfilename "appendonly-6379.aof" # 持久化策略always/no/always
appendfsync everysec # AOF重写或写入RDB时候会产生大量IO,此时AOF的fsync将阻塞很久,如果应用无法接受这种延迟则设置为yes,则rewrite期间不fsync
no-appendfsync-on-rewrite yes # 自动重写,当前AOF超过上一次重写时百分之多少触发重写
auto-aof-rewrite-percentage 100 # 最小达到多大才重写,避免很小的时候就重写
auto-aof-rewrite-min-size 64mb # AOF文件尾部可能不完整,redis启动时,数据载入。yes会自动修复,否则可能需要手动redis-check-aof
aof-load-truncated yes # 4.0 开始允许两种持久化混合
aof-use-rdb-preamble no #################################################################################################
# 主从配置
#################################################################################################
# 从库配置主库的IP端口
# slaveof <masterip> <masterport> # 主库有密码的时候配置密码
# masterauth <master-password> # 当slave与master断开或者正在同步的时候,设置yes返回的数据可能是旧的,设置no直接返回正在同步的错误
slave-serve-stale-data yes # 设置从库只读
slave-read-only yes # 主从是否使用无硬盘复制,即主不通过RDB文件直接传数据给从
repl-diskless-sync no # 选择无硬盘备份时,需要等待多久才传数据
repl-diskless-sync-delay 5 # 从向主周期性发送ping包时间
# repl-ping-slave-period 10 # 备份超时时间
# repl-timeout 60 # 是否禁用从的CTP_NODELAY,如果yes主从会有一点延时
repl-disable-tcp-nodelay no # 备份缓冲区,从库失联后会短暂的帮从库接受数据
# repl-backlog-size 1mb # 主多长时间没有和从连接就释放缓冲区
# repl-backlog-ttl 3600 # 从优先级,用于sentinel选主时使用,数字越小越高,但是0就不参与选举
slave-priority 100 # 主停止接受写请求,当从在线小于3个,滞后10秒时
# min-slaves-to-write 3
# min-slaves-max-lag 10 # Redis master能够通过不通方式列出从的地址和端口
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234 #################################################################################################
# 集群配置
#################################################################################################
# 集群开关
# cluster-enabled yes # 集群配置文件名称,每个集群都有一个集群配置相关文件用于持久化保存集群信息。Redis 自动生成
# cluster-config-file nodes-6379.conf # 节点连接超时毫秒数
# cluster-node-timeout 15000 # 判断slave是否和master断开连接过长而导致数据过旧,这种节点旧不会倍选为主
# cluster-slave-validity-factor 10 # slave数量大于该值,slave才能迁移到其它孤立的master
# cluster-migration-barrier 1 # 默认所有节点的切片都正常集权状态才是OK
# cluster-require-full-coverage yes
# cluster-slave-no-failover no

启动脚本模板

#!/bin/sh

#################################################################################################
# 用途:Redis 启停脚本
# 作者:Dylan<1214966109@qq.com>
# 时间:2019/11/12
################################################################################################# #################################################################################################
# 系统变量
#################################################################################################
# REDIS 安装目录
REDIS_HOME='/data/services/redis' # 启动端口
REDIS_PORT=6379 # 启动服务端命令
SERVER_CMD="${REDIS_HOME}/bin/redis-server" # 客户端命令
CLIENT_CMD="${REDIS_HOME}/bin/redis-cli" # PID 文件
PID_FILE="${REDIS_HOME}/logs/redis-${REDIS_PORT}.pid" # 配置文件
REDIS_CONF="${REDIS_HOME}/conf/redis-${REDIS_PORT}.conf" # 导入结果检测
. /etc/rc.d/init.d/functions #################################################################################################
# 启动函数
#################################################################################################
FUNC_REDIS_START() {
if [ -f ${PID_FILE} ];then
action "Redis is running,file ${PID_FILE} is exists!" /bin/false
else
${SERVER_CMD} ${REDIS_CONF} &
if [ $? -eq 0 ];then
action "Starting Redis server ..." /bin/true
else
action "Starting Redis server ..." /bin/false
fi
fi
} #################################################################################################
# 停止函数
#################################################################################################
FUNC_REDIS_STOP() {
if [ ! -f ${PID_FILE} ];then
action "${PID_FILE} does not exist, process is not running!" /bin/false
else
PID=$(cat ${PID_FILE})
${CLIENT_CMD} -p ${REDIS_PORT} shutdown
while [ -x /proc/${PID} ];do
echo "Waiting for Redis to shutdown ..."
sleep 2
done
action "Redis stopped" /bin/true
fi
} #################################################################################################
# 状态函数
#################################################################################################
FUNC_REDIS_STATUS() {
if [ -f ${PID_FILE} ];then
echo "Redis server is running!"
else
echo "Redis is stopped!"
fi
} #################################################################################################
# 重启函数
#################################################################################################
FUNC_REDIS_RESTART() {
FUNC_REDIS_STOP
sleep 3
FUNC_REDIS_START
} #################################################################################################
# 执行入口
#################################################################################################
case "$1" in
start)
FUNC_REDIS_START
;;
stop)
FUNC_REDIS_STOP
;;
status)
FUNC_REDIS_STATUS
;;
restart)
FUNC_REDIS_RESTART
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
;;
esac

Redis for OPS 07:Redis 补充说明的更多相关文章

  1. Redis for OPS 06:Redis Cluster 集群

    写在前面的话 前面的主从,HA 都只是解决我们数据安全性方面的问题,并没有解决我们业务瓶颈的问题.当业务并发到达一定瓶颈的时候,我们需要对服务进行横向扩展,而不是纵向扩展.这就需要引入另外一个东西,R ...

  2. Redis for OPS 01:关于 Redis 基础说明与安装部署

    写在前面的话 本章节开始在主要介绍在运维工作中绕不开的一个话题,数据缓存 NoSQL 服务 Redis,搭建很简单,使用很简单,运行也稳定的一批,一般小公司几乎很少出现以为量的问题导致他 down 掉 ...

  3. 初识redis——mac下搭建redis环境

    一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...

  4. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  5. [Redis] windows下安装 Redis

    一:Redis是什么? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 通过https://github.c ...

  6. Windows Redis默认配置文件,Redis配置不生效解决方案

    Windows Redis默认配置文件,Redis配置不生效解决方案, Windows Redis自启动配置不生效解决方案,Windows Redis增加自动启动服务 >>>> ...

  7. Ubuntu18---安装Redis和简单使用Redis

    前言 Redis是常用基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速.用Redis可以很轻松解决高并发的数据访问问题:作为实时监控信号处理也非常不错. 环境 ...

  8. Redis(十九):Redis压力测试工具benchmark

    redis-benchmark使用参数介绍 Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求. (类似于 Apache ab 程序).你可以使用 ...

  9. Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)

    Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...

随机推荐

  1. http并发访问模型(2)

    目录 http并发 并发访问模型 响应流程 从IO的角度看待响应 从函数的角度看待响应 日志处理 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网 ...

  2. IT兄弟连 HTML5教程 HTML5表单 小结及习题

    小结 HTML表单提交的方法有get方法和post方法,get方法的作用是从指定的资源请求数据,post方法的作用是向指定的资源提交要被处理的数据.HTML表单一直都是Web的核心技术之一,有了它我们 ...

  3. centos7编译安装Zabbix-4.2.4及设置邮件告警教程(超详细每步都有截图)

    Zabbix-4.2.4安装及配置 此安装基于centos7的LNMP环境下,如未安装LNMP还可参考本人其他随笔 第一步:上传下载 1.前往https://www.zabbix.com/downlo ...

  4. 启动jar包并生成日志的linux脚本

    启动脚本 nohup java -Xms300m -Xmx300m -jar $1 >log/$2 2>&1 & 使用方式 建立一个.sh结尾的脚本,里面放入此代码. 需要 ...

  5. 利用 chunked 类型响应实现后台请求的监听

    Koa 中实现 chunked 数据传输 中介绍了如何在 Koa 中实现 Transfer-Encoding:chunked 类型的响应分片传输.这里来看一个应用场景. 假如我们想监听后台的请求,并将 ...

  6. MyBatis框架之第二篇

    1.高级参数映射和返回值映射(重点) a)Pojo包装pojo的参数映射 b)当结果集列名与pojo属性名不一致的返回值映射 2.动态sql(重点) 3.关联查询结果(重点) a)一对一关联结果 b) ...

  7. IDEA 2019.2版本下载安装与PJ教程

    场景 IDEA版本过低的话会导致某些IDEA插件没法安装,比如Lombok插件和EasyCode插件等. 实现 双击exe安装包 点击Next 选择安装路径,点击Next 设置桌面快捷方式,增加到右键 ...

  8. Scrapy的下载中间件

    下载中间件 简介 下载器,无法执行js代码,本身不支持代理 下载中间件用来hooks进Scrapy的request/response处理过程的框架,一个轻量级的底层系统,用来全局修改scrapy的re ...

  9. Linux方案级ROM/RAM优化记录

    关键词:readelf.bloat-o-meter.graph-size.totalram_pages.reserved.meminfo.PSS.procrank.maps等等. 根据项目的需求,进行 ...

  10. SpringCloud学习笔记(二、SpringCloud Config)

    目录: 配置中心简介 SpringCloud Config服务端 SpringCloud Config客户端 动态配置属性bean 一些补充(源码分析):Spring事件监听.健康检查health() ...