Redis基础总结

Redis是一个基于内存的键值数据库,常用于缓存。

1、数据结构

常见的有:
string,可以存字符串、整数等,如 key: “sadasfa”
hash, 存一张哈希表, 如 key : {{k1, v1}, {k2, v2}}
list,存一个链表,如 key:{1->2->3}
set, 存一个字符串的无序集合,去重 如key: {“123”, “213”}
zset,存储有序的键值对,每个元素有权重和值,根据权重排序,如key:{{A, 1}, {B, 2}, {C, 3}}

使用场景:
string记录一些信息,如计数
list:消息队列
hash:用户信息,HSET user:1000 name “John Doe”
set:去重,如查找我们2个人的所有好友
zset:有序,打赏排行榜, 按打赏的金额排序

redis为什么快

1、大部分操作在内存中完成,并且采用高效的数据结构,所以redis的瓶颈是内存和网络带宽,不是cpu,自然就采用单线程,避免多线程竞争。
2、采用I/O多路复用,提高并发。
3、6.0对于网络io的处理改成了多线程。但是对命令的执行还是单线程的。

持久化

redis持久化:三种方式

  1. AOF日志:每执行一条写命令后都会把它记录到AOF缓冲区,按写回策略写回磁盘。
    后续可以根据AOF日志进行数据恢复。写回策略:总是,每秒,由操作系统决定。A0F恢复是逐条恢复,比较慢,但是全。
  2. RDB快照:定期照一张快照,记录内存的所有数据,再写回磁盘,后续根据快照恢复。RDB很快因为直接是根据数据恢复,但不能太频繁,因为每次快照写回磁盘数据量比较大。所以RDB会有数据安全的问题。
  3. 混合持久化:AOF日志前半部分记录RDB的全量数据,后半部分记录AOF的增量,这样的化,重启redis后加载快,且数据丢失也较少。

高可用

主从复制:一主多从,从机备份主机数据,主机负责写,从机负责读,实现读写分离。但是
但是若主机挂了系统就只能读不能写了。所以需要能够自动重选出主机:引入哨兵,监控主机的运行情况,若主机挂了,他会选一个从机成为主机,具体过程:哨兵会定期发送ping判断主机是否正常运行,若ping失败则认为主机主观下线。则哨兵会向其他从机发出投票命令,让他们判断主机是否下线,当票数达到阈值则认为主机客观下线。开始重选主机:所有从机按优先级、复制进度、ID号排序,选出新的主机,到此故障迁移完成。注意哨兵本身也应该设置多个形成哨兵集群。但是从主机故障到哨兵发生故障进行故障迁移需要时间,这段时间还是不能写,所以让主机也形成集群,一个挂了也不影响。

redis集群保证数据一致性吗:他是AP,保证可用性和分区容错性,数据一致性并不全保证。

缓存雪崩:为了保证缓存中的数据和数据库数据的一致性,缓存的数据会设置过期时间,当数据过期,就要访问数据库重新生成缓存。若大量缓存数据同时过期,同时又来了大量请求,就会全访问数据库,导致数据库压力骤增甚至崩溃。可均匀设置过期时间。或者像数据库构建缓存时加锁,保证同一时间只有一个线程构建缓存。
缓存击穿:某个热点数据过期了,同时大量数据访问该热点数据,也会直接访问数据库。可以不给热点数据设置过期时间,我们后台更新缓存。
缓存穿透:用户访问的数据既不在缓存,也不在数据库,大量的这种请求也会导致数据库压力骤增。这一般是恶意访问,可以限制非法请求,或者没查到的数据缓存空值,后续也不用再查数据库了。

数据库和缓存如何保证一致性:读的时候先读缓存,缓存若没有就读数据库,并把数据放入缓存;写的时候先更新数据库再删除缓存。为啥是删除缓存不是更新缓存:因为更新的代价比较大,一个缓存可能设计多张表,而且这个缓存也不一定会被频繁访问到。这也是叫懒加载的思想,用到的时候再计算。

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

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

相关文章

github好用工具分享——lux:一键获取视频指令

我们在学习工作中需要大量的数据信息,然而这些数据有什么获取很麻烦,尤其是视频下载资源,那么有没有一种工具即简单方便又实用呢? 接下来我会向大家介绍lux工具的使用,lux是非常方便的获取视频资源指令,只需…

前端拥抱AI:LangChain.js 入门遇山开路之PromptTemplate

PromptTemplate是什么 PromptTemplate是一个可重复使用的模板,用于生成引导模型生成特定输出的文本。与Prompt的区别: PromptTemplate相对于普通Prompt的优势,即其灵活性和可定制性。 简单了解PromptTemplate后,咱们就来聊聊LangChain里的P…

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类(自增运算符)、--(自减运算符)赋值运算符逗号运算符(顺序求值运算符) 表达式 运算符 运算符的分类 C语言的运算符范围很宽,除了控制语句和输入输出…

如何安装python

