1.Redis的信息

(1)单线程容易实现。

(2)效率高轻松处理每秒几十万数据(因为是占内存的所以CPU不是瓶颈)。

(3)支持数据类型多(String,List,hash,set,zSet)。

使用 NoSQL 从数据库中读取数据进行缓存,就可以从内存中读取数据了,而不像数据库一样读磁盘。现实是读操作远比写操作要多得多,所以缓存很多常用的数据,提高其命中率有助于整体性能的提高,并且能减缓数据库的压力,对互联网系统架构是十分有利的。

而且它也能满足互联网高并发需要高速处理数据的场合,比如抢红包、商品秒杀等场景,这些场合需要高速处理,并保证并发数据安全和一致性。

2.Redis缓存击穿问题

       缓存击穿其实就是指Redis缓存本来是存在的但是因为过期时间到了然后在这个时候有大量的请打带过来导致请求直接打到数据库大量数据同时访问数据库,这样增加了数据库的压力容易导致数据库崩溃瞬间把后端DB压垮。

      过期时间的设置

        模拟场景:比如我们将redis缓存设置的过期时间都为一个小时,那么一个小时后将有大量的缓存过期此时如果有大量的请求涌入进来就直接涌入进数据库就容易造成缓存击穿的问题。

        所以我们应该将redis缓存的过期时间进行随机的设置避免同一时间过期数据太多。

      热点数据的过期

       模拟场景:假设在某一时间redis种一个非常热门的一个key过期了然后就有大量的请求打入。

        所以我们应该访问的时候把这个缓存时间更新。

2.Redis缓存穿透问题

        缓存穿透就是对于请求查询的数据既不存在于redis的缓存中又不存在于数据库中,但是这样每次做查询的时候都会走数据库来查询。所以如果大量这种请求涌入就会造成数据库崩溃。

        应该去给查不到的key设置一个空值存入缓存中过期时间不能太长一般五分钟即可。

3.缓存与数据库双写不一致

 

        对于高并发场景下的这种多个用户进行写的操做再去更新Redis缓存时候可能会导致更新数据出现脏数据。

        可以用到读写锁来解决此问题。

        读写锁(ReadWriteLock)

        其实在很多的电商场景下都是用到的读操作是要远远高于写操作的。例如京东、淘宝、拼多多等这些用户去用到浏览商品的读操作很多但是去用到下单购买的写操作却很少。如果用普通的锁去让用户的各种操作之间都进行互斥的话就会出现阻塞时间很长的现象如何就会等待较长的时间,所以使用我们的读写锁来处理就可以即准确的更新Redis的缓存数据又可以减少客户的等待时间。

        读写锁(ReadWriteLock)同Lock一样也是一个接口,提供了读锁(readLock)和写锁(writeLock)两种锁的操作机制,一个是只读的锁,一个是写锁。ReentranReadWriteLock是其实现类他的readLock读锁之间是不会互斥的是并行状态各种读操作之间就像没有锁一样的。而writeLock与readLock之间和writeLock与writeLock就会互斥会竞争锁。

        

 

                   

 
 

Logo

开源、云原生的融合云平台

更多推荐