这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
今天的课程上学习了Redis,前几天的课程一直在讲数据库与存储系统方面的知识,上完关系型数据库后,铺垫到这里也该讲Redis了。
Redis全称Remote Dictionary Server,是一个开源非关系型数据库。Redis的存储完全基于内存操作,因此性能极高,读写速度快;而关系型数据库的读写需要磁盘操作,速度较慢。因此Redis一般可以作为数据库与服务端之间的缓存。同时Redis也支持持久化,能将数据保存到硬盘上防止丢失。
Redis的兴起与数据量的发展密切相关,当互联网应用不断发展后,数据量增大,数据从单表演进出了分库分表、MySQL从单机演进出集群,巨大的数据量和读写压力使得单独使用MySQL进行读写不太可能。基于cache的思想,将经常访问到的数据存储在内存中应运而生。Redis可以用于连续签到、消息通知、计数、排行榜、限流等多种场景。
在使用Redis中也有许多注意事项,在设置Key时需要避免大Key(对于string类型value字节数大于10KB,对于复杂数据结构大于10MB),否则会导致读取成本上升、慢查询、主从复制异常等危害。对于这个问题,我们可以通过拆分Key的方式来解决,把大Key拆成小Key,如将唱string拆分成多个,或者对value进行压缩,使用集合类结构。热Key指被用户访问QPS十分高的Key,热Key可能导致Server实例出现CPU负载不均或突增的情况。解决热Key可以通过设置Localcache降低Redis访问,拆分Key将value分散到不同实例,使用Redis代理功能。
缓存穿透指热点数据查询绕过缓存,直接查询数据库、缓存雪崩指大量缓存同时过期,这两种情况会导致系统性能受损。