Redis入门:简介
1、介绍
nginx tomcat集群可以实现10万-百万的并发访问量;目前的架构不能承受如此海量的访问,瓶颈还是在数据库,尤其是查询。要想突破数据库的瓶颈,就需要使用缓存技术。
Redis是分布式的、nosql、key-value、可持久化、内存缓存数据库。
2、特点
2.1 分布式
海量数据分片存储。如下图:
2.2 nosql
not only Structured query language.
不仅仅支持关系型数据——结构化数据(json);支持非关系型数据——非结构化。
Nosql有许多种,redis是其中的一个,它们分为:
- 列存储:Hbase、Cassandra
- 文档存储:MongoDB
- Key-value存储:Berkeley DB、MemcacheDB、redis。其中redis最强。
- 图存储:Neo4j、Versant。这块基本不用。
- Xml存储:Berkeley DB xml、XBASE。Oracle很早已经支持这种存储方式了。
结构化数据
mysql数据库中的每个表格的每条数据记录都是关系型、结构化数据。
例如:学生表格
no | name | age | gender |
---|---|---|---|
1 | 张三 | 35 | 男 |
非结构化数据
数据长度类型不固定。
例如:
《葵花宝典》: 欲练此功,必先自宫,若不自宫,也可成功,若已自宫,未必成功。
2.3 key-value
结构的特点:key自定义的值,value是原数据的切分片段。
代码语言:javascript复制key=”《葵花宝典》”;
value=” 欲练此功,必先自宫,若不自宫,也可成功,若已自宫,未必成功。”;
2.4 可持久化
针对内存存储的重要特点;数据的恢复机制。
2.5 缓存数据库
缓存数据库可以添加的位置,可以在项目中的很多位置。
2.5.1 数据库缓存
数据库查询执行的过程包括sql语句执行,组织查询结构resultSet。
数据库缓存根据sql可以创建缓存的key,缓存已经拥有了查询过的resultSet,节省了前面的调度组织时间。
2.5.2 持久层缓存
减少从数据库获取结果和创建连接的资源消耗时间,节省了转化成对象的过程。
2.5.3 业务层和控制层
减少调用的层次。
2.5.4 缺点
如果过多的使用redis或者其他缓存的技术,容易产生数据的冗余导致内存或者磁盘存储空间过大占用。
3 缓存的作用
- 1.减少数据库的访问压力。
- 2.减少网络传输。
- 3.减少数据传递层次数。
redis的引入可以适当的添加在控制层和业务层。
4 主流的缓存架构技术
4.1 Ecache
很多数据库的底层缓存都是使用ecache,并发量差。
4.2 memoryCache
曾经memoryCache市场占有率90%以上长达10年,直到redis出现,这个局面被打破。
- 优点:速度,效率和redis不相上下。
- 缺点:不落地、没有持久化过程,一旦缓存集群出现数据丢失的过程(宕机、灾难重启),会出现雪崩/缓存击穿(面试题)。
4.3 Redis
性能高,并发高,单实例,单线程,持久化可恢复数据能力强。
5 雪崩/缓存击穿
当海量的数据访问,请求并发,涌入集群。需要高性能的处理过程,缓存的存在对于高并发的意义非常大。如果缓存失效,海量请求访问数据库,造成数据库宕机,如果缓存数据没有恢复的情况下,重启数据库后,高并发的请求访问会导致数据库再次宕机。这种缓存失效导致的数据库重复宕机,重启,叫做缓存击穿/雪崩 。
解决缓存击穿/雪崩的方法:
- 1.缓存集群永不宕机。集群中的一部分服务器一直提供访问数据的需求。
- 2.缓存技术添加持久化的功能。Redis可以做到。
6 REDIS基础应用场景
- 1、Web间Session共享。多个war工程共享一个Session。
- 2、分布式缓存
因为redis为键值对,而且它提供了丰富的adapter可以支持到C、.net、java客户端,因此对于异质平台间进行数据交换起到了作用,它可以用作大型系统的分布式缓存,并且其setnx的锁常被用于秒杀、抢红包这种电商活动场景中。