首页 > 数据库 >redis相关知识记录

redis相关知识记录

时间:2024-07-11 22:26:48浏览次数:15  
标签:AOF 记录 redis 知识 db key Sets 字符串

redis基本数据类型

Redis⽀持五种主要数据结构:字符串(Strings)、列表(Lists)、哈希表(Hashes)、集合(Sets)和有序集合(Sorted Sets)。这些数据结构为开发者提供了灵活的数据操作⽅式,满⾜了不同场景下的数据存储需求。 • 字符串(Strings):最基本的数据类型,可以包含任何数据,如数字、字符串、⼆进制数据等。在Redis中,字符串是⼆进制安全的,这意味着它们可以有任何⻓度,并且不会因为包含空字符⽽被截断。 • 列表(Lists):简单的字符串列表,按照插⼊顺序排序。你可以添加⼀个元素到头部(左边)或者尾部(右边)。 • 哈希表(Hashes):是键值对的集合,是字符串类型的字段和值的映射表。适合存储对象。 • 集合(Sets):是字符串类型的⽆序集合。它是通过哈希表实现的,可以做到添加、删除、查找的时间复杂度都是O(1)。 • 有序集合(Sorted Sets):和Sets相似,但每个字符串元素都会关联⼀个浮点数类型的分数。元素的分数⽤来排序,如果两个成员有相同的分数,那么他们的排名按照字典序计算

 Redis的持久化机制

RDB(Redis DataBase) :存的是数据的2进制文件,恢复快。备份间隔最少也要5分钟,也就是最少丢失5分钟数据。

AOF(Append Of File) :存的是指令文件,恢复慢(需要一条一条执行指令),最多丢失一秒的数据。文件体积较大、性能较差

AOF+RDB : RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。

下图是生成的对应的文件。

 

缓存雪崩

缓存中的大量key同时失效,导致大量的流量请求到达db中,导致db负载压力过大

解决方式:让key不在同一时间失效,分散开来

缓存穿透

大量的请求同时访问一个根本不存在的key,导致大量流量走到db。

解决方式:设置为null或者使用布隆过滤器判断是否存在该key

缓存击穿

大量的请求同时访问一个过期的key,导致大量流量走到db。

解决方法:加分布式锁

当redis作为db的热点数据时先写DB?还是先写redis?

情景一:先写redis或先写db,不适用场景为当我们项目中有大量的写流量的时候

情景二:先删redis或先删db,不适用的场景为当redis中的数据没有过期时间的时候

情景三:延迟双删,不使用的场景为像秒杀系统这种频繁去修改数据和要求数据强一致的场景

情景四:异步同步,根据mysql的binglog发送消息,在消费消息的时候更新redis,不适用的场景为redis没有过过期时间

分布式锁

为甚要用分布式锁?

普通的锁只能锁单台机器,无法解决在多台机器对于共享资源的并发问题。

如何建立一个分布式锁?

setnx,并设置过期时间,看门狗自动续约。

redis架构

集群模式

新增节点:一致性hash 

数据分布不均匀:虚拟节点

主从模式

全量复制:

标签:AOF,记录,redis,知识,db,key,Sets,字符串
From: https://blog.csdn.net/WYZFJHH/article/details/140318937

相关文章

  • 接口文档的书写,git的拉取错误的解决,数据库多表查询的进一步认识(以后开发一定要先仔细
    202407111接口文档的书写:1.1首先写你这个大模块是什么功能。1.2开始根据你的功能写接口文档:2解决git拉取错误的问题:2.1出现这样的问题:(推送出错)2.2原因分析:可能因为重装过系统,或者是安装git的位置发生了变化等情况出现。2.3找到git的安装路径,打开gitbash之后,进......
  • 13--memcache与redis
    前言:数据库读取速度较慢一直是无法解决的问题,大型网站应对的方式主要是使用缓存服务器来缓解这种情况,减少数据库访问次数,以提高动态Web等应用的速度、提高可扩展性。1、简介Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少数据库访问次数,以提高动......
  • 【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)
    介绍一个简单的工具,用于将Redis数据从一个redis端点复制到另一个redis端点,基于原始存储库转换为.NET8:https://github.com/LuBu0505/redis-copy-net8 RedisCopy.NET8RedisCopy控制台工具允许将Redis数据从一个Redis服务端复制到另一个。 Note: 不支持redis集群......
  • Go-知识测试-模糊测试
    Go-知识测试-模糊测试1.定义2.例子3.数据结构4.tesing.F.Add5.模糊测试的执行6.testing.InternalFuzzTarget7.testing.runFuzzing8.testing.fRunner9.FuzzXyz10.RunFuzzWorker11.CoordinateFuzzing12.总结建议先看:https://blog.csdn.net/a18792721831/ar......
  • c++初阶知识——类和对象(1)
    目录1.类和对象1.1类的定义1.2访问限定符1.3类域 2.实例化2.1实例化概念2.2对象大小 内存对齐规则 3.this指针1.类和对象1.1类的定义(1)class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类......
  • python 冷知识 66 个 0708
    66个有趣的Python冷知识内联注释可以在代码行尾使用#进行内联注释,例如x=10#这是一个内联注释。多行注释多行注释可以用三个引号'''或"""包裹。分数fractions模块提供了分数类型,可以精确表示分数值。小数decimal模块提供了小数类型,可以进行精确的浮......
  • Python期末考试知识点(史上最全)
     python简介type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型基础语法运算符:算术运算符:多了一个**,代表幂方5**5就是5的5次方还多了一个//整数除法逻辑运算符:and,or,not与,或,非赋值运算符:没有++,–身份运算符:......
  • python基础知识(全部)
    2023年说明:如果代码有误的话,记得处理一下缩进,或者注释的问题,文章粘贴的代码在此处可能部分缩进有问题建议食用:目录一变量和简单数据类型输出二数整数.浮点数注释三列表定义和打印访问列表元素修改,添加,删除元素修改添加删除组织列......
  • K8S各组件概念以及原理知识总结
    简述ETCD及其特点? etcd是CoreOS团队发起的开源项目,是一个管理配置信息和服务发现(servicediscovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于Go语言实现。特点:简单:支持REST风格的HTTP+JSONAPI安全:支持HTTPS方式的访问快速:支持并......
  • python的入门知识(下)
    目录学习内容数字字符串、列表和元组映射和集合类型学习内容数字长整型(LongInteger):在Python中,整数没有大小限制,但是可以用大写或小写的L来表示长整型,尽管这不是Python3推荐的做法。复数(ComplexNumbers):由实数部分和虚数部分组成,形如real+imagj。虚数部分......