1.redis是用来干吗的?redis
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.sql
经过上面redis官网的说明能够看出,redis是一个能够对内存数据结构进行存储的东西,它能够用做数据库、缓存和消息代理。它支持数据结构,如字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具备半径查询和流的地理空间索引。Redis具备内置复制,Lua脚本,LRU驱逐,事务和不一样级别的磁盘持久性,并经过Redis Sentinel提供高可用性并使用Redis Cluster自动分区。在项目中主要用来用做数据的缓存,将数据缓存在redis中,减轻对底层数据库的访问压力,得到更高的并发和更快的请求响应速度。数据库
2.在项目中如何使用?咱们知道,项目中的数据通常状况下都是存在于数据库当中的,并且数据库的并发性能不是特别高,若是同时接收到大量的请求,数据库可能就会崩掉,并且sql查询会消耗必定的时间,增长请求的响应时间,因此不用缓存会出现系统没法支撑大量的并发状况,请求响应时间会变长等问题。若是咱们在第一次访问某个数据的时候,好比根据一个订单id获取订单的详细信息,将这条数据再返回的时候,也放到缓存里面去,那么下次就能够直接在缓存里面返回数据,没必要去查询数据库,这样就能够减轻数据库的访问压力,并且缓存在内存中,势必要比直接访问数据库的速度要快不少,这样也就减少了请求的响应时间,redis在项目中就主要使用来解决数据的缓存问题。缓存
3.为啥要使用缓存?使用缓存的目的主要有两个:(1)高性能好比说有一个很复杂的sql数据查询,这个查询要耗费大量的时间,若是每次都直接取数据查询,那必然会对请求响应时间形成很大的影响,若是能在第一次查询完毕以后,将其直接保存在缓存当中,下次查询的时候,直接在缓存中拿走现成的数据,这样就会大大缩短请求的响应时间。(2)高并发咱们知道数据库能承受的并发是有限的,那么在流量高峰期(好比,抢购、打折、秒杀等等),会有大量的请求进入咱们的系统,好比查询某个商品的详情,若是咱们没有缓冲,那么给次查询都要走数据库,假如咱们的数据库每秒只能接受2000个请求,结果一秒钟进来了5000个请求,那么数据库就直接崩掉了,毫无高并发可言,而若是咱们中间具备缓存服务,那么在第一个用户查询商品详情时(或者提早将放好)咱们能够直接将商品的详情信息数据放到缓存里面,这样在后续用户查询时就能够直接走缓存,不走数据库,缓存是基于内存的,它的访问速度快,并发高;所以就能够提供一个高并发的支持。数据结构
4.用了缓存会出现什么问题?主要常见的有下面三个问题1)缓存与数据库双写不一致2)缓存雪崩3)缓存穿透4)缓存并发竞争架构
Flink系列精华文章合集:并发
后面会继续更新更多实战案例...分布式