背景
背景:
随着数据量,业务量的增大,mysql单机时代架构已经满足不了
分布式数据库,数据库集群技术也没法解决
而其中的 个人信息,社交网络,地理位置等数据其实不需要固定格式
redis 就很适合
定义
C语言编写
基于内存亦可持久化
key-value 数据库
适用场景
适用场景:
告诉缓存
消息排行榜
地图信息分析
计数器(浏览量)
简易消息队列系统(发布订阅)
特性
多样数据类型
持久化
事务
集群
springboot整合redis
springboot1.0 默认采用 jedis实现
springboot2.0 默认采用 lettuce实现
jedis:采用的直连,多个线程操作的话是不安全的,如果想要避免,需要使用 jedis pool连接池解决 bio模式
letture:采用netty,实例可以在多个线程间共享,不存在线程不安全的现象 nio模式
redisTemplate
redis.conf
网络配置
bind 127.0.0.1 绑定ip
protected-mode yes 是否开启保护模式(一般开)
port 6379 端口设置
通用配置
daemonize yes 以后台方式开启,(默认是no,需要开启)
pidfile /var/run/redis_6379.pid 如果后台运行,需要制定pid进程文件
日志
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing) 测试
# verbose (many rarely useful info, but not a mess like the debug level) 一般不用
# notice (moderately verbose, what you want in production probably) 生产
# warning (only very important / critical messages are logged)
loglevel notice
logfile "" 日志文件名 + 路径
databases 16 数据库个数
always-show-logo yes 是否显示启动 logo
快照
save 900 1 900s内 至少1个key 修改过 就持久化
save 300 10 300s内 至少10个key 修改过 就持久化
save 60 10000 60s内 至少10000个key 修改过 就持久化
stop-writes-on-bgsave-error yes 持久化过程出错,是否继续工作
rdbcompression yes 是否压缩 rdb文件 需要消耗cpu资源
rdbchecksum yes 保存rdb文件时 进行错误检查校验
dir ./ rdb文件保存目录
安全
设置密码 详情看指令
限制(CLIENTS)
maxclients 10000 设置最大客户端的数量
maxmemory <bytes> redis 配置最大内存容量
maxmemory-policy noeviction 内存达到上限之后的处理策略
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru : 删除lru算法的key
volatile-random:随机删除即将过期key
allkeys-random:随机删除
volatile-ttl : 删除即将过期的
noeviction : 永不过期,返回错误
APPEND ONLY MODE 模式 aof
appendonly no 默认不开启aof持久化,默认是rdb持久化,一般情况rdb够用
appendfilename "appendonly.aof" aof持久化文件名
同步策略
# appendfsync always 每写一次 同步一次 效率低
appendfsync everysec 每秒同步一次 会丢失数据
# appendfsync no 不同步
redis持久化
RDB
定义
一旦触发了rdb的持久化策略,redis会fork一个子进程 将redis内存中的数据 写入到一个xxx.rdb文件,
替换原有的rdb文件,主线程不进行任何io操作,所以性能极高。缺点是:最后一次持久化可能会丢失数据
触发机制
save条件满足
执行flushall命令
退出redis,也会产生rdb文件
如何通过rdb文件恢复数据
只需要将rdb文件放到 启动目录下就可以了
优点
适合大规模的数据恢复
对数据完整性要求不高
缺点
意外宕机,数据会丢失
AOF
定义
将我们所有的增删改的命令以日志的形式不断的添加,重启服务会将这些命令重新执行一遍
修复aof文件命令
redis-check-aof --fix
优点
每一次修改都会同步,文件完整性好
缺点
aof文件默认比rdb要大,恢复也比rdb要慢
aod 运行效率更低
重写规则
总结
1.rdb持久化方式能够在指定时间内对数据快照存储
2.aof持久化方式记录每次对数据库写的操作,服务器重启时执行命令来恢复数据
3.缓存用不到持久化
4.同时开启两种持久化的情况
redis优先载入aof文件来恢复原始数据,因为更完整
rdb更适合数据备份
5.
消息队列
订阅一个频道
subscribe key (命令执行完,会等待读取信息)
发布消息
publish key value (所有的订阅者都会接受到消息)
主从复制
定义
数据的复制是单向的,只能由主节点复制到从节点
默认情况下,每台redis服务器都是主节点
环境配置(命令)
查看当前redis信息 info replication
role:master #角色:主节点
connected_slaves:0 #从节点格式:0
设置当前redis为从节点 slaveof host port
ps:命令只是暂时生效,配置文件是永久生效
特性
主机可以写,从机不能写只能读!主机中的数据会被从机自动保存
复制原理
Slavr启动成功连接到master会发送个sync同步命令
master接收到命令后,后台启动进程,将数据文件一次性传给slave,完成一次同步
全量复制
增量复制
哨兵模式(自动选择主节点)
原理
哨兵是redis 的一个独立的进程,通过发送命令,等待redis服务器响应,从而监控运行多个redis实例
配置
配置哨兵文件
sentinel.conf
配置命令(1:主节点挂掉,自动选举主节点)
sentinel monitor myredis host port 1
启动哨兵
redis-sentinel kconfig/sentinel.conf
概括
主机宕机,随机投票生成主机,主机回来,自动变为从机
其他配置(待扩展)
redis缓存穿透和雪崩
定义
redis缓存没有数据,同一时间高并发查询直接查询Mysql,导致mysql崩溃
1