以下的安装仅针对Windows10系统 一、下载python和解释器 解释器下载 第一步,找到下载的地方 1.找到官网 2.直接点击地址链接 Python Release Python 3.7.2 | Python.org 第二步,找到对应的版本进行安装 进入页面之后,下滑,…

【学术会议征稿】第六届土木建筑与城市工程国际学术会议(ICCAUE 2024)

第六届土木建筑与城市工程国际学术会议(ICCAUE 2024) 2024 6th International Conference on Civil Architecture and Urban Engineering (ICCAUE 2024) 第六届土木建筑与城市工程国际学术会议(ICCAUE 2024)将于2024年11月15-17…

学习008-02-04-08 Localize UI Elements(本地化UI元素)

Localize UI Elements(本地化UI元素) This lesson explains how to localize an XAF application. It describes how to translate UI elements into German and create a multi-language application. 本课介绍如何本地化XAF应用程序。它描述了如何将U…

二次开发必备:开源在线海报图片设计器——poster-design

一、介绍 poster-design是一个最酷的开源在线海报图片设计器,漂亮易用且功能强大。它适用于多种场景:海报图片生成、电商分享图、文章长图、视频/公众号封面等,无需下载软件即可轻松实现创意、迅速完成排版。使用Vue3 、Vite5 、Vuex 、Elem…

Vite + Vue3 + TS项目配置前置路由守卫

在现代前端开发中,使用 Vue 3 和 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具,可以显著提升开发体验。本文博主将指导你如何在 Vite Vue 3 TypeScript 项目中配置前置路由守卫(Navigation Guards)…

使用JavaFx Fxml笔记

使用JavaFx Fxml实现账号密码登录 HelloApplication.java:package com.example.dr295cmonth7;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; i…

敏感信息泄露wp

1.右键查看网页源代码 2.前台JS绕过,ctrlU绕过JS查看源码 3.开发者工具,网络,查看协议 4.后台地址在robots,拼接目录/robots.txt 5.用dirsearch扫描,看到index.phps,phps中有源码,拼接目录,下载index.phps …

##__VA_ARGS__的作用

参考文章:https://blog.csdn.net/u013073067/article/details/125356313 ##__VA_ARGS__前面加上##的作用是:当可变参数的个数为0时,这里的##可以把把前面多余的","去掉,否则会编译出错。 在linux内核中随处可见这种宏定义的用法 #include &…

AttributeError: ‘str‘ object has no attribute ‘decode‘

AttributeError: ‘str‘ object has no attribute ‘decode‘ 目录 AttributeError: ‘str‘ object has no attribute ‘decode‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰&#x…

国科大作业考试资料《人工智能原理与算法》2024新编-第十三次作业整理

1、假设我们从决策树生成了一个训练集,然后将决策树学习应用于该训练集。当训练集的大小趋于无穷时,学习算法将最终返回正确的决策树吗?为什么是或不是? 本次有两个参考: 参考一: 当训练集的大小趋于无穷…

PVE环境中调整虚拟机磁盘大小

我的希望将PVE中的虚拟机磁盘调整一下,增加20GB。在查询了一些资料后,做一下总结教程。 环境是 PVE8.2.2 版本,虚拟机系统是centos7.9.2009-minimal, 安装系统时划分磁盘分区方式是默认分区方式(不同分区方式下&#…

聊聊RNN与Attention

前言 Attention Mechanism,称为注意力机制。基于Attention机制,seq2seq可以像我们人类一样,将“注意力”集中在必要的信息上。 Attention的结构 seq2seq存在的问题 seq2seq中使用编码器对时序数据进行编码,然后将编码信息传递…

playbooks 分布式部署 LNMP

1、环境配置 ansible 服务器 192.168.10.10nginx 服务器 192.168.10.20mysql 服务器 192.168.10.21php 服务器 192.168.10.22 2、安装 ansble #192.168.10.10节点 yum install -y epel-release #先安装 epel 源 yum install -y ansible配置主机清单 …

弹幕背后:B站UP主创作服务解析

引言 在B站,每一条飘过的弹幕都是一个故事的碎片,它们汇聚成一幅幅生动的社交画卷。这里,不仅仅是一个视频分享平台,弹幕背后更是一个充满活力的创作者生态系统。B站以其独特的弹幕文化,为创作者和观众之间搭建起了一座…

排序系列 之 希尔排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦 介绍 英文名为ShellSort,又称“缩小增量排序”是直接插入排序算法的一种更高效的改进版本希尔排序是把记录按下标的指定步长分组,然后按照每组使用直接插入排序&#…

设计模式14-享元模式

设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中,可能会创建大量相似对象,例如在文字处理器中每个字符对象。在这些场景下,如果每个对象都独立存在&#xff0c…

三种使用 RocketMQ 达到消息一致的最佳实践

引言 Hi 你好,我是有清 RocketMQ 作为一款消息中间件,它的信息的投递与消费,通常都会与数据库的更新进行挂钩,那么如何保证 消息和数据库的更新是一个原子性的操作呢? 比如在我数据库更新失败的时候,不进行…