深入了解redis

深入了解redis

认识redis:

redis是一个基于内存的数据库,因为是基于内存存储设计所以性能很好,查询的速度非常快,所以常被用作缓存数据库来使用,redis的数据存储结构是基于key-value的,能存储的数据类型有5中,分别是String,hashMap,list,set,treeSet.

因为redis是将数据缓存在内存中,所以在断电的时候内存的数据就会丢失,那redis数据库的信息岂不是会丢失??答案不会。因为redis不仅可以做缓存数据库,也可以做持久化数据库。它也可以将数据持久化到硬盘中。redis会实时将内存中的数据持久化到硬盘中,redis的持久化策略有两种:

redis持久化策略:

rdb基于快照的持久化策略方案:

Rdb:redis会定时将内存中的数据通过快照(好比拍照片)方式实时持久化到硬盘中,快照文件以.rdb结尾,这时redis默认的持久化策略;因为是基于周期性快照所以总是在数据变更后在拍照,这样如果还没来得及拍照数据就丢失了,这也是快照策略的缺点(会导致数据丢失),但也可以通过修改redis的配置文件(redis.conf)来最小限度的降低这种丢失(不能完全避免)。

修改快照的周期,多久时间拍一次照,但如果设置的频率过高就会影响redis的性能,这就体现出了事务的两面性又想马儿不吃草还想马儿跑的好。下面给一个修改的例子

aof基于命令集的持久化策略方案:

aof:append only file ,文件追加的方式,实际上.aof文件保存的是一个命令集合。把所有对数据库修改操作的命令保存在.aof文件中(增删改),数据库恢复的时候把所有命令执行一遍。

redis默认是使用的rdb持久化方案,如果需要使用aof持久化策略只需在redis配置文件redis.conf打开aof策略模式就可以了,如下图,当两种策略同时开启的时候手动设置的会覆盖掉默认的设置(即会使用aof模式)。

通过以上介绍我们知道了redis是基于内存所以对数据的操作会比较快,那么我们什么时候或场景来使用redis数据库做缓存呢???

这个没有硬性标准,redis无处不在,具体要看业务的需求(可能你会任务这是废话,我也觉得。。。)

redis大多的适用场景是:

在当用户对数据库的频繁操作严重影响数据库的性能的时候。比如典型的电商 很多用户都要浏览商品,就要把商品列表展现给用户,那么多用户浏览,如果不做缓存每个用户浏览都会执行一次数据库的查询工作,性能大大降低,导致用户响应效率低,严重的直接系统崩溃。那么这时候redis就能派上用场。当有一个用户浏览的时候将数据库查询的商品列表缓存在redis中,其他用户如果浏览就直接去缓存中查找就可以了不在需要去再去连接数据库,这样查询效率也提高了,数据库压力也降低了,所以缓存的作用(这里不仅仅是redis,比如memche等)是非常重要的。

在业务中添加缓存的基本思路(这里是针对缓存不单单是redis)

在那一层添加缓存没有明确的界限,像控制层调用业务层的话,个人习惯将缓存添加到业务层(这里看个人对缓存的划分,可以划分为业务层,当然也可以划分为控制层)。

1:在对数据库执行操作之前通常会先去执行缓存查询(即缓存查询要放到数据库查询之前,反之就没什么意义),查询缓存如果抛出异常应该不影响业务的执行,只能说明查询缓存有异常应该接着去数据库查询

2:如果缓存中有需要查找的数据直接返回该数据就行不用再执行查询数据库的操作(可以更新该数据的缓存时间)

     如果缓存中没有数据就要去查询数据库,然后将查询的数据添加到缓存并设置缓存超时时间,以便下次查询时可以直接去缓存     中查找

3:缓存同步问题

对数据进行增删改操作后,应该先查询缓存中该数据的key并将其删除,防止其他用户一直是以前的数据。这样其他用户就会再去查询数据库得到更新后的数据缓存到redis中,这样就能保证缓存实时同步的问题。

本人小白,以上是个人对缓存的一些理解和看法,不妥之处,多多指正!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值