Redis?为什么要用Redis?Redis一些常见问题及解决方法

什么是Redis?

Redis是NoSql,我们常用的数据库Mysql,SqlServer等都是关系型数据库,而Redis是非关系性数据库,Redis是一个可以基于内存的Key,Value数据库。

Redis的优点

1.关系型数据库是运行在磁盘,读写需要用到I/O操作,而Redis运行在内存中。读取速度快。官方号称支持并发11瓦特读操作,并发8瓦特写操作,可以说是相当彪悍了
2.虽然读取在内存中,但是也提供了持久化操作,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
3,支持数据结构丰富(string(字符串),list(链表),set(集合),zset(sorted set - 有序集合))和Hash(哈希类型,md5加密出来的那个串)

为什么使用Redis

1.性能问题

Redis?为什么要用Redis?Redis一些常见问题及解决方法
服务器读取数据库耗时长,而直接读取Redis缓存显然是更快

2.并发

多个请求同时访问数据库,数据库承受不了那么大的压力,数据库会出现连接异常,影响用户体验
Redis?为什么要用Redis?Redis一些常见问题及解决方法
这个时候,就需要使用的的Redis的做一个缓冲操作,让请求先访问到的Redis的的,而不是直接访问数据库。

什么是缓存击穿

Redis?为什么要用Redis?Redis一些常见问题及解决方法
缓存击穿就是多个请求访问的数据redis内存中没有,就会直接访问到mysql数据库,(数据库没有这个数据,所以就不会存到redis缓存中,所以才会在redis缓存中查不到),而数据库处理不了这么多请求,这个时候redis就没有起到作用而是直接被穿透打到mysql数据库了,这就是缓存击穿
解决方法
可以加判断,当查询redis缓存中没有转发到mysql数据库时,数据库没有该数据就把查询的数据存到redis缓存中,值为null,并设置一个缓存的失效时间,这时在缓存失效之前,所有通过此key的访问都被缓存挡住了。后面如果此key对应的数据在DB中存在时,缓存失效之后,通过此key再去访问数据,就能拿到新的value了。

什么是缓存雪崩

缓存雪崩是指,我们的缓存设置的过期时间相同,导致大面积的缓存过期。请求都转发到了DB(mysql)数据库中。DB压力过大雪崩。
解决方法
将系统中key的缓存失效时间均匀地错开,防止统一时间点有大量的key对应的缓存失效。比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。