当前位置:首页 > 编程笔记 > 正文
已解决

重要—01:Redis

来自网友在路上 157857提问 提问时间:2023-11-03 10:09:19阅读次数: 57

最佳答案 问答题库578位专家为你答疑解惑

目录

一、什么是Redis?

二、Redis如何实现高可用

三、缓存与数据库不一致问题

四、Redis持久化方式

五、6种淘汰策略

六、缓存穿透和缓存雪崩

七、Redis实现分布式锁

八、Redis.conf 配置文件详解

九、常用命令


一、什么是Redis?

Redis:C语言实现的、数据存储在内存中的、开源的、键值对(key-value)数据库软件。

1.它通过提供多种键值数据结构来适应不同场景下的存储需求,目前Redis支持的键值数据结构有:

  1. 字符串(String)类型
  2. 哈希(hash)类型
  3. 列表(list)类型
  4. 集合(set)类型
  5. 有序集合(zset)类型
  6. 位图(GEO)
  7. 基于概率的

Redis GEO:存储地理位置信息,并进行操作

Redis Stream:针对发布 / 订阅,它提供了消息的持久化 和 主从复制功能,能访问任何时刻的数据,并记住每个客户端的访问位置,保证消息不会丢失。

2.Redis的功能

  • 缓存
  • 分布式锁
  • 数据持久化
  • 消息队列

3.Redis的应用场景

  • 缓存(数据查询、短连接、新闻内容、商品数据等等)。(最多使用)
  • 任务队列(秒杀、抢购、买票等)
  • 应用排行榜
  • 网站访问统计
  • 数据过期处理(可以精确到毫秒)

4.Redis 和 memcached区别

  • 支持的数据类型、速度、持久化、灾难恢复

5.Jedis

  • 是Redis 官方推荐的面向Java的客户端,提供了很多操作接口。
  • redisson与Jedis区别:分布式,功能简单,不支持字符串、排序、事务、管道、分区等。

6.Spring-data-redis

  • 是Spring大家族的一部分,提供了一个高度封装的 “RedisTemplate类”,对Jedis客户端中大量的API进行了封装。


二、Redis如何实现高可用

1.搭建集群:解决单机Redis内存资源有限的问题。

2.主从复制:一个主服务器和多个从服务器,从服务器中备份着主服务器的数据。使充分利用CPU、IO资源。主服务器可以进行读写操作,当发生写操作的时候自动将数据同步到从服务器,而从服务器一般是只读的,并接收主服务器同步过来的数据,达到读写分离。

主节点写,从节点 只能读

作用:数据备份、故障恢复、负载均衡、高可用

3.哨兵机制:负责监控、提醒、自动故障转移。

4.限流降级

5.数据预热:提前统计哪些数据需要频繁使用,启动时预加载进Redis

Redis集群(Master、Slave):最少 一主二从,默认情况下,每台Redis都是主节点。一般情况只配置从机(认老大)。

  • 全量复制:重新连接到主机,同步操作 进行全量复制。
  • 增量复制:都启动着,从机是增量复制

哨兵模式:自动选举 主节点

哨兵配置文件 —— sentinel.conf


三、缓存与数据库不一致问题

  • 先删除 Redis,再写 MySQL,再删除 Redis(可重试)。
  • 先更新数据库,再删除缓存。
  • 并发场景下,可以将删除缓存、修改数据库、读取缓存等操作放到队列中,实现串行化操作。


四、Redis持久化方式

持久化:就是把内存的数据写到磁盘中去,防止服务器宕机导致数据丢失。

Redis提供的两种持久化方式:

Redis服务器默认开启RDB,关闭AOF;如果AOF开启,优先使用AOF

  1. RDB:默认,指定时间间隔对数据快照存储。
  2. AOF:每收到一个写命令都通过write函数追加到文件。将所有 写的操作命令 都记录下来,文件不断追加、文件会越来越大

RDB持久化:
1、触发机制
(1)满足 save条件。  save 60 1 :当时间到60秒时,如果redis发生了至少1次变化,则执行bgsave。

        save命令会阻塞Redis服务器进程。
        bgsave命令只有执行fork操作创建子进程会阻塞一会儿,子进程来负责创建RDB文件。
