Redis(缓存服务器)讲解

 
 
 
Redis是一个key-value存储系统。和Memcached类似。
redis非关系型数据库也可以叫做缓存服务器。
 1.对于一些经常访问,但是不经常修改的数据
 2.经常变更但是不太重要的数据
 3.临时数据。:暂存功能。
 
redis的过程中遇到的问题:

缓存击穿

 现象:缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

 

 解决:其实,大多数情况下这种爆款很难对数据库服务器造成压垮性的压力,对主打商品都是早早的做好了准备,让缓存永不过期。即便某些商品自己发酵成了爆款,也是直接设为永不过期就好了。

缓存雪崩

   问题:其实集中过期,倒不是非常致命,比较致命的缓存雪崩,是缓存服务器某个节点宕机或断网。因为自然形成的缓存雪崩,一定是在某个时间段集中创建缓存,那么那个时候数据库能顶住压力,这个时候,数据库也是可以顶住压力的。无非就是对数据库产生周期性的压力而已。而缓存服务节点的宕机,对数据库服务器造成的压力是不可预知的,很有可能瞬间就把数据库压垮

 

 现象:缓存雪崩,是指在某一个时间段,缓存集中过期失效。

 

 解决:加上一个随机因子。这样能尽可能分散缓存过期时间,而且,热门类目的类型缓存时间长一些,冷门类目的类型缓存时间短一些,也能节省缓存服务的资源。

缓存穿透

   恶意攻击:假如有恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮数据库。即便是采用UUID,也是很容易找到一个不存在的KEY,进行攻击。

 

 现象:当我们去查询数据库的时候,首先会先去查询redis服务器找缓存值,在此期间我们如果查询不到就会直接去数据库查询,但是数据库我们没有这个值就会出现击穿现象。

 

 解决:可通过采用缓存空值的方式,如果从数据库查询的对象为空,也放入缓存,只是设定的缓存过期时间较短,比如设置为60秒

 

 

它支持存储的value类型相对更多:
  包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。
  在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。
  区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis支持丰富的数据类型,
  最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。
Redis通常将数据存储于内存中,或被配置为使用虚拟内存。
Redis有一个很重要的特点就是它可以实现持久化数据:
         通过两种方式可以实现数据持久化:
          使用RDB快照的方式,将内存中的数据不断写入磁盘;
          或者使用AOF日志方式,记录每次更新的日志。前者性能较高,
          但是可能会引起一定程度的数据丢失;后者相反。
Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。
 应该说Memcached和Redis都能很好的满足解决我们的问题,它们性能都很高,总的来说,可以把Redis理解为是对Memcached的拓展,是更加重量级的实现,提供了更多更强大的功能。具体来说:
1.性能上:
     性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比
  Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起 Memcached,还是稍有逊色。
 
2.内存空间和数据量大小
     MemCached可以修改最大内存,采用LRU算法。
     Redis增加了VM的特性,突破了物理内存的限制。
 
3.操作便利上
     MemCached数据结构单一,仅用来缓存数据,
   而Redis支持更加丰富的数据类型,也可以在服务器端直接对数据进行丰富的操作,这样可以减少网络IO次数和数据体积。
 
4.可靠性上:
     MemCached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的。
  Redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价。
 
5.应用场景:
     Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)。
     Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。
 
6.需要慎重考虑的部分
 1.Memcached单个key-value大小有限,一个value最大只支持1MB,而Redis最大支持512MB
 2.Memcached只是个内存缓存,对可靠性无要求;而Redis更倾向于内存数据库,因此对对可靠性方面要求比较高
 3.从本质上讲,Memcached只是一个单一key-value内存Cache;而Redis则是一个数据结构内存数据库,支持五种数据类型,因此Redis除单纯缓存作用外,还可以处理一些简单的逻辑运算,Redis不仅可以缓   存,而且还可以作为数据库用
 4.新版本(3.0)的Redis是指集群分布式,也就是说集群本身均衡客户端请求,各个节点可以交流,可拓展行、可维护性更强大。
 
 
 
附属:
   简单的单机redis_windos教程:https://www.cnblogs.com/skmobi/p/11696620.html

posted @ 2020-09-21 17:28  RM-RF?  阅读(693)  评论(0编辑  收藏  举报