缓存

什么是缓存

在计算中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样后面再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,我们可以高效地重用之前检索或计算的数据。

为什么要用缓存
  • 提升应用程序性能
  • 降低数据库成本
  • 减少后端负载
  • 可预测的性能
  • 提高读取吞吐量(IOPS)
  • 消除数据库热点
Java内存缓存

在Java应用中,对于访问频繁高,更新少的数据,通常的方案是将这类数据加入缓存中。相对从数据库读取来说,读缓存效率会有很大提升。
在集群环境下,常用的分布式缓存有Redis、Memcached等。但在某些业务场景上,可能不需要区搭建一套复杂的分布式缓存系统,在单机环境下,通常是会希望使用内部的缓存(LocalCache)。

Java LocalCache 方案

基于JSR107规范自研
基于ConcurrentHashMap 实现数据缓存

Google Guave 缓存
Redis 缓存持久化

http://download.redis.io/releases/

redis 安装

创建安装配置目录
mkdir -p /opt/redis_cluster/redis_6379/{conf,pid,logs,data}

解压文件
cd /opt/moudle/software
tar -zxvf redis-4.0.14.tar.gz -C /opt/redis_cluster/

创建软连接
ln -s /opt/redis_cluster/redis-4.0.14 /opt/redis_cluster/redis
cd /opt/redis_cluster/redis

安装
make && make install

配置文件
vim /opt/redis_cluster/redis_6379/conf/redis_6379.conf

# 以守护进程模式启动
daemonize yes
# 绑定的主机地址
bind 10.0.37.11
# 监听端口
port 6379
# pid文件和log文件的保存地址
pidfile /opt/redis_cluster/redis_6379/pid/redis_6379.pid
logfile /opt/redis_cluster/redis_6379/logs/redis_6379.log
# 设置数据库的数量,默认数据库为0
databases 16
# 指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
# 本地数据的目录
dir /opt/redis_cluster/redis_6379/data

# RDB
save 900 1
save 300 10
save 60 10000

# AOF
appendonly yes
appendfsync everysec
appendfilename "appendonly.aof"

启动redis
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf

Redis的数据都存放在内存中,如果没有配置持久化,redis 重启后数据就全丢失了,于是需要开启redis 的持久化功能,将数据保存到磁盘上,当redis 重启后,可以从磁盘中恢复数据。
持久化
memory ------------------ disk
恢复数据

持久化方式
  • RDB 持久化
    RDB 持久化方式能够在指定的时间间隔对数据进行快照存储。

RDB 持久化是把当前进程数据快照保存到硬盘的过程,触发RDB持久化过程分为手动和自动触发。
手动触发使用bgsave命令,redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束,阻塞只发生在fork阶段,一般时间很短,

自动触发RDB的持久化机制,使用save相关配置,如save m n ,表示m秒内数据集存在n次修改时,自动触发bgsave

添加配置如下:

save 900 1
save 300 10
save 60 10000

redis-cli shutdown 即使不满足条件也会自动执行bgsave 不会丢失数据

kill pid  关闭redis不会丢失数据
kill -9 pid 会丢失数据

优雅关闭

kill 
pkill 
kill -15

RDB的优缺点:
优点:1、RDB是一个紧凑压缩的二进制文件,代表redis在某个时间点上的数据快照,非常适用于备份,全量复制等场景,比如每6个小时执行bgsave 备份,并把RDB 文件拷贝到远程机器,用于灾难恢复。2、redis 加载RDB 恢复数据远远快于AOF方式。
缺点:1、RDB方式数据没办法做到实时持久化/秒级持久化,因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,执行频繁成本过高。2、RDB 文件使用特定二进制格式保存,redis 版本升级过程中有多个格式的RDB版本,存在老版本redis不兼容新版RDB 格式的问题。

  • AOF(Append Only File)持久化
    AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
    开启AOF功能需要设置配置appendonly yes 默认不开启,AOF 文件名通过appendfilename 配置设置,默认文件名appendonly.aof,保存路径同RDB持久化方式一致,通过dir配置指定。

appendfsync everysec

bgrewriteaof 异步执行aof文件的重写操作

RDB和AOF同时存在,重启会读取AOF。

面试题
redis持久化方式有哪些?有什么区别?
RDB 基于快照的持久化,速度更快,一般用于备份,主从复制也是依赖RDB 持久化功能。
AOF 以追加的方式记录redis操作日志的文件,可以最大程度的保证redis 数据安全,类似于mysql的binlog。

安全认证

redis 默认开启了保护模式,只允许本地回环地址登录并访问数据库。
禁止protected-mode yes/no 保护模式,是否只允许本地访问
1.Bind 指定IP进行监听

bind 10.0.37.11 127.0.0.1

2.配置密码

requirepass password
主从复制

流程
1.从库发起同步请求
2.主库收到请求后执行bgsave 保存当前内存中的数据到磁盘
3.主库将持久化的数据发送给从库的数据目录
4.从库收到主库的持久化数据之后,先清空自己当前内存中的所有数据
5.从库将主库发送过来的持久化文件加载到自己的内存中。

在从库上执行slaveof host port 主库的IP和端口,建立起主从关系,这个时候从库是read only
slaveof no one 去除主从关系

局限性
1.执行主从复制之前,最好先将数据备份
2.建议将主从复制配置写入到配置文件中
3.在业务低峰期做主从复制
4.拷贝数据时候会占用带宽
5.不能自动完成主从切换,需要人工介入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值