分享

Redis简介

 昵称11935121 2018-06-30

什么是Redis

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

优点

  1. 性能,由于是存储在内存当中,所以有较快的读取速度,读在10万每秒,取在8万每秒。
  2. 并发,可以将redis做一个数据库的缓冲,让请求先访问redis而不是直接访问数据库
  3. 多种数据结构,不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  4. 持久化,支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  5. 支持数据备份,Redis支持数据的备份,即master-slave模式的数据备份。

缺点及解决办法

缓存和数据库双写一致性问题

必然存在不一致问题,如果对数据有较强的一致性要求,不要加缓存,直接访问数据库。先更改数据库,在删除缓存,可能存在删除缓存失败问题,提供补偿策略:消息队列

缓存雪崩问题

黑客故意请求缓存中不存在的数据,导致所有请求都到了数据库上

缓存击穿问题

缓存同一时间大面积失效,所有请求都到了数据库上

解决这两个问题方案:给缓存加上随机失效时间,避免同时失效。使用互斥锁。双缓存,设定不同的缓存时间。

缓存的并发竞争问题

1、redis事务机制,不推荐。因为大多数生产环境都是redis集群环境,做了数据分片。

2、如果对key操作,不要求顺序,准备一个分布锁,去抢锁

3、如果对key操作,要求顺序,对系统设定不同的字段,那个修改了就修改这个字段

注意:

1、redis是单线程的,但是速度还是非常快

a.纯内存操作

b.单线程操作,避免了频繁的上下文切换

c.采用了非阻塞I/O多路复用机制

Redis简介

参照上图,简单来说,就是。我们的redis-client在操作的时候,会产生具有不同事件类型的socket。在服务端,有一段I/0多路复用程序,将其置入队列之中。然后,文件事件分派器,依次去队列中取,转发到不同的事件处理器中。

2、redis采用定期删除和惰性删除策略

定时删除和定期删除是不同的

定时删除:用一个定时器来监视key,如果key过期了就删除,但是会占用大量的CPU资源,当有大并发时,CPU因该将时间应用在处理请求 上而不是删除key

定期删除:默认每隔一段时间就检查是否有key过期,如果过期就删除。redis不是检查所有的key,而是随机抽测检查

惰性删除:在获取某个key的时候,redis会检查一下,如果过期了,就删除

采用定期删除和惰性删除也是有问题的,如果定期删除没有删除key,你也没有去请求key,内存就会越来越多。那么就因该采用内存淘汰机 制。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多