首页 > 数据库 >redis常用5种数据类型及其常见问题(缓存穿透,缓存击穿,缓存雪崩)

redis常用5种数据类型及其常见问题(缓存穿透,缓存击穿,缓存雪崩)

时间:2024-06-16 15:32:21浏览次数:13  
标签:常见问题 hash 过期 redis 数据库 数据类型 缓存 数据

1.字符串(String)
2.哈希(hash):redis hash是一个string类型的字段和value的映射表,hash特别适合存储对象
3.列表(List):字符串列表,按照插入的顺序。可以添加一个元素到列表的头部或尾部
4.集合(set):String类型的无序集合。集合成员不可重复,redis中集合通过哈希表实现的,添加,删除,查找复杂度为O(1)
5.有序集合(sorted set):每个元素会关联一个double类型分数,redis通过分数进行从小到大的排序

redis缓存穿透

  • 缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这导致不存在的数据每次请求都到存储去查询,失去缓存的意义
  • 解决办法:接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截。从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写成key-null,缓存有效时间可以设置短点,这样可以防止攻击用户反复用同一个id暴力攻击

缓存击穿

  • 指缓存中没有但数据库中有的数据(一般是缓存时间到期),这是由于并发用户特别多,同时读缓存没读到数据,同时去数据库中取数据,引起数据库压力瞬间增大,造成过大压力
  • 解决办法
    1. 设置热点数据永远不过期
    2. 接口限流与熔断,降级。重要的接口做好限流策略,防止用户恶意刷接口,同时要降级准备,当接口中的某些服务不可用,进行熔断,失败快速返回机制
    3. 布隆过滤器。boolmfilter就是类似hash set,用于快速判断某个元素是否存在于集合中,其经典的应用场景就是快速判断一个key是否在某容器,不存在就直接返回。布隆过滤器的关键在于hash算法和容器大小
    4. 互斥锁:缓存中有数据,直接返回,缓存中没有数据,第一个进入的线程,获取锁并进入数据库取数据,在没释放锁之前,其他线程等待,防止都去数据库重复取数据

缓存雪崩

  • 指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同,缓存击穿是并发查同一条数据,缓存雪崩是不同的数据都过期,很多数据库都查不到从而查询数据库
  • 解决办法:
    1. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
    2. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中
    3. 设置热点数据永不过期

标签:常见问题,hash,过期,redis,数据库,数据类型,缓存,数据
From: https://www.cnblogs.com/data101/p/18249870

相关文章

  • MyBatis 的缓存机制
    1.MyBatis的缓存机制@目录1.MyBatis的缓存机制2.准备工作3.MyBatis的一级缓存3.1一级缓存失效情况/条件4.MyBatis的二级缓存5.MyBatis集成EhCache第三方缓存6.总结:7.最后:缓存(Cache)缓存的作用:通过减少IO的方式,来提高程序的执行效率。MyBatis的缓存:将Sele......
  • Java学习 - MySQL对于数据库、表、数据类型的定义
    对于数据库的定义创建库CREATEDATABASEIFNOTEXISTS库名DEFAULTCHARACTERSETutf8//设置默认字符集为utf8COLLATEuf8_general_ci;//不区分大小写caseinsensitiveCREATEDATABASEIFNOTEXISTS库名DEFAULTCHARACTERSETutf8//设置默认字......
  • 不同PC设备共用同用一套键鼠,以及使用Barrier常见问题解决方案
    设备环境:一台windows11,一台ubuntu桌面版网络环境:使用同一wifi一、下载安装windows安装下载地址:Releasev2.4.0·debauchee/barrier·GitHububuntu安装sudoapt-getinstallbarrier二、设置使用服务端设置服务端作为主控端,键鼠连接的是服务端设备,配置连接......
  • 游戏缓存与异步持久化的完美邂逅
    1、问题提出游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢?2、应用程序缓存缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。游戏服务器对于玩家数据的读......
  • 深入理解PHP数据类型:基础、用法与最佳实践
    在PHP编程中,数据类型是构成程序的基本单元,它定义了存储在变量中的数据的种类。掌握PHP的数据类型对于编写高效、可靠的代码至关重要。本文将详细介绍PHP的主要数据类型,包括它们的定义、用法和最佳实践。整数(Integer)整数类型用于存储整数,可以是正数、负数或零。在PHP中,整......
  • 数据库连接池、flask定制命令、flask-cache缓存、信号
    flask操作mysql1fromflaskimportFlask,jsonify2importpymysql34app=Flask(__name__)5app.debug=True67#拿到mysql链接对象8conn=pymysql.connect(host='127.0.0.1',user='root',password='199721',database=&......
  • spring-2-依赖注入、循环依赖、三级缓存
    参考:SpringBoot———自动装配原理Spring依赖注入有几种?各有什么优缺点?Spring注解@Resource和@Autowired区别Spring是如何解决循环依赖问题?第二次讲Spring循环依赖,时长16分钟,我保证每一秒都是精华1.依赖注入1.1依赖注入的方式方式优点缺点适用场景属性注入......
  • Redis常见问题
    1key的生存时间到了,Redis会立即删除吗?不会立即删除。定期删除:Redis每隔一段时间就去会去查看Redis设置了过期时间的key,会再100ms的间隔中默认查看3个key。惰性删除:如果当你去查询一个已经过了生存时间的key时,Redis会先查看当前key的生存时间,是否已经到了,直接删除当前key......
  • 1对1视频聊天源码,优化后的缓存使用效果更好
    1对1视频聊天源码,优化后的缓存使用效果更好缓存是提升1对1视频聊天源码的有效方法之一,尤其是用户受限于网速的情况下,可以提升系统的响应能力,降低网络的消耗。当然,内容越接近于用户,则缓存的速度就会越快,缓存的有效性则会越高。不过,在1对1视频聊天源码的某些特定场景下缓存还需......
  • 青龙面板常见问题合集
    前言在青龙面板跑脚本的过程中可能会出现各种错误,这里给大家汇总一下常见的问题类型,之后有其他的问题的话会慢慢更新。如果嫌麻烦可以选择直接上车:Rabbit  备用地址:Pro QQ群:570499950阿里云服务器:阿里云高校计划_云工开物_助力高校科研与教育加速-阿里云云小站_专享......