首页 > 数据库 >Redis的删除,过期,击穿,穿透,雪崩

Redis的删除,过期,击穿,穿透,雪崩

时间:2023-04-11 10:47:08浏览次数:37  
标签:Key 删除 过期 Redis 击穿 雪崩 key

 

Redis里面的RedisTemplate.delete()方法的原理是:

1.RedisConnection 创建redis的连接

2.会去执行命令 createCommand(type,param)

3.程序启动的时候,会自动执行命令,redis1服务器会删除内容。

Redis的删除策略:

1.定时删除:存入的Key的时候设置了过期时间,到时间了就会删除,这里的好处是内存占用低,坏处是,多次调用CPU执行操作。

2.惰性删除:存入的Key设置了过期时间,到时间了不会删除,下次发现过期了,再删除,好处是:减少cpu的执行操作,坏处是内存占用高

3.定期删除:隔一段时间删除过期的key,是前面两种方法的折中的做法,内存占用不那么高,cpu调用次数也不那么高。

Redis与DB在高并发的情况下,遇到的击穿,穿透,雪崩

1.击穿:当大量请求过来,Redis没有这个Key,或者Key过期了,请求直接到DB,造成击穿。

2.穿透:当大量请求过来,Redis里面没有,DB里面也没有,造成穿透

3.雪崩:当大量的请求过来,Redis没有这个Key,或者过期了,直接请求到DB,造成雪崩。

1.1击穿的解决办法:由于Redis是单线程,并发线程全部访问Redis,Redis 的key过期淘汰,通过setnx命令实现锁机制。

set  key  value  a:ex 过期时间,s

       b:px 过期时间 ms

       c:NX 不存在的key,可设置值

       d:XX 存在的key,可设置值

比如:

set age 20 NX EX 60  会返回 1 执行成功

set age 30 NX EX 60  会返回0 没有执行成功

再次查看

get age   返回20

这里就可以看出,当使用NX,如果不存在这个key,那么会赋值,如果存在就不会赋值,利用这一点实现了分布式锁,就是同一个key进来只能获取到同一把锁。

1.2 解决方法:设置热点的Key不过期

1.3 多线程执行的时候,分为两部分,一部分执行成功,一部分睡眠,先用lock.lock()加锁,然后再执行,执行成功后,睡眠的线程再执行,如果执行时间太长会造成死锁,DB访问时间大于锁过期时间会造成阻塞,这个时候需要重启一个线程,查询锁是否过期,刷新锁的过期时间。

2.1击穿的解决办法:缓存空对象,布隆过滤器,DB的数据先转换到一个标记的map中,请求也转成一样的格式,先判断Map中有没有,没有则返回,有则去redis查数据。

3.1雪崩的解决方案:所有的请求设置随机睡眠时间,配合击穿的解决方案,在访问时,通过set NX 

实现锁机制,把Redis的key设置成随机的过期时间。

 

标签:Key,删除,过期,Redis,击穿,雪崩,key
From: https://www.cnblogs.com/ewa-03/p/17305405.html

相关文章

  • 数据库:Redis哨兵及cluster集群部署
    1、什么是哨兵模式哨兵模式:可以自动切换解决单点故障,但是不能负载均衡,存储能力受限制。哨兵核心功能:在主从复制的基础上,实现了主节点的自动故障转移2、哨兵的作用监控:监控主节点和从节点是否在正常运行故障自动转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效......
  • 数据库:Redis数据库高可用
    一、Redis数据库持久化1、redis高可用类型高可用定义:范围宽泛,除保证提供正常服务,还要考虑数据容量的扩展,数据安全不安全是否会丢失等。①持久化:最简单的高可用方法,主要是数据备份即将reids的内容存储到硬盘中保证数据不会因为进程退出丢失。2、redis实现持久化方式及优缺点①RDB......
  • redis Cluster集群环境搭建
    文档课题:redisCluster集群环境搭建.操作系统:rhel7.964位数据库:redis6.2.6环境说明:第1台机器:主机名leo-redis626-a192.168.133.1008001端口8002端口第2台机器:主机名leo-redis626-b192.168.133.1018001端口8002端口第3台机器:主机名leo-redis626-c192.168.133.10280......
  • 执行redis-cli命令创建redis集群时报错“Could not connect to Redis at IP:端口: No
    问题描述:执行redis-cli命令创建redis集群时报错“CouldnotconnecttoRedisatIP:端口:Noroutetohost”,如下所示:数据库:redis6.2.6系统:rhel7.91、异常重现[root@leo-redis626-asrc]#/usr/local/src/redis-6.2.6/src/redis-cli--clustercreate--cluster-replicas1......
  • Redis集群添加master到当前集群,并重新分槽
    文档课题:Redis集群添加master到当前集群,并重新分槽.操作系统:rhel7.964位数据库:redis6.2.6环境说明:第1台机器:主机名leo-redis626-a192.168.133.1008001端口8002端口第2台机器:主机名leo-redis626-b192.168.133.1018001端口8002端口第3台机器:主机名leo-redis626-c192.......
  • Redis之缓存穿透、缓存击穿、缓存雪崩及其解决方法
    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2MDY0NDQwNQ==&mid=2247483949&idx=1&sn=6c643858d50cee4f9a2cac8ce838baff&chksm=fc05aa77cb722361dc3e3eb2b74f4d68308f7dc1d12e04dc4444a0d2595dc9e484ef318e93ce&scene=27 什么是缓存穿透缓存穿透是指查询一个缓存中和数据......
  • 天坑,os root密码过期,导致主机crontab自动任务罢工
    告警clickhouse日志报错 访问的表不存在!明明我们设定crontab定时任务了啊,怎么没有建表呢?查看crontab定时任务及其进程运行情况crond为 active且启动在7months9daysago,但是有信息显示expiredpasswordforuserroot,任务没有如期执行原因指向root密码过期。先登......
  • 详解事务模式和Lua脚本,带你吃透Redis 事务
    摘要:Redis事务包含两种模式:事务模式和Lua脚本。本文分享自华为云社区《一文讲透Redis事务》,作者:勇哥java实战分享。准确的讲,Redis事务包含两种模式:事务模式和Lua脚本。先说结论:Redis的事务模式具备如下特点:保证隔离性;无法保证持久性;具备了一定的原子性,但不支持回滚;一致性的概念......
  • 详解事务模式和Lua脚本,带你吃透Redis 事务
    摘要:Redis事务包含两种模式:事务模式和Lua脚本。本文分享自华为云社区《一文讲透Redis事务》,作者:勇哥java实战分享。准确的讲,Redis事务包含两种模式:事务模式和Lua脚本。先说结论:Redis的事务模式具备如下特点:保证隔离性;无法保证持久性;具备了一定的原子性,但不支持回滚;一......
  • Redis学习——基础数据结构
    基础数据结构String唯一的key,获取对应value,不同value结构不同Json序列化为字符串,字符串反序列化为Json常见用途,缓存用户信息动态字符串位图数据结构List相当于LinkedList,链表不是数组。插入很快,定位索引较慢,常用作异步队列(队列、栈都可以)一些慢操作:lindex,ltrim底层数据......