Redis技术学习总结 | 青训营

47 阅读3分钟

Redis的诞生原因:

1. 数据从单表演进出了分库分表

2. 同时从单机演进出了集群,使得数据量大量增长同时读写数据压力不断增加

这样以来呢其实就有数据的冷热问题了,什么是数据的冷热呢,其实简单理解就是数据访问的频率的高低,个人理解是一个相对的概念。经常访问到的数据称之为热数据,那么既然访问频率很高,那么如果存在主存当中,每次去访问时间开销就会很大,这样很不划算效率很低,那么参考计算机组成,是不是可以将热数据存到内存当中呢,这也即是Redis的基本工作原理,引出下一片。

Redis的工作原理:

数据直接从内存当中读写,定时保存在硬盘当中以防重启以后数据丢失,增量数据保存在AOF文件当中做二次保险,同时在单线程上执行所有命令。

因其特性,它注定无法维护太过大的数据(使用集群可以解决部分问题),但是它的优势也很明显:读写速度快

Redis使用的实际案例

1. 连续签到2.消息通知(例如文章更新)3.计数4.排行榜5.限流(放行请求)6.分布式锁

其实从这些案例也能看出来Redis的功能,前面5个案例主要是涉及到更新内容,实时性要求很高但是对内容的数据量要求不算特别大,比方说计数啊排行榜这种,用Redis来实现优势就相当突出了;最后一个案例呢主要就与Redis的另一个特性——单线程执行命令有关了,要求一次只能由一个协程执行

Redis使用的注意事项

1. 避免使用大key,热key

危害在哪呢?所谓大key就是那种key对应的value的字节数相对Redis的正常处理而言很大的key,那其实根据Redis的工作原理也可以看得出来危害了,读取时间长,查询速度慢还会堵塞服务让其他的数据也进不来。消除的方法呢,也很简单,三种方法拆分,压缩,集合类结构管理,单通过名字也应该知道这些方法的思路;下面继续来说一下热key,指的是那种QPS特别高,不利于负载均衡的key,解决方法也有三种:第一种设置localcache,这个又与计算机的组成相当像;第二种同样也是拆分,为了负载均衡;第三种则是采用访问代理的形式提高承载能力

2. 慢查询

危害上面介绍大key的时候也有描述,基本也与大key相关,所以解决方法自然类似

3. 缓存穿透,缓存雪崩

前者是热点数据查询绕过缓存直接查询数据库,后者是大量的缓存同时过期,这两类问题同样也都会导致数据库的响应速度以及稳定性。

解决方法对于穿透而言,要么缓存空值,要么采用过滤器来压缩,存储更多的key值

对于雪崩而言,分散缓存的过期时间,或者采用缓存集群的形式,避免单机宕机以后造成的缓存雪崩