redis成长之路-初步了解

redis是基于内存的key-value数据库;
redis是用来进行做高性能查询的非关系型数据库,因为它的数据是存在内存中,所以,读取的效率非常高,所以,用它来存储一些热点数据,也就是说,经常被访问的数据,并发量高的数据。放在redis中进行查询。可以极大的提高用户请求的响应速度,并且同时可以极大的缓解数据库的压力。
redis的优点,查询速度飞快。而且支持多种数据结构类型。这些复杂的数据类型,配合其性能又可以去做一些特定的服务和功能。总之就是很强。
redis的缺点: 因为是基于内存的存储,所以,存储量是有限的,只能用于少量数据的存储和查询。这个就是redis的明显的缺点了 。

在现实生活中redis的应用场景有那些?
就是用来做非关系数据库,用来提供热点数据的高效查询。
而用redis数据库会引发那些问题呢?
用redis 数据库会引发的问题有:
数据库(Data Base),简称DB。
第一:
缓存穿透问题:
这个就是用户去查询缓存和数据库中都没的数据,这样的话,会造成数据库压力增大。因为查询数据库,是要遍历数据库的。重复查询不存在的数据,是会造成数据库短时间重复遍历,如果数据库的数据量很大的话,你想想,会造成什么 后果?
解决方法:
1,对于一些不合法的查询,比如id<0;直接在表层给过滤掉。
2,或者在数据库中存入数据,key-null,设置较短的失效时间,比如30秒。

第二:
缓存击穿问题:
这个就是用户去查询缓存中没有,而数据库中有的数据。大量的用户去查询同一条数据,造成了高并发的访问,使得数据库压力增大。 造成这种现象的原因是:在缓存中,热点数据失效。所以,同一时间,大量用户去访问数据库。
解决方法:
1。设置热点数据永不失效。
2.加互斥锁,具体细节不会

第三:
缓存雪崩问题:
这个就是缓存中的大量数据同一时间失效, 这样的话,这大量的数据就要去数据库中查询,严重的时候能导致数据库宕机。
解决方法:
1.设置热点数据永不过期。
2.设置热点数据,随机过期时间,以此减轻服务器压力。

第四:
数据库和缓存双写一致性问题:
这个就是说,如何能够保证数据库中的数据和缓存中的数据一致性的问题?
更新的机制有一些,但是都有问题,其中最好的就是
先更新数据库,再进行删除缓存。
为什么要这样呢? 因为这样子可以很大的保证数据一致性的问题。facebook用的就是这个。
这个理论上也是会有问题的,但是根据数据的读写速度,和并发的规则,巧妙的避开了很多的坑。
可以看看这个https://blog.csdn.net/hukaijun/article/details/81010475

如果删除缓存失败那么就重复进行删除好了,直到删除成功。

redis的性能很高,可以支持每秒10w次的并发,影响redis性能的有那些?
第一:网络 主要是说的是带宽 影响数据的传输
第二:cpu
第三:内存 对于比较大的数据,比如10k的操作会变慢。
其它:在虚拟机中会变慢,连接数提高的时候会变慢。

其中最主要的就是保存的值的大小。如果值大的话,对性能的影响就非常大。这里超过10k影响的就是内存和带宽了,超过最大传输单元,一般是1000多字节吧,1K好像等于1024字节吧。
redis底层是使用socket进行通信的。这是因为,socket通信,简洁高效,传输的内容非常简单。这样能有效减少存储的值的大小,而性能就等于 带宽 / 传输的值大小, = 单位时间的并发量。
我也不知道这样说准确吗? 但是redis是有个通道机制的,就是查询值,批量进行查询,不需要等一个响应之后,再进行下一个查询,这样的话,性能可以提高4倍左右。

学习一个东西,应该从那些方面去学习?
第一 : 这个东西是什么?
第二 : 这个东西的用处 ?为什么用它,有什么好处?
第三 :这个东西是怎么实现的?
此为素质三连!!!

猜你喜欢

转载自blog.csdn.net/hjkuanggong/article/details/89416274