复习资料之redis全家桶(一)

Redis是什么?

Redis是个开源的底层使用C语言编写的Key-value存储数据库

适用的场景有:

缓存,事件发布订阅,高速队列等

1.缓存数据

最常用的,对经常需要查询并且变动不是很频繁的数据,常称做热点数据

2.消息队列

相当于消息订阅系统,比如ActiveMQ,RocketMQ,如果对数据有较高一致性要求时,还是用MQ

3.计数器

比如统计点击率,点赞率,redis具有原子性,可以避免并发问题

4.电商网站信息

大型电商平台初始化页面数据的缓存,比如购买机票的时候首页的价格和你点进去的价格会有差异

5热点数据

比如新闻网站实时热点,微博热搜等,需要频繁更新,总数据量比较大的时候直接从数据库查询会影响性能

Redis有哪些数据结构及应用场景:

String,hash,List,Set,SortedSet,HyperLogLog,Geo,BloomFilter,RedisSearch;

1.String

字符串是最常用的的数据类型,能够存储任何类型的字符串,包括二进制,JSON化得对象,甚至是base64编码之后的图片,redis中一个字符串最大的容量为512MB

2.Hash

常用作存储结构化数据,比如论坛系统中可以用来存储用户的ID,昵称,头像,积分等信息,如果需要修改其中的信息,只需要通过Key取出Value进行反序列化修改某一项的值,再序列化存储到Redis中

3.List

List的实现为一个双向链表,即支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓存队列等,都是用这个数据结构,可以lrange命令,做基于Redis的分页功能,性能极佳,用户体验好

4.Set 对外提供的功能与List类似,是一个列表的功能,特殊之处Set可以自动排除重复的数据,当需要一个存储列表数据,又不希望出现重复数据时,这个时候就可以选择使用set

5.Sorted Set

可以按照某个条件的权重进行排序,比如可以通过点击数做出排行榜的数据应用

Redis为什么会这么快?

1.Redis是纯内存操作的,需要的时候需要我们手动持久化到硬盘中

2.Redis是单线程的,从而避开了多线程中上下文频繁切换的操作

3.Redis数据结构简单,对数据的操作也比较简单

4.使用底层模型不同,它们之间底层实现以及客户端之间通信的应用协议不一样,Redis直接自己构建VM机制,一般的系统调用函数,会浪费一定的时间去移动和请求

5.使用多路I/O复用模型,非阻塞I/O

Redis中如果有大量的可以需要设置同一过期时间,需要注意的问题?

有大量的key过期时间比较集中的话,到过期的那个时间点,Redis可能会出现短暂的卡顿现象,严重的话,出现缓存雪崩,这时候我们需要在时间上加一个随机值,使得我们的过期时间分散一些,或者不设置过期时间

Redis之缓存击穿

缓存是为了缓解数据库压力而添加的一层保护层,当从缓存中查不到我们需要的数据,就要去数据库中查询,这时候如果频繁去访问缓存中没有的数据,那么缓存就失去了存在的意义,瞬间所有的请求压力都落到了数据库上,这样导致数据库连接异常

解决方案:

1.后台设置定时任务,主动的去更新缓存数据,这种方案容易理解,但是当key比较分散的时候,操作起来比较复杂

2.分级缓存,比如设置两层缓存保护层,1级缓存失效时间短,2级缓存失效时间长。有请求过来优先从1级缓存中查找,如果在1级缓存中没有找到相应的数据,则对该线程进行加锁,这个线程再从数据库中取到数据,更新至1级和2级缓存,其他线程则直接从2级缓存中获取

3.提供拦截机制,内部维护一系列合法的Key值,当请求不合法时,直接返回

Redis之缓存雪崩

缓存雪崩是指缓存由于某些原因(比如宕机,cache服务挂了或不响应),导致大量请求到达后台数据库,从而导致数据库崩溃,整个系统崩溃,发生一系列的应用停止

图片来源自网络

解决方案:

1.给缓存加上一个区间内的随机生效时间,不同的key设置不同的失效时间,避免同一时间集体失效

2.和缓存击穿方案类似,做二级缓存

3.利用加锁或者队列方式,避免过多的请求同时对服务器进行读写操作

结语

Redis的性能极高,读的速度为11w次/s 写的速度是8.1w次/s

缺点是

1.由于是内存数据库,所以单台机器存储的数据量有限,需要提前预估,删除不需要的数据

2.当修改数据时,需要将持久化到硬盘中的数据重新加入到内存中,时间比较久,这时候redis是无法正常运行的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值