nginx+tomcat集群可以实现10万-百万的并发访问量;目前的架构不能承受如此海量的访问,瓶颈还是在数据库,尤其是查询。要想突破数据库的瓶颈,就需要使用缓存技术。
Redis是分布式的、nosql、key-value、可持久化、内存缓存数据库。
海量数据分片存储。如下图:
not only Structured query language.
不仅仅支持关系型数据——结构化数据(json);支持非关系型数据——非结构化。
Nosql有许多种,redis是其中的一个,它们分为:
mysql数据库中的每个表格的每条数据记录都是关系型、结构化数据。
例如:学生表格
no | name | age | gender |
---|---|---|---|
1 | 张三 | 35 | 男 |
数据长度类型不固定。
例如:
《葵花宝典》: 欲练此功,必先自宫,若不自宫,也可成功,若已自宫,未必成功。
结构的特点:key自定义的值,value是原数据的切分片段。
key=”《葵花宝典》”;
value=” 欲练此功,必先自宫,若不自宫,也可成功,若已自宫,未必成功。”;
针对内存存储的重要特点;数据的恢复机制。
缓存数据库可以添加的位置,可以在项目中的很多位置。
数据库查询执行的过程包括sql语句执行,组织查询结构resultSet。
数据库缓存根据sql可以创建缓存的key,缓存已经拥有了查询过的resultSet,节省了前面的调度组织时间。
减少从数据库获取结果和创建连接的资源消耗时间,节省了转化成对象的过程。
减少调用的层次。
如果过多的使用redis或者其他缓存的技术,容易产生数据的冗余导致内存或者磁盘存储空间过大占用。
redis的引入可以适当的添加在控制层和业务层。
很多数据库的底层缓存都是使用ecache,并发量差。
曾经memoryCache市场占有率90%以上长达10年,直到redis出现,这个局面被打破。
性能高,并发高,单实例,单线程,持久化可恢复数据能力强。
当海量的数据访问,请求并发,涌入集群。需要高性能的处理过程,缓存的存在对于高并发的意义非常大。如果缓存失效,海量请求访问数据库,造成数据库宕机,如果缓存数据没有恢复的情况下,重启数据库后,高并发的请求访问会导致数据库再次宕机。这种缓存失效导致的数据库重复宕机,重启,叫做缓存击穿/雪崩 。
解决缓存击穿/雪崩的方法:
因为redis为键值对,而且它提供了丰富的adapter可以支持到C、.net、java客户端,因此对于异质平台间进行数据交换起到了作用,它可以用作大型系统的分布式缓存,并且其setnx的锁常被用于秒杀、抢红包这种电商活动场景中。