(2)执行 flushall 命令
(3)正常关机退出
都会自动生成一个dump.rdb
2、如何恢复rdb文件
把rdb文件 放到Redis启动目录,启动的时候就会恢复数据
config get  dir        //获取启动目录


五、6种淘汰策略

redis默认的内存淘汰策略是noeviction,内存不足时,写入直接报错

  • volatile-lru:从设置了过期时间的数据集中,选择 最近最少使用的 数据释放;
  • allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择 最近最少使用的 数据释放;
  • volatile-lfu:从设置了过期时间的数据集中,选择 访问频率最少 的数据进行淘汰
  • allkeys-lfu:从所有数据中选取 访问频率最少 的数据进行淘汰;
  • volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放;
  • allkeys-random:从所有数据中 随机选择 一个数据进行入释放;
  • volatile-ttl:从设置了过期时间的数据集中,选择 马上就要过期的 数据进行释放操作;
  • noeviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。

相关算法实现:

(1)缓存过期淘汰算法:使用 HashMap 或者 concurrentHashMap实现。

(2)LRU算法 最近最少使用的 实现:按访问时间;继承LinkedHashMap = HashMap + 双向链表。重写removeEldestEntry()方法。

import java.util.LinkedHashMap;
import java.util.Map;public class LRUCache<K, V> extends LinkedHashMap<K, V> {public LRUCache(int initialCapacity, float loadFactor) {//accessOrder为true,表示双向链表中的元素按照访问的先后顺序排列super(initialCapacity, loadFactor, true);}@Overrideprotected boolean removeEldestEntry(Map.Entry<K, V> eldest) {return size() > initialCapacity * loadFactor;}
}

LFU算法 访问频率最少 实现:访问次数+访问时间;缓存对象里加个 访问次数字段,重写个compareTo方法。


六、缓存穿透和缓存雪崩

缓存穿透:大量查不到(布隆过滤器、设置空对象)
缓存击穿:量太大、缓存过期(设置热点数据永不过期、加分布式锁)
缓存雪崩:Redis宕机、缓存集体失效(Redis高可用)


七、Redis实现分布式锁


八、Redis.conf 配置文件详解

经常修改 端口、pid 名字、log 文件名、dump.rdb 名

  1. 网络:绑定的IP、端口设置、保护模式
  2. 通用:设置以守护进程方式后台运行、指定pid文件、日志级别、日志文件名、默认数据库数量16、是否显示logo
  3. 快照(持久化):Redis 是内存数据库,不持久化到磁盘 那么断电数据就会丢失。设置持久化条件(指定时间间隔)、是否压缩rdb文件、rdb文件保存的目录  (dump.rdb、 appendonly.aof)
  4. 主从复制
  5. 安全:设置密码
  6. 客户端限制:设置能连上Redis的最大客户端数量、配置最大内存、内存满了的处理策略(清理策略)
  7. AOF配置:默认使用rdb方式持久化、不开启aof模式,在大部分情况下rdb 完全够用。持久化文件名、同步 设置


九、常用命令

命令:
(1)ping
(2)config get requirepass
(3)config set requirepass "密码"
(4)auth  密码(5)config get dir		    //获取启动目录
(6)save / bgsave          //会在Redis安装目录生成 dump.rdb文件,即备份文件。//后台创建备份文件
(7)redis-benchmark -n 1000 -q     //同时执行1000个请求来检测性能(-c: 指定并发连接数)(8)info replication        //查看当前主机信息(角色、从机数量)
(9)SLAVEOF IP 端口         //给从机配置主节点,关机失效。最好在配置文件配置
(10)SLAVEOF no one         //主节点宕机,让自己变成主节点(11)publish / subscribe    //发布订阅

dbfilename dump.rdb                    //配置RDB文件名
appendonly yes                            //开启AOF(持久化的主流方式,实时性更好)
appendfilename "appendonly.aof"            //配置AOF文件名称


查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"重要—01:Redis":http://eshow365.cn/6-30987-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!