Redis

1.redis是什么

  redis属于数据库,是key-value型的非关系型数据库,与mysql相比,redis的数据是直接存在内存的而mysql的数据是存在硬盘的,

所以redis的读写速度非常快,被经常用于缓存,另外,redis也可以实现分布式锁、它提供了多种数据类型来支持不同的业务场景,
除此之外,redis还支持事务、持久化、LRU驱动时间、LUA脚本等;

2.redis为什么比mysql快

1.Redis是基于内存存储的,MySQL是基于磁盘存储的
2.Redis存储的是k-v格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶。Redis会比MySQL快一点点。
3.MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,
磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。
4.Redis是单线程的多路复用IO,单线程避免了线程切换的开销,而多路复用IO避免了IO等待的开销,
在多核处理器下提高处理器的使用效率可以对数据进行分区,然后每个处理器处理不同的数据。

3.为什么用redis缓存而不用map、guaua

缓存分为本地缓存和分布式缓存,map和guaua实现的是本地缓存,特点是轻量、快速,生命周期随着JVM的销毁而结束,但是每个实例都各自保存一份缓存,缓存不具有一致性
redis实现的是分布式缓存,特点是所有实例公用一套缓存,实现了数据的一致性,缺点是需要保持redis 的高可用,整个架构就比较复杂

4.redis支持的数据类型

①.String
②.List
③.Hash:Hash是String类型的field和value的映射表,具体参考https://www.cnblogs.com/reecelin/p/13362104.html
④.Set
⑤.Zset

5.redis持久化

持久化有两种方式:
RDB(快照持久化):redis可以通过创建快照的方式来获得存储在内存里面的数据在某个时间点的副本,创建快照之后,可以对快照进行备份
可以将快照复制到其他服务器来创建拥有相同数据的服务器副本,还可以将快照留在原处,以便重启服务器使用;
AOF持久化:与快照持久化相比,AOF持久化的实时性更好,因此已成为主流的持久化方案。默认情况下Redis没有开启AOF (append only file)方式的持久化,可以通过appendonly参数开启;

6.redis事务

redis通过MULTI、EXEC、WATCH等命令来实现事务功能,事务提供了一种将多个命令请求打包,然后一次性,按顺序的执行多个命令的机制,并且在事务执行期间,是不能中断的,
一直到事务执行完成后服务器才会处理其他的请求;
在传统的关系式数据库中,常常用 ACID性质来检验事务功能的可靠性和安全性。在 Redis中,事务总是具有原子性(Atomicity)、一致性(Consistency)和隔离性(Isolation),并且当Redis运行在某种特定的持久化模式下时,事务也具有持久性(Durability) 。

7.缓存雪崩和缓存穿透

缓存雪崩:缓存同一时间大量的失效,造成同一时间很多向数据库发送请求,从而使数据库崩掉
解决方法:
·1 尽量保证整个redis集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策
●2 本地ehcache缓存+hystrix限流&降级,避免MySQL崩掉·事后:利用redis持久化机制保存的数据尽快恢复缓存

缓存穿透:大量的key根本不在缓存中,所以每次都要去查数据库,若对这个key进行大量的查询,导致大量请求落到数据库上,从而造成缓存穿透
解决方法:若缓存和数据库都不存在某个key,则给缓存中设置一个对应的key,只需将过期时间设置的短一些

posted @ 2020-12-01 15:29  babbo  阅读(184)  评论(0)    收藏  举报