Redis的数据类型以及缓存穿透,击穿,雪崩的面试题

Redis(远程字典服务器) 是一个开源的、使用 C 语言编写的 NoSQL 数据库即非关系数据库。

Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程。

Redis特点:
①读写速度快。

②支持丰富的数据类型。

③持久化,可以将内存中的数据保存在磁盘中,重启时再次加载进内存进行使用,定期快照,日志记录方式保存(类似增量备份)。

④原子性:redis 所有操作都是原子性的。

⑤支持数据备份:即 master-salve 模式的数据备份。

Redis五种数据类型分别是string(字符串),hash(哈希),list(列表),set(集合)及sort set (有序集合)。

1.字符串string 可以接受任何格式数据,如JPEG图像数据,它是标准的key-value,Value可容纳高达512MB的数据;应用程序场景:非常常见的场景用于计算站点访问量、当前在线人数等。

2.散列hash

可以使你像在数据库中Update一个属性一样只修改某一项属性值。应用程序方案:存储部分更改数据,如用户信息、会话共享。

3.列表list

允许用户从序列的两端推入或者弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构。

应用场景:(1)最新消息排行榜。(2)消息队列,以完成多程序之间的消息交换。可以用push操作将任务存在list中(生产者),然后线程在用pop操作将任务取出进行执行。(消费者)

4.集合sets

所谓集合就是一堆不重复值的组合,并且是没有顺序的。在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。

5.有序集合sort sets

一个有序的并且不重复的集合列表,每个元素都与双类型的分数相关联。Redis使用分数将集合的成员从小到大排序。zset的成员是唯一的,但是分数可以重复。sorted set是插入有序的,即自动排序。

应用举例:(1)例如存储全班同学的成绩,其集合value可以是同学的学号,而score就可以是成绩。(2)排行榜应用,根据得分列出topN的用户等。

缓存穿透

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。
解决方案:

  1. 把一些空值,null值也放入缓存.
  2. 布隆过滤器,类似于拦截器
    布隆过滤器:一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。

缓存击穿

缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

解决方案:

  1. 对接口限流
  2. 加分布式锁

缓存雪崩

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。

解决方案:

  1. 缓存数据的过期时间设置随机(比如加1-5分钟的随机数),防止同一时间大量数据过期现象发生。
  2. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同得缓存数据库中。
  3. 热点数据永不过期
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值