特点:
-
方便扩餐-数据之间没有关系
-
大数据量高性能8w/s 写11w/s读
-
数据多样性 不需要事先设计数据库
-
RDBMS与NoSQL
基础知识
-
16个数据库,默认使用的是第0个
-
五大数据类型String 、list、 set、 hash、zset
-
事务
-
Redis单条命令保存保证原子性,但是事务是不保证原子性
-
Redis没有事务隔离的概念:所有命令在发起执行的时候才会执行
-
Redis事务:开启事务(multi)》命令入队》执行事务(exec)
-
-
乐观锁watch相当于MySQL里面的version
-
Jedis采用的是直连的方式,多个线程的操作不安全,避免的话采用的是池化技术
-
Redis数据使用的是内存中,因此广泛应用在缓存里面
-
使用当作缓存的原因:类比一下操作系统里面的局部性原理
-
使用Redis不用本地的Map的原理:Map属于本地缓存,生命周期伴随着JVM存在,多个实例情况下,使用Redis分布式缓存,可以的实现缓存的一致性。
-
Redis线程模型:内部使用的是文件事件处理器(file event handler),单线程,通过IO多路复用机制实现同时监听多个Socket,根据Socket上事件来选择对应的事件处理器进行处理。
文件事件处理器包括四个部分:
- 多个socket
- IO多路复用程序
- 文件事件分派器
- 事件处理器
多个socket可能会并发产生不同的操作,每个操作对应不同的文件事件,IO多路复用程序会将监听多个socket,将socket产生的事件放在队列中,事件分派器将队列中取出一个时间,将该事件交给相应的事件处理器进行处理。
-
redis与memmcached的区别
- redis支持更加丰富的数据类型,除去一般的kv,还有set、map,zset、hash等,Memecached支持简单的数据类型与string
- redis支持数据的持久化,可以将内存中的数据保存在的磁盘中,重启以后可以进行加载;memecached不行
- 集群模式:redis支持原生的cluster模型,memecached没有原生的集群模式,需要依靠客户端实现集群分片
- memecached是多线程,NIO复用的网络模型;redis是单线程多路IO复用模型
-
redis过期时间
- redis支持的设置时间过期的机制
- redis对于过期时间的进行删除的主要方法:定期删除+惰性删除
-
为了保证redis作为缓存数据库,保存都是热点数据, 需要进行内存淘汰——六种淘汰机制
- volatile-lru :从已经设置过期时间的数据集里面选取最少使用
- volatile-ttl:从已经设置过期时间的数据集里面选取要过期的
- volatile-random:从已经设置过期时间的数据集里面选取任意数据
- allkeys-lru:内存不足,在key空间里面使用LRU
- allkeys-random:从数据里面选择任意数数量淘汰
- no-eviction:禁止驱逐数据
-
持久化机制
- 快照机制(RDB):根据时间点创建副本
- 只追加文件(AOF):每执行一个操作就把相应的数据写入硬盘
-
缓存穿透与缓存雪崩
-
穿透:大量请求的key不存在于缓存中,导致请求直接数据库上,没有经过缓存
-
雪崩:缓存同一时间大面积失效,导致请求落在数据库上,数据库
-
解决方案:
穿透
- 缓存无效key:redis里面设置一个查不到的key就写进去,设置一个过期时间
- 布隆过滤器:在缓存之上设置一层布隆过滤器,将可能搜索的key全部保存在里面。
雪崩
- redis高可用
- 限流降低:缓存失效以后,使用加锁或者队列控制读数据库写缓存的线程数量:如果可以只允许一个线程查寻其他等待
- 数据预热:在正式部署之前,可能的数据全部加载到缓存里面。在即将发生大并发前手动加载触发,使缓存失效尽量均匀。
-