Redis 知识点整理

Redis简介

Redis 是一个将数据放置在内存中的数据库,这一点和其他很多数据的数据库不同。因为这个不同,所以Redis 有这和其他数据不能比的读写优势。其读取数据能够达到10多万次每秒,写数据也能够在八九万次每秒。由于这个特性,把他用来作为热点数据的缓存使用成为了应对高并发的一大利器。

Redis数据结构:是一种典型的基于K-V(键值对)的数据结构来存储数据。其能够存储的数据类型:                                                                        String,List,Hash,Set,Zset(有序Set,可以用来排名使用,主要是很好的利用的set中数据不能够重复的特                                               性)

                         补:Set数据不能过重复的特征的原因:这里简单说下,主要是(set这里是讲hashSet)因为其实用hashMap(K-                                       V)中的K存储值,V默认为PENRENT。而因为重复的k都会覆盖。所有实现的Set的不能够重复的特性。

Redis持久化:redis 作为数据库,其还是要有数据的特征之一啥,能够持久化数据。而Redis 提供了两种持久化数据的方式:

                       一种Redis Data Base(RDB) ,其能够实现在把redis内存中的数据,在特定的时间(这个方式持久化数据不是                                   实  时保存 在磁盘)保存在一个叫dump.rdb的文件中,因此,这种方式持久化redis的数据,能够减小redis的                                  压力,但是不 能 够保证本地磁盘数据的失效性,在redis出现故障之后,可能会出现数据丢失的情况。

                          一种是aof(append on  file) ,这种模式的保存数据的就是在redis执行每一 个数据操作的时候,都会向磁盘                                    写数据。其生成的文件是多个的。其会增减redis的压力,但是能够保证数据的完

Redis的过期策略/删除机制:redis 作为内存数据,其实是在高并发的情况下,是很容易出现内存溢出的情况的,为了避免内存溢                                               出的情况,redis采取两种方式来保证内存的不出问题。

                                             一种就是就是过期策略,其分为定时过期:是指  在每一个redis数据在存储的时候,都设置了一个失                                                效时间,当到了失效时间的时候,这个数据就会失效,但是这样做,会在一定程度上增减redis的压                                                力,影响其数据读写;

                                             定期过期:就是指redis在固定的 时间去查找exprise的字典,把其中部分失效的 数据删除,这样可                                                  以 在 一定缓解redis执行的效率问题。

                                             惰性过期:是指在redis操作数据的时候,在查看该数据是否过期。而通常我们就采用定期+惰性的策                                                略

                                              虽然过期策略会在一定程度上避免内存溢出的情况,但是这种策略是不能够完全避免内存溢出情况

                                               出现的,所以为了在redis的内存用完的时候,避免redis内存溢出导致问题。redis还提供了一种方式

                                                来处理问题

                                               删除机制:其实redis的数据删除机制就分为两个大类。一个是在设定了失效时间的数据中进行:随                                                 机、使用最少、全部删除。一个是就在redis的数据中:随机,使用最少,不删除。而为了是redis                                                   中的 热点性保持较好,两种方式相结合,并且都选中使用最少的数据进行删除。

前面,我们提到了,redis一般作为数据缓存来使用,这样可以让许多热点的查询操作直接使用缓存中的数据,这是是能够避免大量的对本地数据库的操作,从而避免数据库因连接操作过多。从而出现效率降低或者宕机的情况。但是随之出现了,我们如何保证redis缓存中的数据与本地数据库的数据的一致性问题。而且作为缓存,我们还要面对缓存击穿,穿透,雪崩的问题。

缓存与本地数据库一致的问题:为甚出不一致呀,其实就程序对本地库数据进行了改,删的操作之后,没有及时的对缓存中的数据进行处理,导致的数据不一致。

                 具体流程如下:其中,是否异步设置缓存的数据,看具体情况。删除缓存中的数据,在进行更新,删除的本地操作的时候,一定要执行。

            

 

击穿:其实就是数据库在查询数据的时候,在缓存中没有查询到,需要到本地数据库中查询。其实这个问题,我们如果数据库的

           的查询情况十分多的话,在数据进行更新、新增的时候,就必须要把数据设置进redis,这样可以一定程度上避免击穿事件             概率的出现。而且对于那些经常查询的,但是数据更新不平凡的数据,可以设置为不失效,只是在相关数据进行本地增,

            删,改的时候,在更新缓存中的数据。这样也能够减少击穿事件的发生。但是不能够完全避免。毕竟redis中缓存的数据                大多数只 是本地数据库的部分数据。

穿透:穿透其实就是数据在缓存中和数据库中都没有查询到相关的数据。针对这种情况。其实是有一个经典的处理方式:布隆过             滤器。其主要是用来判断一个值是否存在。适合用在黑名单,uri去重的场景中等场景中。其核心思想是将一个对象经过                 hash值的计算所得出的值。在其映射的向量值的地方该为1 。其就表明这点地方有值。而布隆过滤器就是一个装满了二进             制的数组。而且,因为hash计算的时候有hash冲撞的可能。这也就导致了布隆过滤器有一定的误判率。而我们只有通过               增加hash的计算方式来尽量减少误判率。但是计算方式的增加。有会加大内存,降低效率。所以要根据场景要求的误判率

           以及数据的数量。通过公式来计算得出合适的hash计算方式的条数。如图中:每个对象在布隆过滤器中都要经历过三次               hash计算。而x通过三次之后,存储中布隆中了。而y发现第一,第二,都和x的第一,第二的hash相同(极端考虑哈)。

           如果第三次相同,其实在布隆里面就会认为x,y 其实是一个对象。但是现实不是的,这就是因为hash冲撞导致的布隆误判

          的发生。

               所以通过布隆,我们可以对不合法的请求进行过滤。避免非法的请求导致的缓存穿透的情况发生。

               Redis  集群模式:  哨兵模式、主从模式 ,Redis 的订阅/发表功能,Redis 分布式锁等。之后会补上的。

               

   

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值