首页 > 数据库 >Redis

Redis

时间:2022-11-01 19:35:14浏览次数:44  
标签:缓存 过期 Redis key 数据 节点

1、Redis的优缺点

  优点:基于内存,读写速度快,可以达到每秒10万次的操作,

  缺点:内存空间有限,存储数据量小,只能处理少量数据的高并发操作

2、Redis常见的缓存同步方案

  同步缓存:更改代码逻辑,在在数据库保存完数据之后,在添加将数据保存到缓存中的代码

  异步缓存:在数据库完成数据的保存之后,将数据发送到MQ中,消费者监听到队列中的数据之后尽心数据的缓存

3、Redis常见的数据结构

  String:字符串结构

  hash:键值对数据

  list:数组(有序可重复)

  set:集合(无需不可重复)

  zset:可根据分值来指定集合中数据的存取顺序

4、Redis的删除策略

  在向redis中存储key时,会指定一个过期时间,到key到达过期时间时,会进行删除,有3中删除策略

  定时删除:在指定数据过期时间时,会创建一个定时器,当定时器的过期时间到达时,会立即删除这个key

    优点:对内存友好,内存中不会存在过期的key

    缺点:对CPU不友好,当过期数据过多时,会延迟对前端的响应时间,降低吞吐量

  惰性删除:当用户在使用到某一个key时,会先检查这个key是否过期,过期删除,

    缺点:对于不常用且过期的数据,会一直存在内存中占用空间

  定期删除:每过一段时间,会对内存中的一部分数据/或对整个内存的数据进行检查看是否过期,然后决定是否删除

    缺点:对于只检查一部分数据是否过期的删除策略,可能有些过期数据监测不到,而造成返给用户过期的数据

5、Redis的淘汰策略

  redis的内存空间不足,在加入新的数据时,会根据某种规则进行数据删除,这种规则就是淘汰策略

  1、无法添加新数据,也不会删除已有数据,直接报错

  2、删除使用历史时间最久的数据

  3、删除使用次数最少的数据

  4、随机挑选一部分数据进行删除

6、Redis的缓存穿透、击穿、雪崩

  穿透:用户在访问一个没有的数据时,缓存中没有,则访问数据库,然后返回null,当有大量这种请求时,对数据库造成压力可能导致宕机

    解决办法:当该请求没有查到这个数据,返回null时,将这个null值也保存到缓存中,并设置一个较短的过期时间,使得下次再有此类请求可以在缓存中获取数据返回 / 也可使用布隆过滤器来解决

  击穿:对于一个设置了过期时间的key,在请求该key时,恰好此时这个key过期了,当有多个请求同时访问这个过期key时,大量请求会访问数据库,造成数据库压力

    解决办法:用互斥锁,有一个请求访问数据库数据时其他请求无法访问,当该请求访问完毕之后缓存中会保存该数据,后面其他的请求会从缓存中获取数据

          对于热点数据,不设置过期时间

  雪崩:类似击穿,只不过是多个key同时过期,多个请求同时访问数据库造成压力

     解决办法:给每个key设置不同的过期时间,将key的到期时间错开,比如说在原本到期时间上加一个1-5分钟的随机值

7、什么是布隆过滤器

  布隆过滤器会通过数据库中保存的数据,初始化一个很大的容器,将每个数据通过三个算法计算出来三个不同的hash值放入到这个容器中,有请求进会计算该请求的数据的3个hash值,再在容器中比对有没有对应的组合,有就             放行,没有就拦截

8、Redis的集群方案

  主从复制:一个master负责写,多个slave负责读,实现高可用,出现故障需要手动实现故障转移,不能存储海量数据

  哨兵机制:由一个哨兵集群来检测redis集群节点的健康状态,实现高可用,故障自动转移,不能存储海量数据,一个哨兵每个一段时间向redis中的集群节点发出ping命令接收回应来检测集群节点健康状态,当有一个哨兵认为某一个节点出现故障时,此时为主观下线,当有一半以上的哨兵认为此节点故障时,为客观下线,

  分片集群:多个主从集群,多个master,一个master对应一个或多个slave节点,多集群中的master互相检测对方的健康状态,实现高可用,故障自动转移,存储海量数据,

