重要—01:Redis

目录

一、什么是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文件名称


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript面试知识点?

以下是一些常见的TypeScript面试知识点,可能会在TypeScript相关的面试中被问到: 1:TypeScript的优势和用途: 解释TypeScript相对于JavaScript的优势,如静态类型检查、提供更好的开发工具支持、增加代码可读性和可维护性等。描述在什么情况下选择使用TypeScript,并举例说…

rcore 笔记 批处理系统 邓氏鱼

批处理系统 批处理系统 (Batch System) &#xff0c;它可用来管理无需或仅需少量用户交互即可运行的程序&#xff0c;在资源允许的情况下它可以自动安排程序的执行&#xff0c;这被称为“批处理作业”。 特权机制 实现特权级机制的根本原因是应用程序运行的安全性不可充分信…

docker安装Kafka,SpringBoot整合Kafka

#拉取镜像 docker pull wurstmeister/zookeeper #运行容器 docker run --restartalways --name zookeeper -p 2181:2181 \ -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper#拉取镜像 docker pull wurstmeister/kafka#运行容器 docker run --restartalways --name …

Apache POI及easyExcel读取及写入excel文件

目录 1.excel 2.使用场景 3.Apache POI 4.easyExcel 5.总结 1.excel excel分为两版&#xff0c;03版和07版。 03版的后缀为xls&#xff0c;最大有65536行。 07版的后缀为xlsx&#xff0c;最大行数没有限制。 2.使用场景 将用户信息导出到excel表格中。 将excel中的数…

用pd.DataFrame.to_sql方法插入万行数据耗时21秒

to_sql是Pandas中用于将DataFrame数据写入数据库的方法&#xff0c;可以将DataFrame转换为SQL语句&#xff0c;方便我们将数据存入数据库中&#xff0c;以便进行后续的操作。 to_sql方法中包含多个参数&#xff0c;比较常用的参数有name&#xff08;表名&#xff09;、con&…

【算法挑战】用栈实现队列(含解析、源码)

232.用栈实现队列 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 232.用栈实现队列 题目描述方法 1 思路复杂度代码 方法 2 思路复杂度代码(JavaScript/C) 题目描述 使用栈实现队列的下列操作&#xff1a;push(x) -- 将一个元素放入队列的尾部。 pop(…

系统架构设计师-第15章-面向服务架构设计理论与实践-软考学习笔记

面向服务的体系结构&#xff08;Service-Oriented Architecture, SOA) 面向服务的体系结构&#xff08;Service-Oriented Architecture, SOA&#xff09;是一种软件架构模式&#xff0c;它将应用程序的不同功能组织为一组可重用的、松耦合的、自治的服务&#xff0c;这些服务通…

在前端实现小铃铛上展示消息

点击铃铛显示如下消息框&#xff1a; 如果点击消息&#xff0c;可以实现消息从列表中移除,并从铃铛总数上进行扣减对应的已读消息数。 关于以上功能的实现方式&#xff1a; <!-- 铃铛位置 --><i class"el-icon-bell" click"showPopover true"&…

ubuntu启动报错error: proc_thermal_add, will cont

如题&#xff0c;ubuntu启动报错error: proc_thermal_add, will cont 截图如下&#xff1a; 困扰了我很久&#xff0c;差点就打算重装系统&#xff0c;准备放弃了&#xff0c;但是感谢国外的老哥&#xff0c;写了一篇非常详细的解决方案&#xff0c;我搬过来。 解决方案&#…

03-对象

对象 对象1.对象的创建字面量模式构造函数模式 2.对象的访问3.新增删除对象中的属性4.Object显示类型转换(强制类型转换)ECMAScript中可用的3种强制类型转换如下&#xff1a;Boolean(value)String(value)Number(value)Object类型到Boolean类型Object类型转String类型转换规则&a…

Redis通过复制rdb文件方式同步线上数据到本地以及提示:Can‘t handle RDB format version 9解决

场景 Redis的持久化机制-RDB方式和AOF方式&#xff1a; Redis的持久化机制-RDB方式和AOF方式_rdb 和ao-CSDN博客 Redis持久化机制导致服务自启动后恢复数据过长无法使用以及如何关闭&#xff1a; Redis持久化机制导致服务自启动后恢复数据过长无法使用以及如何关闭_霸道流氓…

mysql数据表设计

命名 mysql表名的命名规范为表名可以用 t_ 、tb_的前缀&#xff0c;或者是业务模块前缀。比如t_order。 有些项目也会使用 tt_、tm_、 ts_ 等前缀&#xff0c;根据项目的习惯命名就好了。 主键&#xff1a; AUTO_INCREMENT 表示自增&#xff0c;UNSIGNED 表示无符号&#xf…

【算法专题】双指针—盛最多水的容器

一、题目解析 分析这个题目不难得出一个容积公式 二、算法原理 解法一&#xff1a;暴力枚举&#xff08;超时&#xff09; 套用上述的容积公式&#xff0c;使用两个for循环来枚举出所有可能的情况&#xff0c;再挑出最大值即可&#xff0c;但是这种写法会超时&#xff0c;导致…

数据结构-初识泛型

写在前&#xff1a; 这一篇博客主要来初步的记录以下泛型的相关内容&#xff0c;内容比较琐碎&#xff0c;就不进行目录的整合&#xff0c;后续可能会对泛型这里进行系统性的梳理&#xff0c;此篇博客主要是对泛型有一个简单的认识与理解&#xff0c;需要知晓的内容。 当我调用…

2. 网络之网络编程

网络编程 文章目录 网络编程1. UDP1.1 DatagramSocket1.1.1 DatagramSocket 构造方法1.1.2 DatagramSocket 方法&#xff1a; 1.2 DatagramPacket1.2.1 DatagramPacket构造方法1.2.2 DaragramPacket方法1.2.3InetSocketAddress API 1.3 UDP回显服务器1.3.1 框架结构1.3.2 读取请…

将图像的锯齿状边缘变得平滑的方法

项目背景 使用PaddleSeg 192x192 模型分割出来的目标有锯齿状边缘&#xff0c;想通过传统算法将这种锯齿状边缘的变得平滑&#xff0c;虽然试了很过方法&#xff0c;但是效果还是不太理想 常用的集中方法 当使用分割算法&#xff08;如分水岭分割、阈值分割等&#xff09;分…

Docker:命令

Docker&#xff1a;命令 1. 创建MySQL的命令解读2. 基础命令3. 案例 查看DockerHub&#xff0c;拉取Nginx镜像&#xff0c;创建并运行Nginx容器4. 命令别名附录 1. 创建MySQL的命令解读 docker run :创建并运行一个容器&#xff0c;-d 是让容器在后台运行--name:给容器起一个名…

使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令

背景 最近面对一个庞大的项目&#xff0c;但是只需要修改某个模块&#xff0c;每次都手搓命令太麻烦了&#xff0c;于是就想着能不能写个脚本来辅助处理这些事情。 解决方案 定制化一键 ESLint&#xff0c;执行文件下载地址&#xff1a; https://github.com/mazeyqian/go-g…

Python 自动化(十六)静态文件处理

准备工作 将不同day下的代码分目录管理&#xff0c;方便后续复习查阅 (testenv) [rootlocalhost projects]# ls day01 day02 (testenv) [rootlocalhost projects]# mkdir day03 (testenv) [rootlocalhost projects]# cd day03 (testenv) [rootlocalhost day03]# django-admi…

基于nodejs+vue啄木鸟便民维修网站设计与实现

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…