Java面经之Redis

Redis

Redis应用场景

(1) 缓存(数据查询,短链接,新闻内容,商品内容等)
(2)聊天室在线好友列表
(3)任务队列(秒杀 ,抢购,12306)
(4)应用排行榜
(5)网站访问统计
(6)数据过期处理
(7)分布式集群架构中的session问题
一般这种需要频繁读取数据库中数据的应用

daemonize介绍 守护线程

redis.conf配置文件中可以设置daemonize守护线程
daemonize:yes 时会采用单进程多线程模式,即使redis可以在后台运行,但需要kill掉进程才会关闭,
daemonize:no 当前界面将进入redis的命令行界面,exit退出界面 一般使用后台运行操作起来更方便

Redis数据结构

Redis是一种基于内存的数据库,并且提供一定的持久化功能,是键值数据库
数据类型有String–保存字符串,整数和浮点数,
List–链表,每一个节点都包含一个字符串,
Set–每一个元素都是一个字符串,
Hash–类似于Map键值对应的无序列表
Zset–有序集合可包含字符串,整数,浮点数,分值等
HyperLogLog–计算不重复的值以确定存储数量

Redis持久化

1.RDB持久化

以二进制文件进行存储,间隔一段时间进行持久化,save时间为
更改1个key时间隔900s;
更改10个key时间隔300s;
更改10000个key间隔60s;

2.AOF持久化

将“操作+数据”以格式化指令的方式追加到操作日志文件的尾部。
AOF同步方式:
always:每一条aof记录进行同步
everysec:每秒同步一次
no:redis并不直接调用文件同步,而是交给操作系统来处理

Redis主从复制

端口号 6380
主从复制原理:1.当主库和从库建立Master-Slave关系后,会向主数据库发送SYNC命令
2.主库接收到SYNC命令后会开始在后台保存快照(持久化),并将期间接收到的写命令缓存起来
3.快照完成后,主Redis会将快照文件和所有缓存的写命令发送给Redis
4.从Redis接收后,会载入快照文件并且执行收到缓存命令
5.主Redis每当收到写命令时,都会将命令放松给从Redis,以保证数据一致性。

哨兵模式

通过Sentinel 哨兵模式,可以通过投票选出一台从机升格为主机

Redis集群方案

架构细节
1.所有redis节点彼此互联,内部使用二进制协议优化传输速度和带宽
2.节点的fail是通过集群中超过半数的节点检测有效时整个集群才生效
3.客户端与redis节点直连,不需要proxy层,客户端不需要连接集群所有节点
4.redis-cluster,把所有物理节点映射到【0-16383】slot哈希槽上

Redis的缓存问题

在这里插入图片描述
Redis是内存数据存储,可以作为本地缓存的下一级缓存,对数据的读写操作即快。

缓存雪崩

由于原有缓存失效,新缓存没有恢复,所有数据读取写入都要到MySQL 中进行,极有可能造成数据库宕机,系统崩溃,这就是缓存雪崩
解决:当发生缓存雪崩时,通过加锁来人为降低数据的读取写入频率,以降低数据库压力

缓存穿透

指数据为null时,数据中没有,则缓存肯定也没有,那么每一次要去MySQL数据库中查询,降低了数据库的效率

解决方案:1.当第一次读取数据时,设置一个默认值存放在缓存中,这样第二次到缓存中获取就有值了

缓存击穿

对于设置过期时间的key,如果这些key可能会在某些时间点被超高并发访问,是一种非常“热点”的数据,则可能会被发生缓存击穿问题
解决方案:
1.用锁,人为降低访问频率
2.不设置热点key的过期时间,而是将过期时间设置key对应的value里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值