reids 学习笔记

redis 基本数据类型

在这里插入图片描述

字符串string类型

常用指令: set、mset、setnx、get、mget、del、expire。
原子加减: incr、decr、incrby、decrby、

使用场景:

  • 单值缓存
  • 对象缓存
  • 分布式锁
  • 计数器
  • 分布式系统序列号

哈希hash类型

**常用指令:**hset、hsetnx、hmset、hget、hmget、hdel、hlen、hgetall、hincrby
使用场景:

  • 对象缓存
  • 购物车(添加商品、增加数量、商品总数、删除商品、获取购物车商品)

列表list类型

**常用指令:**lpush、rpush、lpop、rpop、lrange、blpop、brpop。
使用场景:

  • 可实现常用分布式数据结构,stack(栈)、Queue(队列)、Blocking MQ(阻塞队列)
  • 微博、微信消息流,时间线功能。

注:读扩散、写扩散,千万、亿万粉丝大V发消息,如何推给粉丝?
小V写扩散、对用户进行标签,将消息写到活跃用户收件箱

集合set类型

常用指令: sadd、srem、smembers、scard、sismember、srandmember、spop
运算操作: sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore
使用场景:

  • 抽奖、点赞、收藏、标签
  • 集合交集、并集、差集

有序集合ZSet类型

常用指令: zadd zrem zscore zincrby zcard、zrange zrevrange、
**运算操作:**zunionstore、zinterstore
使用场景:

redis底层数据结构

  • 数组: 根据序号随机查找很快,但是插入与删除很慢,需要挪动很多元素链表:插入与删除很快,只需要修改相邻元素指针,但是查找很慢,需要从第一个元素逐个遍历查找

有序数组支持折半查找,链表不支持折半查找
有序数组的折半查找操作速度很快,但是插入、删除操作很慢

  • 跳表: 将有序链表改造为支持“折半查找”算法,可以进行快速的插入、删除、查找操作

跳表与压缩列表优缺点,如何选择。

Redis经典问题

3.3 缓存穿透(缓存,数据库都没有数据)

描述:是指查询一个根本不存在的数据(key),缓存层和存储层都不会命中。通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层.
导致这个请求每次都会请求到数据库,失去了缓存保护后端存储的意义造成缓存穿透的基本原因有两个:
第一,自身业务代码或者数据出现问题
第二,一些恶意攻击、爬虫等造成大量空命中。
3、 突发性热点缓存,
解决方案:
1、将空数据也设置为缓存,并设置过期时间(几分钟)。
2、布隆过滤器。

3.4 缓存雪崩

描述:缓存失效(缓存层宕机)后,导致大量请求都会打到存储层,存储层的调用量暴增,造成存储层也会级联宕机的情况。

解决方案:
1、保证缓存层服务的高可用性。
2、以来隔离组件为后端限流熔断降级,核心业务访问达数据库,非核心业务返回预定义的信息。
3、提前演练。在项目上线前,演练缓存层宕机后,应用及后端的负载情况以及可能出现的问题,在此基础上指定一些预案。

3.5 缓存击穿

描述:缓存击穿是指当大量缓存在同一时间失效可能导致大量请求,同时穿透缓存直接访问到数据库。造成数据库压力瞬间骤增,大量请求阻塞,甚至挂掉。

解决方案:
1、针对这些缓存设置不同的过期时间(差异化设置过期时间),如:在24小时基础上增加一个随机数(增加几分钟)。
2、使用分布式锁,保证同一时刻只能有一个查询请求重新加载热点数据到缓存中,这样,其他的线程只需等待该线程运行完毕,即可重新从Redis中获取数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值