9、Redis的哈希槽

  在redis的分片集群中,每个master节点有有一部分插槽,插槽与数据进行映射,根据key的有效部分通过一个算法计算得到一个数,这个数决定key存储在哪个插槽上,当key有{}时,根据{}里面的字符计算这个数,当无{}时,根据整个key的字符计算这个数,当某个master节点发生故障时,将故障节点上的插槽转移到健康节点上就可完成故障后的数据同步,或者集群中有新增的master节点,可以将某一个master节点上的插槽分一部分给新的master节点,

  插槽还有一个好处,可以通过控制key,将多个数据保存在同一个插槽上,插槽数量是固定的,一共有16834个,只有master节点上才有插槽

9、Redis如何批量添加数据

  在向redis中添加大量数据时,如果是用普通的方式添加,会耗费很多时间,因为在客户端向redis发送一条添加命令时,要先完成通信连接,每次连接会耗费大概10毫米,时间会随着添加数据的数量增加而增长,redis中有一个管道技术,在创建管道之后,在进行数据的批量添加,相当于客户端和redis值进行了一次通信连接,降低连接的耗时来提高效率

10、Redis的事务理解

  在redis的事务中,可以把多个命令看做是一个集合,要么都执行,要么都不执行

  在事务开启后,会按顺序一次执行命令,在执行的过程中,其他客户端发出的命令不会插入到当前事务中  

  三个特性:原子性、顺序性、一致性

11、

标签:缓存,过期,Redis,key,数据,节点
From: https://www.cnblogs.com/jiaocha/p/16848876.html

相关文章

  • redis 5.0.5集群部署与故障模拟
    背景业务稳定性要求需要一套redis集群来保障因此采用rediscluster集群环境名称ip地址cpu内存master端口slave端口redis-65110.65.6.514c8G70017......
  • Redis 中两个字段排序
    参考:Redis中两个字段排序 redis如何实现多字段排序1.多个维度使用数据库查询排序输出,目前使用的方式。 Redis用一个SortedSet解决按两个字段排序的问题,也就是......
  • Redis线上救命丸:01---误操作AOF、RDB恢复数据
    Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定帮助,然而一旦误操作,它的破坏性也是很明显的。怎么才能快速恢复数据,让损失达到最小呢?本文我们将......
  • Redis:10---List对象
    ​一、列表对象概述   列表类型是用来存储多个有序的字符串,一个列表最多可以存储多个元素。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有......
  • Redis:02---安装Redis(Linux+Windows+Docker)
    Linux安装:一、安装方式1(下载源码编译安装)第一步:从下面的网址中下载Redis最新稳定版本的源代码sudowgethttp://download.redis.io/redis-stable.tar.gz第二步:下载完之后解......
  • OpenResty+mysql+redis
    1、       ​​ad_load.lua​​  ​​nginx.conf​​1、读取mysql并缓存redis     ......
  • centos7下配置redis时出现的一些问题
    1、redis的客户端连接不上centos7的redis原因分析:打开cmd调用telnet192.168.44.1296379发现连接超时,原因可能为防火墙阻塞将6379端口永久开发 firewall-cmd--zone......
  • redis 两种自动备份模式
    RDB持久化配置:文件io小,效率高,出故障数据丢失多Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.con......
  • redis三主三从集群简易搭建(docker版本, 3台机器)
    #备注:仅针对测试验证使用,生产环境请注意密码/开启AOF等参数设置dockerpullredis:6#机器1dockerrun-d--nethost--nameredis7001redis:6--cluster-enabl......
  • Docker安装Redis
    一、Docker拉取redis镜像dockerpullredis:<latest>二、Docker挂载配置文件将redis的配置文件进行挂载,以配置文件方式启动redis容器(挂载:将宿主机的文件和容器内部目录......