写在前面的话

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. html转换成canvas

    使用的工具是:html2canvas html2canvas(this.currentRef) .then(async (canvas) => { let url = canvas.toData ...

  2. React: React组件的生命周期

    一.简介 在前面的第二篇博文中对组件的生命周期虽然做了一个大略介绍,但总感觉说的过于简单,毕竟生命周期是React组件的核心部分.在我们熟练使用React挂载和合成组件来创建应用表现层的过程中,针对数 ...

  3. JS调用MD5加密

    为了系统的安全,前端一般需要对密码进行MD5加密,然后传输给后台处理.MD5的英文是Message Digest Algorithm(信息摘要算法),是不可逆的算法,只能通过暴力破解,所以较为安全. ...

  4. (转)深入解析TensorFlow中滑动平均模型与代码实现

    本文链接:https://blog.csdn.net/m0_38106113/article/details/81542863 指数加权平均算法的原理 TensorFlow中的滑动平均模型使用的是滑动 ...

  5. Python中的常见特殊方法—— repr方法

    在Python中有些方法名.属性名的前后都添加了双下划线,这种方法.属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能.其实前面见过的构造方 ...

  6. Java每日一面(Part1:计算机网络)[19/10/13]

    作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.说说TCP三次握手 1.0 在此之前,什么是TCP? ​ TCP(传输控制协议) ​ 1.面向连接的,可靠的,基于字节流的传输层通信协议 ​ 2. ...

  7. linux中rpm和yum

    一.rpm介绍 一种用于互联网下载包的打包及安装工具.它生成具有.RPM 扩展名的文件.RPM 是 RedHat Package Manager(RedHat 软件包管理工具)的缩写,类似 windo ...

  8. CronExpression表达式详解和案例

    1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许 ...

  9. 松软科技web课堂:SQLServer之SUM() 函数

    SUM() 函数 SUM 函数返回数值列的总数(总额). SQL SUM() 语法 SELECT SUM(column_name) FROM table_name SQL SUM() 实例 我们拥有下 ...

  10. SQL Server 数据类型详解

    引言 SQL Server是我们日常工作中经常用到的数据库,也是商业系统运用最广泛的数据库之一.如何构建合理.高效.节省空间的数据库?是非常考验程序的基本功底,因为数据库是程序的根基,直接影响着系统效 ...